Lisez Euler, lisez Euler, c’est notre maître à tous.
(Read Euler, read Euler. He is the master of us all.)
As often happens in the history of science, the simple ideas are the hardest to achieve; simplicity does not come of itself but must be created.
TCP implementations will follow a general principle of robustness: be conservative in what you do, be liberal in what you accept from others.
- Jon Postel. See Postel’s Law.
I took some pains at the last OOPSLA to try to remind everyone that Smalltalk is not only NOT its syntax or the class library, it is not even about classes. I’m sorry that I long ago coined the term “objects” for this topic because it gets many people to focus on the lesser idea.
The big idea is “messaging” — that is what the kernal of Smalltalk/Squeak is all about [...]
- Alan Kay
The only way to reach perfection is to venture a little way beyond it into imperfection.
- Peter Van Roy‘s corollary to Clarke’s Second Law
Just play it grand. To stay with the future as it moves, is to always play your systems more grand than they seem to be right now.
- From The Computer Revolution Hasn’t Happened Yet, OOPSLA 1997 – Talk by Alan Kay
Communication between two people (or between one person and a computer) includes communication on two levels. Explicit communication includes the information that is transmitted in a given message. Implicit communication includes the relevant assumptions common to the two beings.
The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.
About the use of language: it is impossible to sharpen a pencil with a blunt axe. It is equally vain to try to do it with ten blunt axes instead.
- From How do we tell truths that might hurt? by Edsger W.Dijkstra
Nondeterminism should be explicitly added to programs, and only where needed, as it is in sequential programming. Threads take the opposite approach. They make programs absurdly nondeterministic, and rely on programming style to constrain that nondeterminism to achieve deterministic aims.
If we expect concurrent programming to be mainstream, and if we demand reliability and predictability from programs, then we must discard threads as a programming model. Concurrent programming models can be constructed that are much more predictable and understandable than threads. They are based on a very simple principle: deterministic ends should be accomplished with deterministic means. Nondeterminism should be judiciously and carefully introduced where needed, and should be explicit in programs. This principle seems obvious, yet it is not accomplished by threads. Threads must be relegated to the engine room of computing, to be suffered only by expert technology providers.
A discrete decision based upon an input having a continuous range of values cannot be made within a bounded length of time.
The best reward is having many people (and computers!) use your algorithm, and this is worth ten Fields medals.
I call it my billion-dollar mistake. It was the invention of the null reference in 1965.
To support modular programming, a language must provide good glue. Functional programming languages provide two new kinds of glue — higher-order functions and lazy evaluation.
All non-trivial abstractions, to some degree, are leaky.
You can have at most two of these properties for any shared-data system – Consistency, Availability, Tolerance to network Partitions. (Known as The CAP Theorem after it was proved by Seth Gilbert and Nancy Lynch of MIT)
… in the OO world you hear a good deal about “patterns”. I wonder if these patterns are not sometimes evidence of case (c), the human compiler, at work. When I see patterns in my programs, I consider it a sign of trouble. The shape of a program should reflect only the problem it needs to solve. Any other regularity in the code is a sign, to me at least, that I’m using abstractions that aren’t powerful enough — often that I’m generating by hand the expansions of some macro that I need to write.
If somebody comes up to you and says something like, “How do I make this pony fly to the moon?”, the question you need to ask is, “What problem are you trying to solve?” You’ll find out that they really need to collect gray rocks. Why they thought they had to fly to the moon, and use a pony to do it, only they know. People do get confused like this.
The cardinal axiom of all user interface design: A user interface is well-designed when the program behaves exactly how the user thought it would.
Professor Hans-Henrik Stølum, an earth scientist at Cambridge University, has calculated the ratio between the actual length of rivers from source to mouth and their direct length as the crow flies. Although the ratio varies from river to river, the average value is slightly greater than 3, that is to say that the actual length is roughly three times greater than the direct distance. In fact the ratio is approximately 3.14, which is close to the value of the number Π … the appearance of Π is the result of a battle between order and chaos.
- From Fermat’s Enigma by Simon Singh