Incomplete Programming History w/ Related Quotations

Well, I wrote this today (when I should’ve been writing a real paper)… Why not put it here! It has some great quotes from programming language developers, and my descriptions of languages in my own words. I mainly did it for the programming class I am teaching (and because I like reviewing programmer quotes). I don’t claim this to be exhaustive, but it should be accurate although I am sure some of my opinions of various language couldn’t help but come through…

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.” — C. A. R. Hoare

FORTRAN, John Backus and IBM team (1957)

FORTRAN is the oldest language still in use today. It was designed for high performance computing for scientific applications (number crunching). A combination FORTRAN and C underlies some of the libraries used in “more modern” languages such as Python when Numpy is used for numeric processing. It can even be used to interface with MATLAB (but C is more popular for that, since it is easier to find a programmer). Lots of weather simulations and other simulations are written in FORTRAN, especially those that run on supercomputers. It is still being updated and extended, and concurrent processing features were added to the language in 2008.

For twenty years programming languages have been steadily progressing toward their present condition of obesity; as a result, the study and invention of programming languages has lost much of its excitement. Instead, it is now the province of those who prefer to work with thick compendia of details rather than wrestle with new ideas. Discussions about programming languages often resemble medieval debates about the number of angels that can dance on the head of a pin instead of exciting contests between fundamentally differing concepts.

— John Backus, "Can Programming Be Liberated From the von Neumann Style?

 

“Much of my work has come from being lazy. I didn’t like writing programs, and so, when I was working on the IBM 701 (an early computer), writing programs for computing missile trajectories, I started work on a programming system to make it easier to write programs.”

— Backus Quoted in the IBM employee magazine Think in 1979.

Lisp, John McCarthy (1958)

Lisp is second only to FORTRAN in age when it comes to programming languages that are still in use today. Lisp is more general purpose. It was definitely not built for speed or optimized for numerical computing, but it is still awesome. I have a collection of various Lisp books on my shelf and still find it the most natural way to reason about concepts when speed is a non-issue. Lisp pioneered a number of features that are very popular in programming languages today, such as dynamic typing and and automatic memory management. Early implementations were somewhat plagued by slow garbage collector performance before new ways of dealing with memory management than mark and sweep became available. In Lisp, code is just another type of data. This makes it especially easy for the code to modify itself and made it the language of choice for artificial intelligence before Prolog came along to share the bulk of the load work in that area. Everything in Lisp is a list, and you deal with all code structures as such. This led to very uniform code. If you like lisp, you must like parentheses, because (everything (and i mean (everything)) is surrounded by them). Some people love it, and some hate it. It is immediately obvious upon any inspection of Lisp code. Like all active languages, Lisp has evolved. Currently Scheme and Common Lisp are two main variants that are in use, along with elisp or Emacs Lisp which is used to extend the popular editor Emacs. All of Emacs is written in elisp except for the core interpreter and some other core functionality which is written in C.

Lisp has jokingly been called “the most intelligent way to misuse a computer”. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.

— Edsger W. Dijkstra, The Humble Programmer

 

Programs must be written for people to read, and only incidentally for machines to execute.
— Abelson & Sussman, “Structure and Interpretation of Computer Programs”,

 

Program designers have a tendency to think of the users as idiots who need to be controlled. They should rather think of their program as a servant, whose master, the user, should be able to control it. If designers and programmers think about he apparent mental qualities that their programs will have, they’ll create programs that are easier and pleasanter — more humane — to deal with.
— John McCarthy “The Little Thoughts of Thinking Machines”, Psychology Today, December 1983

 

SQL, Lisp, and Haskell are the only programming languages that I’ve seen where one spends more time thinking than typing.
— Philip Greenspun, blog, 07–03–2005

 

Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp > itself a lot.
— Eric S. Raymond, How to Become a Hacker

 

The most powerful programming language is Lisp. If you don’t know Lisp (or its variant, Scheme), you don’t appreciate what a powerful language is. Once you learn Lisp you will see what is missing in most other languages.
— Richard Stallman

 

By policy, LISP has never really catered to mere mortals. And, of course, mere mortals have never really forgiven LISP for not catering to them.
— Larry Wall, “Programming is Hard, Let’s Go Scripting…”

 

Java was, as Gosling says in the first Java white paper, designed for average programmers. It’s a perfectly legitimate goal to design a language for average programmers. (Or for that matter for small children, like Logo.) But it is also a legitimate, and very different, goal to design a language for good programmers.
— Paul Graham

Alan Perlis, member of ALGOL design team (1958)

ALGOL first appeared in 1958. It went through three major specifications, none of which is currently used. However, it heavily influenced many modern languages including Simula, Ada, Pascal, and C (and thus all C descendants – C++, Java, C#, etc) . John Backus (FORTRAN) and Peter Naur (BNF – Backus Naur Form), John McCarthy (LISP), Niklaus Wirth (Pascal), and Alan Perlis were all members of the ALGOL design team. The language we use to express algorithms in pseudocode strongly resembles ALGOL, but in expressing pseudocode we don’t force ourselves to stick to a languages dictates as long as a reader can thoroughly understand the point.

This language [LISP] induces humorous arguments among programmers, often being damned and praised for the same feature.
— Alan Perlis

 

8: A programming language is low level when its programs require attention to the irrelevant.
19: A language that doesn’t affect the way you think about programming, is not worth knowing.
41: Some programming languages manage to absorb change, but withstand progress.
117: It goes against the grain of modern education to teach students to program. What fun is there to making plans, acquiring discipline in organizing thoughts, devoting attention to detail and, learning to be self-critical?
— Alan Perlis, Epigrams on Programming (1982)
http://www-pu.informatik.uni-tuebingen.de/users/klaeren/epigrams.html

 

When someone says “I want a programming language in which I need only say what I wish done,” give him a lollipop.
— Alan Perlis ACM-SIGPLAN ’82, Epigrams in Programming

COBOL, Grace Hopper (1959)

COBOL – Common Business-Oriented Language, aka Capitalization of Boilerplate Oriented Lanaguage. Very valuable to know if you plan on working on mainframes, but I don’t know of anywhere else it is used.

The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.
— Edsger W. Dijkstra, “How do we tell truths that might hurt?”

Pascal, Niklaus Wirth (1970)

Pascal came about in 1970 as a small, clean language designed to promote good structuring of programs. It had minimal impact in the wild but was widely used to teach programming to new students because of its previously mentioned properties. It’s most notable influence was ALGOL, although it also brought in some good ideas from COBOL. Niklaus Wirth also developed several other languages which had less overall impact: Euler, ALGOL W, Modula–2, and Oberon.

Wirth’s Law:
Software gets slower faster than hardware gets faster.

 

As a matter of fact, the adaptability of a program to changes in its objectives (often called maintainability) and to changes in its environment (nowadays called portability) can be measured primarily in terms of the degree to which it is neatly structured.
— Niklaus Wirth, “Program Development by Stepwise Refinement”, April 1971

 

In the practical world of computing, it is rather uncommon that a program, once it performs correctly and satisfactorily, remains unchanged forever.
— Niklaus Wirth, “Program Development by Stepwise Refinement”, April 1971

 

“In our profession, precision and perfection are not a dispensable luxury, but a simple necessity.”
— Niklaus Wirth, “A Few Words with Niklaus Wirth”. Dr Carlo Pescio (June 1997)

 

Pascal is for building pyramids — imposing, breathtaking structures
built by armies pushing heavy blocks into place.
Lisp is for building organisms …
— Alan Perlis

C, Dennis Ritchie (1972)

C is the language whose influence can most easily been seen upon it’s successors. From a high level overview, unless you are reading class declarations that it does not have, C looks much like C++, Java, C# and other languages. They directly derived much of their syntax from it. C++ directly from C, and Java and C# via not falling far from C++. C does not support object oriented programming, but it is still one of the most popular languages around today, taking over the first spot from Java after it lost some of its adherents to scripting languages. C can sometimes be matched in speed by other languages, but you won’t see it surpassed. It suffers more portability problems however than C++, and way more than Java which was originally developed with portability in mind. C has always been closely intertwined with Unix. Both were developed in AT&T Bell Labs around the same time, and the first Unix was entirely ported from assembly language to C to make it easily portable to a number of different hardware types. C is not especially portable, but it is far more portable than assembly (which is generally just not portable), so it made it easy to get Unix onto a lot of the computers at the time. C itself is a very simple language at heart, which makes this especially easy. For example, C89 has only 32 keywords. Some of which may seem familiar (return, if, for, while, and int for Integer). Learning the simple language of C is seldom seen as good preparation for other C based languages however, since memory management is manual and somewhat tedious. Beginning programmers tend to take more easily to languages that manage memory for them such as Java and the JVM, VB or C# with the CLR, or scripting languages. However, C is excellent at putting you close to the machine and getting a feel for what is going on at a lower level than most other languages in use today and is definitely well worth studying. Quotes by Brian Kernighan are also in this section, as he co-authored the first book on C, which is still quite popular and widely recognized. “The C Programming Language”, also called “K&R C” for Kernighan and Ritchie.

[C has] the power of assembly language and the convenience of … assembly language.
— Dennis Ritchie quoted in Cade Metz, “Dennis Ritchie: The Shoulders Steve Jobs Stood On”,

 

C is quirky, flawed, and an enormous success.
— Dennis Ritchie, The Development of the C Language.

 

Controlling complexity is the essence of computer programming.
— Brian Kernighan, Software Tools (1976)

 

Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?
— Brian Kernighan, "The Elements of Programming Style

 

Advice to students: Leap in and try things. If you succeed, you can have enormous influence. If you fail, you have still learned something, and your next attempt is sure to be better for it. Advice to graduates: Do something you really enjoy doing. If it isn’t fun to get up in the morning and do your job or your school program, you’re in the wrong field.
— “Leap In and Try Things: Interview with Brian Kernighan”

 

First make it run, then make it run fast.
— Brian Kernighan

Smalltalk, Alan Kay and others (1972)

<p The first object oriented language. While Smalltalk still has active users, it is most notable in its pioneering object oriented principles and influence the design of most languages we see today, as the majority of modern language support an object oriented paradigm.

Actually I made up the term “object-oriented”, and I can tell you I did not have C++ in mind.
— Alan Kay, Keynote OOPSLA 1997

 

Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.
— ACM Queue A Conversation with Alan Kay Vol. 2, No. 9 – Dec/Jan 2004–2005

 

Perl is another example of filling a tiny, short-term need, and then being a real problem in the longer term. Basically, a lot of the problems that computing has had in the last 25 years comes from systems where the designers were trying to fix some short-term thing and didn’t think about whether the idea would scale if it were adopted. There should be a half-life on software so old software just melts away over 10 or 15 years.
— ACM Queue A Conversation with Alan Kay Vol. 2, No. 9 – Dec/Jan 2004–2005

 

The flip side of the coin was that even good programmers and language designers tended to do terrible extensions when they were in the heat of programming, because design is something that is best done slowly and carefully.
— ACM Queue A Conversation with Alan Kay Vol. 2, No. 9 – Dec/Jan 2004–2005

Ada, programming for the DoD (1980)

Ada appeared in 1980, but the ’95 version is the only one I’ve seen. There is a 2012 update however. It is based upon Pascal. Although named after a wonderful lady in the history of programming, it primarily only caught on with the Department of Defense, which you could argue only used it because they paid for it if your cynical. It does have strong properties for minimize programmer error and insuring safe execution of code. It is sometimes taught in Universities, due to it making it difficult for the new programmer to run into problems by limiting their choices and being based upon Pascal, which itself has been recognized as a good teaching language.

C treats you like a consenting adult. Pascal treats you like a naughty child. Ada treats you like a criminal.
— Bruce Powel Douglass

 

Beyond 100,000 lines of code you should probably be coding in Ada.
— P. J. Plauger

 

If you’re masochistic enough to program in Ada, we’re not going to stop you.
— Matt Welsh

 

It’s hard to find people saying nice things about Ada.
— Lewis Cawthorne

C++, Bjarne Stroustrup (1983)

C++ was originally named C with classes, but some would claim after enough extra stuff got bolted into it that it needed a new name. It is often used in the wild where performance is important, but the code is large enough to benefit from object oriented design methodology (hence the “classes”, which C lacks). It is an important language in its own right, especially for game development but also for more general tasks. It heavily influences the design of many subsequent languages, especially C# and Java. It did not really influence Objective-C however. The designer of that language chose to go back to C and implement object oriented programming in a more Smalltalk inspired fashion.

C makes it easy to shoot yourself in the foot. C++ makes it harder, but when you do, you blow away your whole leg!
— Bjarne Stroustrup

 

Design and programming are human activities; forget that and all is lost.
— Bjarne Stroustrup. The C++ Programming Language.

 

A program that has not been tested does not work.
— Bjarne Stroustrup. The C++ Programming Language.

 

“How to test?” is a question that cannot be answered in general. “When to test?” however, does have a general answer: as early and as often as possible.
— Bjarne Stroustrup. The C++ Programming Language.

 

Anybody who comes to you and says he has a perfect language is either naïve or a salesman.
— Bjarne Stroustrup in C++ 0x – An Overview at University of Waterloo Computer Science Club

 

There are only two kinds of languages: the ones people complain about and the ones nobody uses.
— Bjarne Stroustrup

 

People who think they know everything really annoy those of us who know we don’t.
— Bjarne Stroustrup

 

There are more useful systems developed in languages deemed awful than in languages praised for being beautiful–many more.
— Jason Pontin (November 28, 2006). The Problem with Programming (Interview with Bjarne Stroustrup)

 

“Legacy code” often differs from its suggested alternative by actually working and scaling.
— Bjarne Stroustrup’s FAQ: What is “legacy code”?.

Perl, Larry Wall (1987)

Perl is a general purpose scripting language that is especially well suited for working with text. It also has a very lightweight interpreter that is fast to load. This made it especially well suited to web development in the early days of the Internet. It is suitably fast to initialize that one can do without a large framework and a memory resident interpreter (as seen in ruby and python) but still have solid performance under reasonable loads. Wikipedia notes that it was referred to as the “duct tape that holds the Internet together” due to its widespread use for web applications and perceived inelegance. Perl has been referred to (at least by me) as executable line noise. It isn’t necessarily pretty, if you don’t plan well you won’t be able to read your code later, and you might not be able to understand someone else’s code that is doing something you know now to do, because they are doing it one of the 9 other ways that it can be accomplished. But you sure can knock out some quick scripts with beautiful regular expression matching with no imports. Perl 5 is currently the standard. It supports object oriented programming, but at least to me, the object oriented features seemed kind of hacked on to the old procedural methods of Perl 4. But I was an actively Perl programmer when the change went out, so it might just been that I am destined to feel that way. Perl 6 was announced in the year 2000. Perl 6 is still not out. Some consider it vaporware. There are some active implementations of the reference spec. Larry Wall is heading it up, and I believe he is being a bit of an artist in not deciding it is done until it it as near perfect as it can be.

Though the Perl Slogan is “There’s More Than One Way to Do It” (TIMTOWDI), I hesitate to make 10 ways to do something.
— Larry Wall, 1990 Usenet article

 

Note, the Perl Motto is currently:
There’s more than one way to do it, but sometimes consistency is not a bad thing either (TIMTOWTDIBSCINABTE, pronounced “Tim Toady Bicarbonate”).

 

(It’s sorta like sed, but not. It’s sorta like awk, but not. etc.)
Guilty as charged. Perl is happily ugly, and happily derivative.
— Larry Wall, 1992 Usenet article

 

We all agree on the necessity of compromise. We just can’t agree on when it’s necessary to compromise.
— Larry Wall, 1991 Usenet article

 

The computer should be doing the hard work. That’s what it’s paid to do, after all.
— Larry Wall, 1997 Usenet article

 

A Perl script is “correct” if it gets the job done before your boss fires you.
— Larry Wall

 

The camel has evolved to be relatively self-sufficient. (On the other hand, the camel has not evolved to smell good. Neither has Perl.)
— Larry Wall

 

Easy things should be easy, and hard things should be possible.
— Amazon.com Interview: Larry Wall

 

I have a pretty major problem with a language where one of the most common variables has the name $_
— Brian Hook

 

There’s no obfuscated Perl contest because it’s pointless.
— Jeff Polk

 

Perl is designed to give you several ways to do anything, so consider picking the most readable one.
— Larry Wall

 

Suppose you went back to Ada Lovelace and asked her the difference between a script and a program. She’d probably look at you funny, then say something like: Well, a script is what you give the actors, but a program is what you give the audience. That Ada was one sharp lady…
— Larry Wall, The State of the Onion 11

 

Now, I’m not the only language designer with irrationalities. You can think of some languages to go with some of these things.
“We’ve got to start over from scratch” – Well, that’s almost any academic language you find.
“English phrases” – Well, that’s Cobol. You know, cargo cult English. (laughter)
“Text processing doesn’t matter much” – Fortran.
“Simple languages produce simple solutions” – C.
“If I wanted it fast, I’d write it in C” – That’s almost a direct quote from the original awk page.
“I thought of a way to do it so it must be right” – That’s obviously PHP. (laughter and applause)
“You can build anything with NAND gates” – Any language designed by an electrical engineer. (laughter)
“This is a very high level language, who cares about bits?” – The entire scope of fourth generation languages fell into this… problem.
“Users care about elegance” – A lot of languages from Europe tend to fall into this. You know, Eiffel.
“The specification is good enough” – Ada.
“Abstraction equals usability” – Scheme. Things like that.
“The common kernel should be as small as possible” – Forth.
“Let’s make this easy for the computer” – Lisp. (laughter)
“Most programs are designed top-down” – Pascal. (laughter)
“Everything is a vector” – APL.
“Everything is an object” – Smalltalk and its children. (whisperedsmile Ruby. (laughter)
“Everything is a hypothesis” – Prolog. (laughter)
“Everything is a function” – Haskell. (laughter)
“Programmers should never have been given free will” – Obviously, Python. (laughter)
— Larry Wall commenting on many modern programming languages

 

In general, they do what you want, unless you want consistency.
— In the perl man page

 

Perl is designed to give you several ways to do anything, so consider picking the most readable one.
— In the perl man page

Linux, Linus Torvalds and the World

I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones.
— Torvalds, Linus (1991–08–25) [This was the start of Linux]

 

If you need more than 3 levels of indentation, you’re screwed anyway, and should fix your program.
— Linux 1.3.53 CodingStyle documentation

 

You know you’re brilliant, but maybe you’d like to understand what you did 2 weeks from now.
— Linux 1.3.53 CodingStyle documentation

 

Nobody should start to undertake a large project. You start with a small trivial project, and you should never expect it to get large. If you do, you’ll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision. So start small, and think about the details. Don’t think about some big picture and fancy design. If it doesn’t solve some fairly immediate need, it’s almost certainly over-designed. And don’t expect people to jump in and help you. That’s not how these things work. You need to get something half-way useful first, and then others will say “hey, that almost works for me”, and they’ll get involved in the project.
— Linux Torvalds, Linux Times (2004–10–25).

 

C++ is a horrible language. It’s made more horrible by the fact that a lot of substandard programmers use it, to the point where it’s much much easier to generate total and utter crap with it.
— Torvalds, Linus (2007–09–06)

Python, Guido van Rossum (1991)

Python is a general purpose language which emphasizes readability. Some people, myself included, tend to think of it and refer to it as “executable psudocode”. Where Perl emphasizes freedom of expression akin to natural language, Python believe that there is one obvious way to perform a task and that is the way it should be done. The style guidelines are clearly available on the website and often linked to. Some people find this overly limiting, but I feel that it is somewhat akin to working within the constraints of a haiku perhaps. You have a way things need to be to adhere to the recognized form, but within that area all possibilities are available. It’s clear syntax and clear ways of doing things make it an excellent language for newcomers to programming, but it’s full “batteries included” approach to libraries makes it very suitable for real work. Python has a rather popular web framework called Django, and it is recognized by some as the very model of proper documentation for an open source project. The reference implementation of Python is written in C, and Python interfaces well with the C programming language. Some programmers enjoy prototyping in Python and then rewriting sections in C only where speed optimizations are required.

Python is an experiment in how much freedom programmers need. Too much freedom and nobody can read another’s code; too little and expressiveness is endangered.
— Guido van Rossum, 13 Aug 1996

 

Python’s syntax succeeds in combining the mistakes of Lisp and Fortran. I do not construe that as progress.
— Larry Wall (author of Perl), May 12 2004

 

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one — and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than right now. If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!
— Tim Peters, The Zen of Python (“import this”)

Java, James Gosling with team at Sun Microsystems, 1995

One of the most popular programming languages, Java is especially useful for web applications. It gets much of its syntax from C and C++ and has full support for an object oriented paradigm, but some of the lower level features were removed in the interest of safety and portability and what is now a very advanced automatic memory management and garbage collection system is built into the execution environment.

Java is, in many ways, C++–.
— Michael Feldman

 

Java is C++ without the guns, knives, and clubs.
— James Gosling, co-inventor of Java

Ruby, Yukihiro Matsumoto (aka matz) (1995)

Another popular scripting language especially notable due to its association with the Rails framework that makes for rapid deployment of web application and easy support of a database backend. It’s main interpreter is written in C. While oftentimes ruby programs can be 50 to 100 times slower than a handcoded C equivalent, they can be written and deployed much faster. And after all, what’s the difference between 0.001 and 0.01 second when your running a script anyway? If it’s important, then another choice is better, but especially for web applications where time to respond is dominated by network latency, ruby makes an excellent language to write programs fast and save developer time. It’s community is quite vibrant and they loyally espouse may good programming guidelines that are not enforced by the language.

Ruby design tries to embody the principle of least surprise.

The Wikipedia paragraph of Ruby follows:
Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflective. It also has a dynamic type system and automatic memory management; it is therefore similar in varying respects to Smalltalk, Python, Perl, Lisp, Dylan, Pike, and CLU.

Some may say Ruby is a bad rip-off of Lisp or Smalltalk, and I admit that. > But it is nicer to ordinary people.
— Matz, LL2

 

Actually, I’m trying to make Ruby natural, not simple.
— matz

 

|Maybe you are being too harsh on yourself?
|
| “least surprise” != “no surprise” smile
You made me feel easy. Thank you.
I’ll still keep trying to make Ruby better anyway.
–matz. (ruby-talk, 16/10/2000)

Edsger W Dijkstra, 1930–2002

Dijkstra is a well known name in the history of computer science, although not a language designer himself. He participated in building the first ALGOL compiler and pioneered much of the study of formal verification and testing of programs in the ’70s. He also developed many early algorithms that we still used today, including Djikstra’s shortest path algorithm which is implemented in a number of Internet routing protocols.

For a number of years I have been familiar with the observation that the quality of programmers is a decreasing function of the density of go to statements in the programs they produce. More recently I discovered why the use of the go to statement has such disastrous effects, and I became convinced that the go to statement should be abolished from all “higher level” programming languages.
— Edsger W Dijkstra (1960s)

 

Program testing can be used to show the presence of bugs, but never to show their absence!
— Dijkstra (1970)

 

When we take the position that it is not only the programmer’s responsibility to produce a correct program but also to demonstrate its correctness in a convincing manner, then the above remarks have a profound influence on the programmer’s activity: the object he has to produce must be usefully structured.
— Dijkstra (1970)

 

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.
— Dijkstra (1972), The Humble Programmer

 

How do we convince people that in programming simplicity and clarity —in short: what mathematicians call “elegance”— are not a dispensable luxury, but a crucial matter that decides between success and failure?
— Dijkstra (1980s)

 

Simplicity is a great virtue but it requires hard work to achieve it and education to appreciate it. And to make matters worse: complexity sells better.
— Dijkstra (1984)

Donald Knuth, Professor Emeritus at Standford University

Donald Knuth design the typesetting language TeX, which was later extended with macro capabilities as LaTeX and is widely used for scientific (including computer science) typesetting. He actually set out to write a book on algorithms and was so upset with the state of computer typesetting at the time that he took a 10 year detour to develop what is arguably the best means of typesetting documents that contain some number of equations and could easily need a format change (say to meet the guidelines of a different journal that originally planned). He also has some excellent advice for programming, and he did go on to literally write the book on algorithms, The Art of Computer Programming [TAOCP] (well, it is currently four volume set; although he hopes to see 10 volumes before he expires).

We should forget about small efficiencies, say about 97\% of the time:
premature optimization is the root of all evil.
— Donald Knuth.

 

Beware of bugs in the above code; I have only proved it correct, not tried it.
— Donald Knuth’s webpage states the line was used to end a memo entitled Notes on the van Emde Boas construction of priority deques: An instructive use of recursion (1977)

 

Computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.
— Donald Knuth, Computer Programming as an Art (1974)

ESR A couple of ESR quotes that I wasn’t sure where else to put.

Good programmers know what to write. Great ones know what to rewrite (and reuse)
— ESR, The Cathedral and the Bazaar

 

Given enough eyeballs, all bugs are shallow.
— ESR, The Cathedral and the Bazaar
http://www.catb.org/esr/writings/homesteading/cathedral-bazaar/
Note: The Cathedral and the Bazaar is a good, freely available book that compares open-source to Microsoft style development; if you are interested in such comparisons
Also note: ESR has some good views on software, but his politics can be a little out there.

 

Ugly programs are like ugly suspension bridges: they’re much more liable
to collapse than pretty ones, because the way humans (especially
engineer-humans) perceive beauty is intimately related to our ability to
process and understand complexity.
— ESR, Why Python?

 

Being able to break security doesn’t make you a hacker anymore than
being able to hotwire cars makes you an automotive engineer
— ESR, “How to become a Hacker”

Tagged with: ,
Posted in Uncategorized