I like hoarding pearls of wisdom that I come across while reading books, blog posts, HN and papers. Below is a growing collection of such tidbits. If you find any quote lacking or having a misplaced attribution please let me know.
-
Pick the right ones, and programming will flow naturally from design; modules will have small and simple interfaces; and new functionality will more likely fit in without extensive reorganization. Pick the wrong ones, and programming will be a series of nasty surprises: interfaces will become baroque and clumsy as they are forced to accommodate unanticipated interactions, and even the simplest of changes will be hard to make.
- -
Programming can give us both intellectual and emotional satisfaction, because it is a real achievement to master complexity and to establish a system of consistent rules.
- -
Focused, hard work is the real key to success. Keep your eyes on the goal, and just keep taking the next step towards completing it. If you aren’t sure which way to do something, do it both ways and see which works better.
- -
Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won’t usually need your code; it’ll be obvious.
- -
A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.
- -
The best teacher I had in graduate school spent the whole semester destroying any beliefs we had about computing. He was a real iconoclast. He happened to be a genius, so we took it. At the end of the course, we were free because we didn’t believe in anything. We had to learn everything, but then he destroyed it. He wanted us to understand what had been done, but he didn’t want us to believe in it.
- -
The real hero of programming is the one who writes negative code.
- -
It is my purpose to transmit the importance of good taste and style in programming, [but] the specific elements of style presented serve only to illustrate what benefits can be derived from “style” in general. In this respect I feel akin to the teacher of composition at a conservatory: He does not teach his pupils how to compose a particular symphony, he must help his pupils to find their own style and must explain to them what is implied by this.
- -
It is not a language’s weakness but its strengths that control the gradient of its change: Alas, a language never escapes its embryonic sac.
- -
At its best, starting a startup is merely an ulterior motive for curiosity. And you’ll do it best if you introduce the ulterior motive toward the end of the process. So here is the ultimate advice for young would-be startup founders, boiled down to two words: just learn
- -
During those entire 50 years, people have been saying “Lisp is impractical”; “Lisp is too slow”; “procedure calling is too expensive”; “only professors care about Lisp.” They’re still saying it. But meanwhile, users — real users — who would never dare give their bosses a program written in Lisp are demanding Lisp’s ideas in the programming languages they do use. Today you take recursion for granted, but it was a radical idea when Lisp introduced it. (Fortran didn’t have recursive procedures until fairly late in its history; the early personal computer users made do with BASIC, which, in those early versions, had no procedure calling at all.) Users of strongly typed languages demanded, and got, Lisp’s heterogeneous lists. Today, the radical Lisp idea that’s invading the mainstream is first class procedures. Guido van Rossum, the inventor of Python, hates Lisp, but he was dragged kicking and screaming by users into providing [a half-assed version of] lambda in Python. Even C++, a notorious can of worms, has added lambda in its most recent version. Lambda in Java is coming in 2013. In another decade they’ll probably discover first class continuations.
- -
You can reach a point with Lisp where, between the conceptual simplicity, the large libraries, and the customization of macros, you are able to write only code that matters. And, once there, you are able to achieve a very high degree of focus, such as you would when playing Go, or playing a musical instrument, or meditating. And then, as with those activities, there can be a feeling of elation that accompanies that mental state of focus.
- -
The best way to prepare as a programmer is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and I fished out listings of their operating system. You’ve got to be willing to read other people’s code, then write your own, then have other people review your code. You’ve got to want to be in this incredible feedback loop where you get the world-class people to tell you what you’re doing wrong.
- -
From an educational point of view, our experience suggests that undergraduate computer science courses should emphasize basic notions of modularity, specification, and data abstraction, and should not let these be displaced by more advanced topics, such as design patterns, object-oriented methods, concurrency, functional languages, and so on.
- -
Programming is the act of turning an inexact description of something (the specification) into an exact description of the thing (the program).
- -
And you’re right: we were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp. Aren’t you happy?
- -
We should have some ways of connecting programs like garden hose–screw in another segment when it becomes necessary to massage data in another way. This is the way of IO also.
-