|
Softpanorama |
May the source be with you, but remember the KISS principle ;-)
|
| News | Recommended Books | Recommended Links | Scripting languages | Classic Papers | Education | Software Engineering |
| Assembler | C links | Cpp | Java | Pascal | Prolog | Debugging |
| Lexical structure | Control structures | Data Strructures | OO | |||
| Software Fashion | Coroutines | Tools | Quotes | History | Humor | Etc |
The quote were compiled from several sources. The major were The Contempt Page which in turn mentions Jim Huggins (see his Short Quotes web site), the Lambda the Ultimate web site, the quoteland.com web site, the Andy "Krazy" Glew's Favorite Quotes and Sayings web site, the Bumper-Sticker Computer Science web site, a Programming Quotations web site, the sysprog.net Quotations for Programmers web site, the Alan Perlis Epigrams in Programming web site, the Paul Graham's Quotes (mostly about Lisp) web site, the Quotations on simplicity in software design web site, Programming Quotations web site, Eugene Fink's web site, Glenn Vanderburg: Quotations on Software Design web site, Glenn Vanderburg: Quotations on Software Design web site, jbox.dk Quotations on simplicity in software design web site. Mathematical and Educational Quotation Server at Westfield State College Quotations Related to University Studies of Computer Science (some in Finnish)
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.- D. Adams
I will contend that conceptual integrity is the most important consideration in system design. It is better to have a system omit certain anomalous features and improvements, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas.
For a given level of function, however, that system is best in which one can specify things with the most simplicity and straightforwardness. Simplicity is not enough. Mooers's TRAC language and Algol 68 achieve simplicity as measured by the number of distinct elementary concepts. They are not, however, straightforward. The expression of the things one wants to do often requires involuted and unexpected combinations of the basic facilities. It is not enough to learn the elements and rules of combination; one must also learn the idiomatic usage, a whole lore of how the elements are combined in practice. Simplicity and straighforwardness proceed from conceptual integrity. Every part must reflect the same philosophies and the same balancing of desiderata. Every part must even use the same techniques in syntax and analogous notions in semantics. Ease of use, then, dictates unity of design, conceptual integrity.
Frederick P. Brooks, Jr.: The Mythical Man-Month. Addison-Wesley, Reading MA, 1995 (anniversary ed.)
Greenspun's Tenth Rule of Programming: “Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp.”
Simplicity of the language is not what matters, but simplicity of use.
Software development methodologies evolved under this regime [figure it out, code it up, compile it, run it, throw it away] along with a mythical belief in master planning. Such beliefs were rooted in an elementary-school-level fiction that great masterpieces were planned, or arose as a by-product of physicists shovelling menial and rote coding tasks to their inferiors in the computing department. Master planning feeds off the desire for order, a desire born of our fear of failure, our fear of death.
Richard P. Gabriel and Ron Goldman: Mob Software: The Erotic Life of Code
To me, development consists of two processes that feed each other. First, you figure out what you want the computer to do. Then, you instruct the computer to do it. Trying to write those instructions inevitably changes what you want the computer to do and so it goes.In this model, coding isn't the poor handmaiden of design or analysis. Coding is where your fuzzy, comfortable ideas awaken in the harsh domain of reality. It is where you learn what your computer can do. If you stop coding, you stop learning.
We aren't always good at guessing where responsibilities should go. Coding is where our design guesses are tested. Being prepared to be flexible about making design changes during coding results in programs that get better and better over time. Insisting that early design ideas be carried through is short sighted.
Kent Beck: Smalltalk Best Practice Patterns. Prentice Hall, NJ 1997
Planning is a necessary evil. It is a response to risk: the more dangerous an undertaking, the more important it is to plan ahead. Powerful tools decrease risk, and so decrease the need for planning. The design of your program can then benefit from what is probably the most useful source of information available: the experience of implementing it.
The spirit of Lisp hacking can be expressed in two sentences. Programming should be fun. Programs should be beautiful.
First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute.
Hal Abelson and Gerald Jay Sussman with Julie Sussman prefacing SICP
The most difficult work of programmers, and also the most rewarding, is not writing programs but rather designing abstractions.
Peter Van Roy and Seif Haridi: Concepts, Techniques, and Models of Computer Programming
A language that doesn't affect the way you think about programming, is not worth knowing.
A programming language is low level when its programs require attention to the irrelevant.
languages shape the way we think, or don't.
Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.
Edsger W. Dijkstra: How do we tell truths that might hurt? (EWD 498)
Ordinarily technology changes fast. But programming languages are different: programming languages are not just technology, but what programmers think in. They're half technology and half religion. And so the median language, meaning whatever language the median programmer uses, moves as slow as an iceberg.
languages are ecologies. Language features are not a priori good or bad. Rather, language features are good or bad in context, based on how well they interact with other language features.
What do I consider is most important for an abstract language to support efficiently? My time. Time is the only true, non-renewable commodity. I eschew languages like C because they often waste enormous amounts of my time trying to develop and debug programs, and justify it on the basis of micro-differences in speed that have just never ended up mattering to me. I regard C as appropriate for use as an assembly language, but it doesn't provide enough high-level services for me. When I'm old and grey and look back on my life, I want to have done a lot of interesting things, not just have done a few interesting things but “boy were they fast”.
I want my ideas to lead my technology and my tools, not to have my technology and tools leading my ideas.
Kent Pitman – Answers on Lisp and Much More, Slashdot 2002(?)
remember that language design and language implementation are different tasks. When you are designing a new language feature first think like a user and then validate it as an implementor.
The computers are never large enough or fast enough. Each breakthrough in hardware technology leads to more massive programming enterprises, new organizational principles, and an enrichment of abstract models. Every reader should ask himself periodically “Toward what end, toward what end?” — but do not ask it too often lest you pass up the fun of programming for the constipation of bittersweet philosophy.
Computing's core challenge is how not to make a mess of it.
It is time to unmask the computing community as a Secret Society for the Creation and Preservation of Artificial Complexity.
Software quality has almost nothing to do with algorithmic elegance, compactness, or speed — in fact, those attributes do more harm to quality than good.
The objective is to make things as clear as possible to the designer and to yourself, and excessive formality can destroy clarity just as easily as modest formality can enhance it.
.[The Spec] Be literal in your interpretation and smile when the designer accuses you of semantic nit-picking.
In programming, it's often the buts in the specification that kill you.
Don't squeeze the code. Don't squeeze the code. DON'T SQUEEZE THE CODE.
Like so much in testing, the act of getting the information on which to base tests can be more effective at catching and exterminating bugs than the tests that result from that information. Insisting on getting transaction flows or the equivalent is sometimes a gentle way of convincing inept design groups that they don't know what they're doing. These are harsh words, but let's face it: superb code and unit testing will be useless if the overall design is poor. And how can there be a rational, effective design if no one on the design team can walk you through the more important transactions, step by step and alternative by alternative. I'm sure that mine is a biased sample, but every system I've ever seen that was in serious trouble had no transaction flows documented, nor had the designers provided anything that approximated that kind of functional representation; however, it's certainly possible to have a bad design even with transaction flows.
Boris Beizer: Software Testing Techniques 2E. Van Nostrand Reinhold, New York 1990
Paradox: by not considering the future of your code, you make your code much more likely to be adaptable in the future.
Kent Beck: Test-Driven Development. Addison-Wesley, Boston 2002
The complexity of software is an essential property, not an accidental one. Hence descriptions of a software entity that abstract away its complexity often abstract away its essence.
Frederick P. Brooks, Jr.: No Silver Bullet — Essence and Accident in Software Engineering. In: The Mythical Man-Month (anniversary ed.) Addison-Wesley, Reading MA, 1995
The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity.
Edsger W. Dijkstra: How do we tell truths that might hurt? (EWD 498)
OO is like the Bible in that which scripture is to be interpreted metaphorically, and which is to be interpreted literally, is entirely a function of the religious agenda of the commentator. My own advice is to keep in mind that the stuff of computer programs is nothing but metaphor.
Thant Tessman in comp.object, August 2003
The object-oriented model makes it easy to build up programs by accretion. What this often means, in practice, is that it provides a structured way to write spaghetti code. This is not necessarily bad, but it is not entirely good either.A lot of the code in the real worl is spaghetti code, and this is probably not going to change soon. For programs that would have ended up as spaghetti anyway, the object-oriented model is good: they will at least be structured spaghetti. But for programs that might otherwise have avoided this fate, object-oriented abstractions could be more dangerous than useful.
Bricks are just too limited, and the circumstances where they make sense are too constrained to serve as a model for building something as diverse and unpredictable as a city. And further, the city itself is not the end goal, because the city must also –in the best case– be a humane structure for human activity, which requires a second set of levels of complexity and concerns. Using this metaphor to talk about future computing systems, it's fair to say that OO addresses concerns at the level of bricks.
Despite the early clear understanding of the nature of software development by OO pioneers, the current caretakers of the ideas have reverted to the incumbent philosophy of perfect planning, grand design, and omniscience inherited from Babbage's theology.
C++ is like teenage sex:
- It's on everyone's mind all the time.
- Everyone talks about it all the time.
- Everyone thinks everyone else is doing it.
- Almost no one is really doing it.
- The few who are doing it are
- doing it poorly;
- sure it will be better next time;
- not practicing it safely.
allegedly a toilet graffito at the Technion CS department in Haifa, Israel, 1993-11-08 [ornate PS version]
When your hammer is C++, everything begins to look like a thumb.
Being really good at C++ is like being really good at using rocks to sharpen sticks.
Thant Tessman in comp.lang.scheme, December 1996
(Of course SML does have its weaknesses, but by comparison, a discussion of C++'s strengths and flaws always sounds like an argument about whether one should face north or east when one is sacrificing one's goat to the rain god.)
Thant Tessman in comp.lang.scheme, April 1997
the effort that has gone into extending and 'refining' C++ (and to its creation in the first place) must be largely attributed to the unwillingness of its advocates to give up the effort they've already put into learning and using it (and C before it). Strangely, this is simultaneously despite and because of the fact that C++ is not one of the easier languages to learn.
Thant Tessman in comp.lang.c++.moderated, July 2000
As for C++ – well, it reminds me of the Soviet-era labor joke: “They pretend to pay us, and we pretend to work.” C++ pretends to provide an object-oriented data model, C++ programmers pretend to respect it, and everyone pretends that the code will work. The actual data model of C++ is exactly that of C, a single two-dimensional array of bits, eight by four billion, and all the syntactic sugar of C++ fundamentally cannot mask the gaping holes in its object model left by the cast operator and unconstrained address arithmetic.
The C language (invented by Bell Labs — the people who were supposed to be building products with five 9's of reliability – 99.999%) then taught two entire generations of programmers to ignore buffer overflows, and nearly every other exceptional condition, as well. A famous paper in the Communications of the ACM found that nearly every Unix command (all written in C) could be made to fail (sometimes in spectacular ways) if given random characters (“line noise”) as input. And this after Unix became the de facto standard for workstations and had been in extensive commercial use for at least 10 years. The lauded “Microsoft programming tests” of the 1980's were designed to weed out anyone who was careful enough to check for buffer overflows, because they obviously didn't understand and appreciate the intricacies of the C language.I'm sorry to be politically incorrect, but for the ACM to then laud “C” and its inventors as a major advance in computer science has to rank right up there with Chamberlain's appeasement of Hitler.
Now I want to argue that worse-is-better is better. C is a programming language designed for writing Unix, and it was designed using the New Jersey approach. C is therefore a language for which it is easy to write a decent compiler, and it requires the programmer to write text that is easy for the compiler to interpret. Some have called C a fancy assembly language. Both early Unix and C compilers had simple structures, are easy to port, require few machine resources to run, and provide about 50%–80% of what you want from an operating system and programming language.Half the computers that exist at any point are worse than median (smaller or slower). Unix and C work fine on them. The worse-is-better philosophy means that implementation simplicity has highest priority, which means Unix and C are easy to port on such machines. Therefore, one expects that if the 50% functionality Unix and C support is satisfactory, they will start to appear everywhere. And they have, haven't they?
Unix and C are the ultimate computer viruses.
Richard P. Gabriel: Lisp - Good News, Bad News, How to Win Big
The most irritating part of Unix IMHO is not the design of the kernel (yeah, yeah it's a monolithic spaghetti ball) or the functionality of system calls (yeah, yeah, no PCLSRing) or the unrecoverability of kernel panics, or whatever else is associated with the kernel and driver implementations. What's really irritating about the Unix design is all the institutionalized crufty software still floating around after thirty years of development, redesign, and redevelopment. Unix hackers have long spent time hacking on the hardware support, improving process scheduling, memory management, and the like, but they still live with an interface that feels just like 2.9BSD on a PDP-11/40, with some frills. It's disgusting. Everything from the init process on upwards is institutionalized, designed just like it was on the good old minicomputers.(I'm not degrading the Unix (or UN*X as it were) of that era, nor the machines it ran on, many of which I'm enamored of and wish I could own. I'm criticizing the stubborness of an operating system that dates from that era and appears to be little changed from it.)
“The wonderful thing about Unix standards is that there are so many to choose from.” You may be totally bewildered about the multitude of various standards that exist. Rest assured that nowhere in this manual will you encounter an attempt to spell it all out for you; you could not read and internalise such a twisted account without bleeding from the nose and ears.
Olin Shivers (supplementing Andrew S. Tanenbaum): Scsh Reference Manual
Yes, dear?
No, I wasn't complaining....
Yes, I understand unix is the waveofthefuture....
Yes, unix is the equivalent of a programmer/sysadmin Full Employment Act....
No, lusers will never understand unix, so I'll always have a job if I learn it....
Yes, unix is free (and worth every cent)....
No, no two unix installations are alike, so there's plenty of job security for everyone....
No, nothing ever gets fixed in unix so there's more job security....Joe Bednorz: Gawd I miss VMS in e.mail to Richard Levitte, March 1996
Perl's gluing ability goes beyond computation, to people. To the poor and have-nots. It unites people in the computing field who are not endowed with fancy engaging brains. It is the sanctuary of dunces. The expressions of those thoughtless. The godsend for brainless coders. The means and banner of sys admins. The lingua franca of trial-and-error hackers. The song and dance of stultified engineers.I'm also a Perler. Share a secret with me: When you are cornered by mathematicians or the like, who are about to speak lamba or something we don't understand, what do you do? Of course, flip out the little Swiss Army Knives in our pockets, and splutter #%$@ syntaxes that is equally abstruse, and we feel safe and secure. Fuck geniuses in this world. Leave Perlers along. Larry Wall for President. The three principal virtues of . . .
I think comrade glauber is incorrect. First of all, he got our mantra wrong. It is: The three characteristics of Perl programers: mundaneness, sloppiness, and fatuousness. Secondly, our language is not evolved to support no fucking real life no shit. Our language, is designed to be a fuckup from the very beginning. Designed, to fuck up those computer scientists. Fuck up their teachings. Fuck up their students. Fuck up their language. Fuck up their correctness. Fuck up their fucking theoretical theories. Remember, P is for Practical.
Perl did some things well: It transcended implementation differences by staring them in the eye and fighting it out, not by giving up, whining that something isn't standard and portable, etc. It gave the bad standards and their nonsensical implementation differences the finger and wrote its own standard. For the kinds of tasks Perl does well, it is downright impressively portable. You need the ever expanding Perl book, but not the tens or hundreds of shelf-feet of manuals that you used to have to deal with. Perl has created its own operating system interface precisely by being an incredibly ugly implementation, and I'll give Larry Wall this, but not much else: He did fully understand the value of uniform external behavior of a tool and he was willing to pay the price to get it. There is no excuse for the language he created in order to do this, however.
the perl programmer who veers off the road into the forest will get out of his car and cut down each and every tree that blocks his progress, then drive a few meters and repeat the whole process. whether he gets where he wanted to go or not is immaterial — a perl programmer will happily keep moving forward and look busy.
it's not that perl programmers are idiots, it's that the language rewards idiotic behavior in a way that no other language or tool has ever done,
What really pisses me off with Perl is that people work so hard doing so terribly little while they think they have worked very little doing something really nifty. Fools!
Software Engineering is Programming when you can't.
We must give industry not what it wants, but what it needs.
Edsger W. Dijkstra quoted in the program (10M .pdf) of his birthday symposium, Austin TX, 2000
Another series of [philosopher's] stones in the form of “programming tools” is produced under the banner of “software engineering”, which, as time went by, has sought to replace intellectual discipline by management discipline to the extent that it has now accepted as its charter “How to program if you cannot”.
Edsger W. Dijkstra: The threats to computer science (EWD 898)
In a cruel twist of history, however, American society has chosen precisely the 20th Century to become more and more a-mathematical (...), and we have reached the paradoxical state that, of all so-called developed nations, the USA is the most dependent on programmed computers and intellectually the worst equipped to be so. The suggestion that the programming problem could be amenable to mathematical treatment is, if heard at all, instantaneously rejected as being totally unrealistic. As a result, Program Design is prevented from becoming a subdiscipline of Computing Science. (...) And in the mean time, programming methodology –renamed “software engineering”– has become the happy hunting-ground for the gurus and the quacks.
Edsger W. Dijkstra: Why American Computing Science seems incurable (EWD 1165)
The problems of business administration in general and data base management in particular are much too difficult for people that think in IBMerese, compounded with sloppy English.
Edsger W. Dijkstra: How do we tell truths that might hurt? (EWD 498)
Robert and I both knew Lisp well, and we couldn't see any reason not to trust our instincts and go with Lisp. We knew that everyone else was writing their software in C++ or Perl. But we also knew that that didn't mean anything. If you chose technology that way, you'd be running Windows.
During the years we worked on Viaweb I read a lot of job descriptions. A new competitor seemed to emerge out of the woodwork every month or so. The first thing I would do, after checking to see if they had a live online demo, was look at their job listings. After a couple years of this I could tell which companies to worry about and which not to. The more of an IT flavor the job descriptions had, the less dangerous the company was. The safest kind were the ones that wanted Oracle experience. You never had to worry about those. You were also safe if they said they wanted C++ or Java developers. If they wanted Perl or Python programmers, that would be a bit frightening — that's starting to sound like a company where the technical side, at least, is run by real hackers. If I had ever seen a job posting looking for Lisp hackers, I would have been really worried.
While we were doing Viaweb, we took a good deal of heat from pseudo-technical people like VCs and industry analysts for not using a database — and for using cheap Intel boxes as servers, running FreeBSD. But when we were getting bought by Yahoo, we found that they also just stored everything in files — and all their servers were also cheap Intel boxes running FreeBSD.(During the Bubble, Oracle used to run ads saying that Yahoo used Oracle software. I found this hard to believe, so I asked around. It turned out the Yahoo accounting department used Oracle.)
Technology is part of the answer, not part of the question. Don't make choices only to then try to figure out how to twist the problem in such a way so as to fit your choice. This will often result in your solution being more convoluted than my previous sentence.
Curtis Poe: Finding Technology Solutions, Perl Monks 2001-07-23
Those who use databases usually do so because they master no data structures of their own.
A few years from now, programming will have been revolutionized and lots and lots of work will be done by software that writes itself. This will requrie massive talent and intelligence and thinking outside the box and what have you, but for the time being, programming is a “consumer” job, “assembly line” coding is the norm, and what little exciting stuff is being performed is not going to make it compared to the mass-marketed crap sold by those who think they can surf on the previous half-century's worth of inventions forever. This will change, however, and those who know Common Lisp will be relieved of reinventing it, like the rest are doing, even in the “tools” world, badly.
there is no aspect of database management that is not characterized by lack of foundation knowledge and riddled with confusion (...) As long as the industry neither requires, nor rewards knowledge of fundamentals, why should we expect anything else?
Fabian Pascal Responds, On Denormalization and Repeating Groups
VMS is like a Soviet railroad train. It's basically industrial-strength, but when you look at it closely, everything's a little more shabby than you might like. It gets the job done, but there's no grace to it.The Mac operating system is like the monorail at Disney World. It's kind of spectacular and fun, but it doesn't go much of anywhere. Still, the kids like it.
Unix is like the maritime transit system in an impoverished country. The ferryboats are dangerous as hell, offer no protection from the weather and leak like sieves. Every monsoon season a couple of them capsize and drown all the passengers, but people still line up for them and crowd aboard.
MS-DOS is like the US rail system. It's there, but people just ignore it and find other ways of getting where they want to go.
Posted by Paul A. Vixie to rec.humor in March 1991
You're posting to a Scheme group. Around here, arguing that Java is better than C++ is like arguing that grasshoppers taste better than tree bark.
Thant Tessman in comp.lang.scheme, June 2000
[On the recommendation to “initialize every variable as soon as it comes into scope”]
This is one of the totally mindless rules which in practice leads to bad code. I am sick of seeing C code which initialises variables to values that never get used; that is lying to the reader, and lying to the reader is never good idea. Variables should only ever be initialised when you have a value that you intend to use that you can initialise them with.Richard A. O'Keefe in squeak-dev mailing list, September 2003
If someone didn't understand their code and its likely uses well enough to write brief useful comments, why should I imagine that they understood it well enough to write code that works?
Realistically, the practice of putting untested code into systems is common, and so are system failures. The excuse I've most often heard for putting in untested code is that there wasn't enough time or money left to do the testing. If there wasn't enough time and money to test the routine, then there wasn't enough time and money to create it in the first place. What you think is code, before it has been properly tested, is not code, but the mere promise of code — not a program, but a perverse parody of a program. If you put such junk into a system, its bugs will show, and because there hasn't been a rigorous unit test, you'll have a difficult time finding the bugs. As Hannah Cowley said, “Vanity, like murder, will out.” For it's vanity to think that untested code has no bugs, and murder to put such code in. It is better to leave out untested code altogether than to put it in. Code that doesn't exist can't corrupt good code. A function that hasn't been implemented is known not to work. An untested function may or may not work itself (probably not), but it can make other things fail that would otherwise work. In case I haven't made myself clear, leaving untested code in a system is stupid, shortsighted, and irresponsible.
GIGO (“Garbage-in equals garbage-out”) is no explanation for anything except our failure to test the system's tolerance for bad data. Garbage shouldn't get in — not in the first place or in the last place. Every system must contend with a bewildering array of internal and external garbage, and if you don't think the world is hostile, how do you plan to cope with alpha particles?
But to be really diabolical takes organization, structure, discipline, and method. Taking random potshots and waiting for inspiration with which to victimize the programmer won't do the job. Syntax testing is a primary tool of dirty testing, and method beats sadism every time.
A good threat is worth a thousand tests.
Boris Beizer: Software Testing Techniques 2E. Van Nostrand Reinhold, New York 1990
Tests are the Programmer's Stone, transmuting fear into boredom.
Kent Beck: Test-Driven Development. Addison-Wesley, Boston 2002
Finally, the idioms of a language are useful as a sociological exercise (“How do the natives of this linguistic terrain cook up a Web script?”), but it's dangerous to glean too much from them. Idioms are fundamentally human, therefore bearing all the perils of faulty, incomplete and sometimes even outlandish human understanding.
Shriram Krishnamurthi: Programming Languages: Application and Interpretation
Yes, as a name, xnor generalises well to the n-ary case: I'm confused completely independent of the number of arguments passed to the function.
The main idea here is that in the end the programmers want to program in a very high level language, and the machine should be as configurable as possible towards helping the best conceived environment run as fast as possible. A secondary idea is that it is hard to design when you have your optimization hat on, and thus, if you want to make progress with interactive language design, you want to be able to start using your latest and greatest ideas with as little special optimization as possible.These are not goals that Intel and Motorola understood, anymore than they understood anything important about SW in general. The current caching schemes are rudimentary to say the least. The more interesting architectures today are the graphics accelerators — they don't do anything particularly new, but they at least have some notion of what they are supposed to do (and also what they don't have to do when Moore's Law makes it easy to have multiple processors).
In fact, flow charting is more preached than practiced. I have never seen an experienced programmer who routinely made detailed flow charts before beginning to write programs. Where organization standards require flow charts, these are almost invariably done after the fact. Many shops proudly use machine programs to generate this “indispensable design tool” from the completed code. I think this universal experience is not an embarassing and deplorable departure from good practice, to be acknowledged only with a nervous laugh. Instead it is the application of good judgment, and it teaches us something about the utility of flow charts.
Frederick P. Brooks, Jr.: The Mythical Man-Month. Addison-Wesley, Reading MA, 1995 (anniversary ed.)
A favorite subject for Ph.D. dissertations in software engineering is graphical, or visual, programming, the application of computer graphics to software design. Sometimes the promise of such an approach is postulated from the analogy with VLSI chip design, where computer graphics plays so fruitful a role. Sometimes the approach is justified by considering flow charts as the ideal programming design medium, and providing powerful facilities for constructing them.Nothing even convincing, much less exciting, has yet emerged from such efforts. I am persuaded that nothing will.
In the first place, as I have argued elsewhere, the flow chart is a very poor abstraction of software structure, Indeed, it is best viewed as Burkes, von Neumann, and Goldstine's attempt to provide a desperately needed high-level control language for their proposed computer. In the pitiful, multipage, connection-boxed form to which the flow chart has today been elaborated, it has proved to be essentially useless as a design tool — programmers draw flow charts after, not before, writing the programs they describe.
.Whereas the difference between poor conceptual designs and great ones may lie in the soundness of design method, the difference between good designs and great ones surely does not. Great designs come from great designers. Software construction is a creative process. Sound methodology can empower and liberate the creative mind, it cannot enflame or inspire the drudge.Frederick P. Brooks, Jr.: No Silver Bullet — Essence and Accident in Software Engineering. In: The Mythical Man-Month (anniversary ed.) Addison-Wesley, Reading MA, 1995
Flowcharts have been falling out of favor for over a decade, and before another decade passes they'll be regarded as curious, archaic relics of a bygone programming era. Indeed, flowcharts are rarely used today; they're created mainly to satisfy obsolete documentation specifications.
I think that if you were to gather statistics over one big project or many small projects (that used the same paper), then the weight of the listings would correlate as well to the bug rate and test efforts as do lines of code. Yet, “lines of code” sounds reasonable and scientific, and “listing weight” seems to be an outrageous put-on. Who's putting whom on? The fact is, that it makes exactly as much sense (or nonsense) to say “This is a 230-gram program” as it does to say “This is a 500-line program.”
“Logic” is one of the most often used words in programmers' vocabularies but one of their least used techniques.
The barrier to reusable software has never been technical — it's been financial and managerial. Reusable software doesn't get built if no one is willing to pay the price. New languages and programming techniques won't do it — they never have. It takes bucks and guts.
Boris Beizer: Software Testing Techniques 2E. Van Nostrand Reinhold, New York 1990
I have been told that one of the reasons for the longevity of the Roman bridges is that their designers had to stand under them when they were first used. It may be time to put a similar discipline into the software field.
We have gotten OK at building cathedrals — only we are building the same dozen or so over and over again.
The effect of ownership imperatives has caused there to be no body of software as literature. It is as if all writers had their own private companies and only people in the Melville company could read Moby-Dick and only those in Hemingway's could read The Sun Also Rises.
Richard P. Gabriel and Ron Goldman: Mob Software: The Erotic Life of Code
(I have found that the worst possible thing you could do wrong in this world is to give people something that is more powerful than they are prepared to understand. Back when I believed that SGML was a brilliant idea, I did not understand that the people who were the intended users were completely unable to understand it, and that only those who were stupid enough not to realize it in time, would continue to work with it, and so they sat there with their excellent document production system with a clever markup system and thought it had to be useful for something grander, and now we have XML, a non-solution to a non-problem so brilliant that m4 no longer seems like a prank. We really need Gary Larson- style cartoons on the history of computer science.)
HTML represents the worst of two worlds. We could have taken a formatting language and added hypertext anchors so that users had beautifully designed documents on their desktops. We could have developed a powerful document structure language so that browsers could automatically do intelligent things with Web documents. What we have got with HTML is ugly documents without formatting or structural information.
Some of the patterns books I have read stress the language-independence of the patterns. This turns out to mean “hey, we need it for Java too!”
Richard A. O'Keefe in squeak-dev mailing list, November 2002
It's hard to make things fool-proof because fools are so ingenious. I remember someone telling me about a statistics package they had written which would only let you do meaningful regressions. Instead of being glad to have errors caught before it was too late, their users had discovered that they could save data to a file and load it back in as if it was completely new data, thereby tricking the program into accepting calculations which made no sense.
Richard A. O'Keefe in squeak-dev mailing list, December 2002
You are crazy, but that's not important. The only thing that matters is whether or not you do anything. Do anything, and you matter.
If people are sane, if the world keeps moving forward, if we intellectuals keep fulfilling our duty of education, then good things will spread, and happiness will rain on earth.
| We have also obtained a glimpse of another
crucial idea about languages and program design. This is the approach of
statified design, the notion that a complex system should be structured
as a sequence of levels that are described using a sequence of languages.
Each level is constructed by combining parts that are regarded as primitive
at that level, and the parts constructed at each level are used as primitives
at the next level. The language used at each level of a stratified design
has primitives, means of combination, and means of abstraction appropriate
to that level of detail.
- H. Abelson and G. Sussman (in "The Structure and Interpretation of Computer Programs) |
| Good teaching is more a giving of the right
questions than a giving of the right answers.
- J. Albers |
| They know enough who know how to learn
- J. Adams |
| Computer Science is a science of abstraction
-creating the right model for a problem and devising the appropriate mechanizable
techniques to solve it.
- A. Aho and J. Ullman |
| Each pattern describes a problem which occurs
over and over again in our environment, and then describes the core of the
solution to that problem, in such a way that you can use this solution a
million times over, without ever doing it in the same way twice.
- C. Alexander |
| Don't worry about people stealing your ideas.
If your ideas are any good, you'll have to ram them down people's throats.
- H. Aiken |
| Eighty percent of success is showing up.
- W. Allen |
| If you're not failing every now and again,
it's a sign you're not doing anything very innovative.
- W. Allen |
| Today, most software exists, not to solve
a problem, but to interface with other software.
- I. O. Angell |
| All programmers are playwrights and all computers
are lousy actors.
- Anonymous |
| Any programming problem can be solved by adding
a level of indirection. (also see "Any performance problem..." by M. Haertel).
- Anonymous |
| Bad code isn't bad, its just misunderstood.
- Anonymous |
| Debugging is anticipated with distaste, performed
with reluctance, and bragged about forever.
- Anonymous |
| Experience is a poor teacher: it gives its
tests before it teaches its lessons.
- Anonymous |
| If I had eight hours to chop down a tree,
I would spend 6 hours sharpening an axe.
- Anonymous |
| If you understand what you're doing, you're
not learning anything.
- Anonymous |
| In theory, there is no difference between
theory and practice, but not in practice.
- Anonymous |
| It is easier to measure something than to
understand what you have measured.
- Anonymous |
| Measure twice, cut once.
- Anonymous |
| Microsoft, where quality is job 1.1
- Anonymous |
| On a visit to the NASA space center, President
Kennedy spoke to a man sweeping up in one of the buildings. "What's your
job here?" asked Kennedy. "Well Mr. President," the janitor replied, "I'm
helping to put a man on the moon".
- Anonymous |
| One day a mother comes home from work and
asks her son, "What did you do today?" The son replied, "I taught our dog
how to play the piano." The mother, incredulous, asked, "Our dog can play
the piano?", to which the son laughed and replied, "Of course not mom. I
said that I taught him; I didn't say that he learned how."
- Anonymous |
| Programming languages should be designed not
by piling feature on top of feature, but by removing the weaknesses and
restrictions that make additional features appear necessary.
- Anonymous, Revised Report on the Algorithmic Language Scheme |
| Programs for sale: Fast, Reliable, Cheap:
choose two.
- Anonymous |
| Ready, fire, aim (the fast approach to software
development). Ready, aim, aim, aim, aim ... (the slow approach to software development). - Anonymous |
| Real programmers don't comment their code.
If it was hard to write, it should be hard to understand.
- Anonymous |
| Recurses! Called again.
- Anonymous |
| The huge printing presses of a major Chicago
newspaper began malfunctioning on the Saturday before Christmas, putting
all the revenue for advertising that was to appear in the Sunday paper in
jeopardy. None of the technicians could track down the problem. Finally,
a frantic call was made to the retired printer who had worked with these
presses for over 40 years. "We'll pay anything; just come in and fix them,"
he was told.
When he arrived, he walked around for a few minutes, surveying the presses; then he approached one of the control panels and opened it. He removed a dime from his pocket, turned a screw 1/4 of a turn, and said, "The presses will now work correctly." After being profusely thanked, he was told to submit a bill for his work. The bill arrived a few days later, for $10,000.00! Not wanting to pay such a huge amount for so little work, the printer was told to please itemize his charges, with the hope that he would reduce the amount once he had to identify his services. The revised bill arrived: $1.00 for turning the screw; $9,999.00 for knowing which screw to turn. Commentary: most debugging problems are fixed easily; identifying the location of the problem is hard. - Anonymous |
| The person who knows HOW will always have
a job. The person who knows WHY will always be his/her boss.
- Anonymous |
| The sooner you get behind in your work, the
more time you have to catch up.
- Anonymous |
| There are only 10 different kinds of people
in the world: those who know binary and those who don't.
- Anonymous |
| Think (design) globally; act (code) locally.
- Anonymous |
| Think twice, code once.
- Anonymous |
| Time is an excellent teacher; but eventually
it kills all its students.
- Anonymous |
| Weeks of programming can save you hours of
planning.
- Anonymous |
| When a programming language is created that
allows programmers to program in simple English, it will be discovered that
programmers cannot speak English.
- Anonymous |
| Why do we never have time to do it right,
but always have time to do it over?
- Anonymous |
| By viewing the old we learn the new.
- Anonymous Chinese Proverb |
| Give me a fish and I eat for a day. Teach
me to fish and I eat for a lifetime.
- Anonymous Chinese Proverb |
| He who asks is a fool for five minutes; he
who does not ask remains a fool forever.
- Anonymous Chinese Proverb |
| Teachers open the door, but you must enter
by yourself.
- Anonymous Chinese Proverb |
| Tell me and I forget. Show me and I remember.
Involve me and I understand.
- Anonymous Chinese Proverb |
| The first step towards wisdom is calling things
by their right names.
- Anonymous Chinese Proverb |
| The person who says it cannot be done should
not interrupt the person doing it.
- Anonymous Chinese Proverb |
| He who is ashamed of asking is ashamed of
learning.
- Anonymous Danish Proverb |
| No matter how far down the wrong road you
have gone, turn back now.
- Anonymous Turkish Proverb |
| Those who know, do. Those who understand,
teach.
- Aristotle |
| We are what we repeatedly do. Excellence,
then, is not an act, but a habit.
- Aristotle |
| The most exciting phrase to hear in science
-the one that heralds new discoveries- is not "Eureka!" but "That's
funny...".
- I. Asimov |
| The Analytical Engine weaves Algebraical patterns
just as the Jacquard loom weaves flowers and leaves.
- A. Augusta, Countess of Lovelace, on Babbage's Analytical Engine |
| On two occasions, I have been asked [by members
of Parliament], "Pray, Mr. Babbage, if you put into the machine wrong figures,
will the right answers come out?" I am not able to rightly apprehend the
kind of confusion of ideas that could provoke such a question.
- C. Babage |
| I, myself, have had many failures and I've
learned that if you are not failing a lot, you are probably not being as
creative as you could be -you aren't stretching your imagination.
- J. Backus |
| A prudent question is one-half of wisdom.
- F. Bacon |
| I can only think that the book is read because
it deals with the difficulties of schooling, which do not change. Please
note: the difficulties, not the problems. Problems are solved or disappear
with the revolving times. Difficulities remain. It will always be difficult
to teach well, to learn accurately; to read, write, and count readily and
competently; to acquire a sense of history and start one's education or
anothers.
- J. Barzun ("Begin Here", pp 14), |
| The American university is built on two false
premises: that all teachers must add to the existing stock of knowledge
by research, and that all self-respecting institutions fulfill this role
only by employing productive scholars...Of course, the teacher must keep
reading and thinking abreast of his time, but this does not mean that he
must write and publish. The confusion hides a further absurd assumption,
which is that when a man writes a scholarly book that reaches a dozen specialists
he adds immeasurably to the world's knowledge; whereas if he imparts his
thoughts and his reading to one hundred and fifty students every year, he
is wasting his time and leaving the world in darkness. One is tempted to
ask what blinkered pedant ever launched the notion that students in coming
to college seceded from the human race and may therefore be safely left
out when knowledge is being broadcast.
- J. Barzun ("Teacher in America"), |
| The sole justification of teaching, of the
school itself, is that the student comes out of it able to do something
he could not do before. I say do and not know, because knowledge
that doesn't lead to doing something new or doing something better is not
knowledge at all.
- J. Barzun ("Begin Here", pp 112), |
| The truth is, when all is said and done, one
does not teach a subject, one teaches a student how to learn it.
Teaching may look like administering a dose, but even a dose must be worked
on by the body if it is to cure. Each individual must cure his or her own
ignorance.
- J. Barzun ("Begin Here", pp 35), |
| Optimism is an occupational hazard of programming:
testing is the treatment.
- K. Beck |
| The cheapest, fastest, and most reliable components
of a computer system are those that aren't there.
- G. Bell |
| Dakin (to Irwin, his teacher): Do you really
believe that, sir, or are you just trying to make us think?
- A. Bennet (in "The History Boys") |
| The key to performance is elegance, not batallions
of special cases.
- J. Bently & D. McIlroy |
| Walking on water and developing software from
a specification are easy if both are frozen.
- E. Berard |
| More than the act of testing, the act of designing
tests is one of the best bug preventers known. The thinking that must be
done to create a useful test can discover and eliminate bugs before they
are coded - indeed, test-design thinking can discover and eliminate bugs
at every stage in the creation of software, from conception to specification,
to design, coding and the rest.
- B. Bezier |
Percy: You know, they do say that the Infanta's eyes are more beautiful
than the famous Stone of Galveston.
Edmund: Mm! ... What?
Percy: The famous Stone of Galveston, My Lord.
Edmund: And what's that, exactly?
Percy: Well, it's a famous blue stone, and it comes ... from Galveston.
Edmund: I see. And what about it?
Percy: Well, My Lord, the Infanta's eyes are bluer than it, for a start.
Edmund: I see. And have you ever seen this stone?
Percy: (nods) No, not as such, My Lord, but I know a couple of people who
have, and they say it's very very blue indeed.
Edmund: And have these people seen the Infanta's eyes?
Percy: No, I shouldn't think so, My Lord.
Edmund: And neither have you, presumably.
Percy: No, My Lord.
Edmund: So, what you're telling me, Percy, is that something you have never
seen is slightly less blue than something else you have never seen.
Percy: (finally begins to grasp) Yes, My Lord.
I sometimes feel this way when trying to explain a new programming concept.
- From the Queen of Spain's Beard episode of
Blackadder. |
| There is a division in the student population
between those who go to college to learn and those who go to college to
earn a diploma.
- J. Blau (letter to the editor, Chronicle of Higher Education, May 24, 2002) |
| It is wrong to think that the task of physics
is to find out how nature is. Physics concerns what we say about nature.
- N. Bohr |
| Opposites are not contradictory but complementary.
- N. Bohr |
| Software development has been, is, and will
likely remain fundamentally hard. Building quality systems involves an essential
and irreducible complexity, which is why the entire history of software
engineering can be characterized as one of rising levels of abstraction.
As such, the task of the software development team is to engineer the illusion
of simplicity. Nonetheless, software-intensive systems can amplify human
intelligence, but they cannot replace human judgment; software-intensive
systems can fuse, co-ordinate, classify, and analyze information, but they
cannot create knowledge. In other words, not everything we want to build
can be built: there exist pragmatic theoretical and technical limits that
make software develpment hard if not impossible. Furthermore, not everything
we want to build should be built: there exist moral economic, social, and
political limits that govern human industry. From fundamental to human,
these are the factors tht define the limits of software, factors that separate
our vision from execution.
- G. Booch (in a blurb from a talk, "The Limits of Software") |
| That language is an instrument of human reason,
and not merely a medium for the expression of thought, is a truth generally
admitted.
- G. Boole |
| The greatest obstacle to discovery is not
ignorance, but the illusion of knowledge.
- D. Boorstin |
| The most likely way for the world to be destroyed,
most experts agree, is by accident. That's where we come in; we're computer
professionals. We cause accidents.
- N. Borenstein |
| All models are wrong; some models are useful.
- G. Box |
| Simplicity and flexibility will trump optimization
and power in a world where connectivity is the key.
- A. Bosworth (paraphrased by David Bank in Breaking Windows, page 203) |
| The important thing in science is not so much
to obtain new facts as to discover new ways of think about them.
- W. Bragg |
| Information wants too be free. Information
also wants to be expensive. Information wants to be free because it has
become so cheap to distribute, copy, and recombine---too cheap to meter.
It wants to be expensive because it can be immeasurably valuable to the
recipient. That tension will not go away. It leads to endless wrenching
debate about price, copyright, "intellectual property", the moral rightness
of casual distribution, because each round of new devices makes the tension
worse, not better.
- S. Brand (see the Information Wants to Be Free web page) |
| It is important that students bring a certain
ragamuffin, barefoot irreverence to their studies; they are not here to
worship what is known, but to question it.
- J. Bronowski |
| That is the essence of science: ask an impertinent
question, and you are on the way to a pertinent answer.
- J. Bronowski |
| Welcome to Yale. Yale will be for you and
to you what you make of it. Despite the gloom of the times this is not a
gloomy place. It is a place where life can have purpose without being a
society of driven men and women. It is also a place where there is no escape
from argument, for the next person you meet will not be likely to agree
with the last person talked to. This is a community which rewards participation
but does not expect conformity. This is primarily a place for learning,
but not all learning is in books or laboratories or classrooms. You probably
have not been as free before. You may not be as free again. Enjoy the privilege
of doubt. Make the most of it.
- K. Brewster |
| Good judgment comes from experience; experience
comes from bad judgment.
- F. Brooks |
| Plan to throw one away; you will anyhow.
- F. Brooks ("The Mythical Man-Month", Chapter 11) |
| If you plan to throw one away, you will throw
away two.
- C. Zerouni |
| Scientists build to learn; Engineers learn
to build.
- F. Brooks |
| The hardest part of the software task is arriving
at a complete and consistent specification, and much of the essence of building
a program is in fact the debugging of the specification.
- F. Brooks |
| The programmer, like the poet, works only
slightly removed from pure thought-stuff. He builds castles in the air,
from air, creating by exertion of the imagination. Few media of creation
are so flexible, so easy to polish and rework, so readily capable of realizing
grand conceptual structures. Yet the program construct, unlike the poet's
words, is real in the sense that it moves and works, producing visible outputs
separate from the construct itself. It prints results, draws pictures, produces
sounds, moves arms. The magic of myth and legend has come true in our time.
One types the correct incantation on a keyboard, and a display screen comes
to life, showing things that never were nor could be. ... The computer resembles
the magic of legend in this respect, too. If one character, one pause, of
the incantation is not strictly in proper form, the magic doesn't work.
Human beings are not accustomed to being perfect, and few areas of human
activity demand it. Adjusting to the requirement for perfection is, I think,
the most difficult part of learning to program.
- F. Brooks ("The Mythical Man Month", pages 7-8) |
| Successful software always gets changed.
- F. Brooks |
| A man's reach should exceed his grasp, or
what's heaven for?
- R. Browning |
| They may forget what you said, but they will
never forget how you made them feel.
- C. Buchner |
| ...and then it occurred to me that a computer
is a stupid machine with the ability to do incredibly smart things, while
computer programmers are smart people with the ability to do incredibly
stupid things. They are, in short, a perfect match.
- B. Bryson |
| Learning how to learn is life's most important
skill.
- T. Buzan |
| The first 90% of the code accounts for the
first 90% of the development time. The remaining 10% of the code accounts
for the other 90% of the development time.
- T. Cargill |
| The sooner you start to code, the longer the
program will take.
- R. Carlson |
| The important point is that the cost of adding
a feature isn't just the time it takes to code it. The cost also includes
the addition of an obstacle to future expansion. Sure, any given feature
list can be implemented, given enough coding time. But in addition to coming
out late, you will usually wind up with a codebase that is so fragile that
new ideas that should be dead-simple wind up taking longer and longer to
work into the tangled existing web. The trick is to pick the features that
don't fight each other.
- J. Carmack |
| We think too much about effective methods
of teaching and not enough about effective methods of learning. No matter
how good teaching may be, each student must take the responsibility for
his own education.
- J. Carolus S.J. |
| In a way, math isn't the art of answering
mathematical questions, it is the art of asking the right questions, the
questions that give you insight, the ones that lead you in interesting directions,
the ones that connect with lots of other interesting questions -the ones
with beautiful answers.
- G. Chaitin (pg. 23, in "Meta Math: The Quest for Omega") |
| Mathematical truth is not totally objective.
If a mathematical statement is false, there will be no proofs, but if it
is true, thre will be an endless variety of proofs, not just one! Proofs
are not impersonal, they express the personality of their creator/discoverer
just as much as literary efforts do. If something important is true, there
will be many reasons that it is true, many proofs of that fact. Math
is the music of reason, and some proofs sound like jazz, others sound like
a fugue. Which is better, the jazz or the fugue? Neither: it's all a matter
of taste...each proof will emphasize different aspects of the problem, each
proof will lead in a different direction. Each one will have different corollaries,
different generalizations...Mathematical facts are not isolated, they are
woven into a vast spider's web of interconnections.
- G. Chaitin (pg. 23, in "Meta Math: The Quest for Omega") |
| Any sufficiently advanced technology is indistinguishable
from magic.
- A. Clarke |
| We don't have time to stop for gas, we're
already late.
- M. Cleron (Commenting on how Software Projects are often Run) |
| Whenever there is a hard job to be done I
assign it to a lazy man; he is sure to find an easy way of doing it.
- W. Chrysler |
| The real technology -behind all our other
technologies- is language. It actually creates the world our consciousness
lives in.
- A. Codrescu |
| I hear and I forget; I see and I remember;
I do and I understand.
- Confucius |
| Never hesitate to ask a lesser person.
- Confucius |
| Press on. Nothing in th world can take the
place of persistence. Talent will not; nothing is more common than unsuccessful
men with talent. Genius will not; unrewarded genius is almost a proverb.
Education alone will not; the world is full of educated derelicts. Persistence
and determination alone are omnipotent.
- C. Coolidge |
| Six jokes: "What do you get when you cross
a computer with an airplane? What do you get when you cross a computer with
a camera? What do you get when you cross a computer with an alarm clock?
What do you get when you cross a computer with a car? What do you get when
you cross a computer with a bank? What do you get when you cross a computer
with a warship?"
In all six cases the answer is "A computer." [Cooper illustrates how the nature of these systems becomes dominated by the nature of their computer components] - A. Cooper (I'm paraphrasing some pictures and text appearing in "The Inmates are Running the Asylum") |
| The value of a prototype is in the education
it gives you, not in the code itself.
- A. Cooper (in "The Inmates are Running the Asylum") |
| When the words are fuzzy, the programmers
reflexively retreat to the most precise method of articulation available:
source code. Although there is nothing more precise than code, there is
also nothing more permanent or resistant to change. So the situation frequently
crops up where nomenclature confusion drives programmers to begin coding
prematurely, and that code becomes the de facto design, regardless of its
appropriateness or correctness.
- A. Cooper (in "The Inmates are Running the Asylum") |
| Doing more things faster is no substitute
for doing the right things.
- S. R. Covey |
| The generation of random numbers is too important
to be left to chance.
- R. Coveyou |
| If you don't think carefully, you might believe
that programming is just typing statements in a programming language.
- W. Cunningham |
| Who dares to teach must never cease to learn.
- J.C. Dana |
| Every now and then go away, have a little
relaxation, for when you come back to your work your judgment will be surer.
Go some distance away because then the work appears smaller and more of
it can be taken in at a glance and a lack of harmony and proportion is more
readily seen.
- L. Da Vinci |
| Simplicity is the ultimate sophistication.
- L. Da Vinci |
| If you cannot describe what you are doing
as a process, you don't know what you're doing.
- W. E. Deming |
| Question authority; but, raise your hand first.
- A. Dershowitz |
| One can think effectively only when one is
willing to endure suspense and to undergo the trouble of searching.
- J. Dewey |
| As long as there were no machines, programming
was no problem at all; when we had a few weak computers, programming became
a mild problem, and now [1972] that we have gigantic computers, programming
has become a gigantic problem. As the power of available machines grew by
a factor of more than a thousand, society's ambition to apply these new
machines grew in proportion, and it was the poor programmer who found his
job in this exploded field of tension between the ends and the means. The
increased power of the hardware, together with the perhaps more dramatic
increase in its reliability, made solutions feasible that the programmer
had not dared to dream about a few years before. And now, a few years later,
he had to dream about them and even worse, he had to transform such
dreams into reality! It is no wonder that we found ourselves in a software
crisis
- E. Dijkstra (The Humble Programmer, "ACM Turing Award Lectures: The First 25 Years", Addison-Wesley, 1987, pages 17-32) |
| A most important, but also most elusive, aspect
of any tool is its influence on the habits of those who train themselves
in its use. If the tool is a programming language this influence is, whether
we like it or not, an influence on our thinking habits.... A programming
language is a tool that has profound influence on our thinking habits.
- E. Dijkstra |
| Being abstract is something profoundly different
from being vague... The purpose of abstraction is not to be vague, but to
create a new semantic level in which one can be absolutely precise.
- E. Dijkstra |
| Besides a mathematical inclination, an exceptionally
good mastery of one's native tongue is the most vital asset of a competent
programmer.
- E. Dijkstra |
| Computer Science is no more about computers
than astronomy is about telescopes.
- E. Dijkstra |
| If we wish to count lines of code, we should
not regard them as lines produced but as lines spent.
- E. Dijkstra |
| John von Neumann draws attention to what seemed
to him a contrast. He remarked that for simple mechanisms, it is often easier
to describe how they work than what they do, while for more complicated
mechanisms, it is usually the other way around.
- E. Dijkstra (Trip Reports, 213) |
| Object-oriented programming is an exceptionally
bad idea which could only have originated in California
- E. Dijkstra (note: OOP originated in Norway, quite near Holland -Dijkstra's home) |
| ...our intellectual powers are rather geared
to master static relations and that our powers to visualize processes evolving
in time are relatively poorly developed. For that reason we should do (as
wise programmers aware of our limitations) our utmost to shorten the conceptual
gap between the static program and the dynamic process, to make the correspondence
between the program (spread out in text space) and the process (spread out
in time) as trivial as possible.
- E. Dijkstra (in "Goto Considered Harmful") |
| Progress is possible only if we train ourselves
to think about programs without thinking of them as pieces of executable
code.
- E. Dijkstra |
| Simplicity is prerequisite for reliability.
- E. Dijkstra |
| ...Simplifications have had a much greater
long-range scientific impact than individual feats of ingenuity. The opportunity
for simplification is very encouraging, because in all examples that come
to mind the simple and elegant systems tend to be easier and faster to design
and get right, more efficient in execution, and much more reliable than
the more contrived contraptions that have to be debugged into some degree
of acceptability....Simplicity and elegance are unpopular because they require
hard work and discipline to achieve and education to be appreciated.
- E. Dijkstra (The Tide, not the waves; in Denning/Metcalfe: Beyond Calculation, Springer-Verlag 1997) |
| The tools we use have a profound (and devious!)
influence on our thinking habits, and, therefore, on our thinking abilities.
- E. Dijkstra |
| Testing can show the presence of errors, but
not their absence.
- E. Dijkstra |
| The competent programmer is fully aware of
the strictly limited size of his own skull; therefore he approaches the
programming task in full humility, and among other things he avoids clever
tricks like the plague.
- E. Dijkstra (in "The Humble Programmer", his 1972 Turing Award Lecture) |
| The art of programming is the arto of organizaing
complexity, of mastering multitude and avoiding its bastard chaos.
- E. Dijkstra (in "Notes on Structured Programmin") |
| We are all shaped by the tools we use, in
particular: the formalisms we use shape our thinking habits, for better
or for worse, and that means that we have to be very careful in the choice
of what we learn and teach, for unlearning is not really possible.
- E. Dijkstra (in Answers to Questions from Students of Sofware Engineering) |
| Yes, I share your concern: how to program
well -though a teachable topic- is hardly taught. The situation is similar
to that in mathematics, where the explicit curriculum is confined to mathematical
results; how to do mathematics is something the student must absorb by osmosis,
so to speak. One reason for preferring symbol-manipulating, calculating
arguments is that their design is much better teachable than the design
of verbal/pictorial arguments. Large-scale introduction of courses on such
calculational methodology, however, would encounter unsurmoutable political
problems.
- E. Dijkstra (in Answers to Questions from Students of Sofware Engineering) |
| Text is linear; it is black and white; it
doesn't zoom around the page in 3-D; it isn't intelligent by itself; in
fact, in terms of immediate reaction it is quite boring. I can't imagine
a single preliterate was ever wowed at the first sight of text, and yet
text has been the basis of arguably the most fundamental intellectual transformation
of the human species. It and its subforms, such as algebra, have made science
education for all a plausible goal.
- A.diSessa ("Changing Minds: Computers, Learning, and Literacy", MIT Press, 2000; page 112) |
| There is nothing so useless as doing efficiently
that which should not be done at all.
- P. Drucker |
| The first step in fixing a broken program
is getting it to fail repeatably [on the simplest example possible].
- T. Duff |
| It's supposed to be hard! If it wasn't hard,
everyone would do it. The hard... is what makes it great!"
- J. Dugan (said by Tom Hanks' character in "A League of Their Own" in response to a complaint from one of his ball players) |
| Genius is 1 percent inspiration and 99 percent
perspiration. As a result, genius is often a talented person who has simply
done all of his homework.
- T. Edison |
| Any intelligent fool can make things bigger,
more complex, and more violent. It takes a touch of genius - and a lot of
courage - to move in the opposite direction.
- A. Einstein |
| Everything should be made as simple as possible,
but not simpler.
- A. Einstein |
| Example isn't another way to teach. It is
the only way to teach.
- A. Einstein |
| If you can't explain it simply, you don't
understand it well enough.
- A. Einstein |
| Imagination is more important than knowledge.
- A. Einstein |
| Out of clutter, find simplicity. From discord,
find harmony. In the middle of difficulty, lies opportunity.
- A. Einstein |
| Reinventing the wheel is a process.
- R. Elisha |
| To arrive at the simple is difficult.
- R. Elisha |
| Shall I tell you the secret of the true scholar?
It is this: every man I meet is my master in some point, and in that I learn
of him.
- R.W. Emerson |
| The proof of a high education is the ability
to speak about complex matters as simply as possible.
- R.W. Emerson |
| The structure of a system reflects the structure
of the organization that built it.
- R. Fairley |
| In those days [batch processing] programmers
never even documented their programs, because it was assumed that nobody
else would ever use them. Now, however, time-sharing had made exchanging
software trivial: you just stored one copy in the public repository and
therby effectively gave it to the world. Immediately people began to document
their programs and to think of them as being usable by others. They started
to build on each other's work.
- R. Fano (in Waldrop, "The Dream Machine", pp. 232) |
| Thus, writing a clever piece of code that
works is one thing; designing something that can support a long-lasting
business is quite another. Commercial software design and production is,
or should be, a rigorous, capital-intensive activity. Software products
should be based on a broad, deep structure that can support much more than
whatever the product contains at any given time. In addition to code that
works, you need documentation, help functions, error handling, multi-platform
support, and multiple languages. You also need an underlying architecture
that allows you to add and change features, purchase and integrated external
software components, and allows other software vendors to make their products
talk to yours, add customized widgets to it, embed your product inside something
larger of their own. A good architecture, one that will carry you for a
decade's worth of unpredictable technology and marked changes, take months
to develop. But if you skip this step, as Netscape did, you have made a
truly Faustian bargain.
The problem with this [building just what you need, instead of planning ahead] is that these systems start getting ferociously complicated. It comes time to fix a mistake, add a feature, replace something and you discover that everything is connected to everything else in ways you can't even begin to understand. Because you're doing something more ambitious than the initial academic prototype, it's big enough that you need to partition it across a team. The members of the team need to have a clear idea of how their work relates to everyone else's, and they need to be able to communicate to the testers whose job it is to find errors. Otherwise [in other words], you give the patient a kidney transplant and his heart suddenly fails; then you give him a heart drug, but that makes his lungs collapse. You don't know why, and you're screwed. And then the future comes, and you're really screwed. Later releases of the product inevitably are more complex, because they must continue to support previous version while adding new capabilities. You discover that the original developers have quit or been promoted or have forgotten what they did, and it's time to keep up with the competition by adding new features, supporting more platforms, translating into Japanese, and so forth. The engineering team has to quadruple in size. You start discovering things |