Despite several orders of magnitude hardware advances in the last 40 years, software development is lagging behind. The tools for building code have improved -- we have better languages, programmers have greater access to frameworks and communities -- but even with all this, software development has improved only incrementally at best.
Below, you will find a collection of ideas, wisdom, critcism, and potential directions for programming.
- 12 programming mistakes to avoid
- 26 Types of Programmers
- 5 Ways to Burn Out
- Alan Kay on Context
- Alan Kay on the origin of Object- Oriented Programming
- Beautiful code, test first
- Developers vs. Programmers
- Diamond Cutting
- Don't fall in love with your technology
- Done and gets things smart (by Steve Yegge)
- Epigrams on programming
- How to Write Unmaintainable Code
- If carpenters were hired like programmers
- Is programming boring
- Latency numbers every programmer should know
- Layout Engines
- Math for Programmers
- Millions of lines of code
- Mother of All VPRI Demos
- Multi- Dimensional Meta Language
- Operant Conditioning by Software Bugs
- Orphans Preferred
- Producing Documents for a Programming Project
- Professor without a cause (by Why the Lucky Stiff)
- Programming Sucks
- Real Coding Contest
- Sequential vs Parallel
- Should computer scientists experiment more
- Sorting the WWW Mess
- Static and Dynamic typing
- Static types are constraints
- Stay the hell out of other people's code
- TREE- META
- Technology Treadmill
- The Cycle of Suck
- The Effects of Programming on the Brain
- The Future of Programming (by Jonathan Edwards)
- The Problem of Reengineering
- The Rise of Worse is Better (by Richard Gabriel)
- The Simplest Thing
- The Ubiquity of Text
- Think Before Debugging
- Trials (by Why the Lucky Stiff)
- What we say vs. What we mean
- Which question does each programming language answer
- Why Live Programming never took off
- Why developers dislike Agile
- Why programmers work at night
- Why there are so many new programming languages
Big Ball of Mud (Code shantytowns)
You can't get to the moon by piling up chairs.
There are two ways of constructing a piece of software: One is to make it so simple that there are obviously no errors, and the other is to make it so complicated that there are no obvious errors.
- -- Tony Hoare
In programming there is a wide-spread 1st order theory that one shouldn't build one's own tools, languages, and especially operating systems. It's true that an incredible amount of time and energy has gone down these ratholes. On the other hand, if you can build your own tools, languages and operating systems, then you absolutely should because the leverage that can be obtained (and often the time not wasted in trying to fix other people's not quite right tools) can be incredible.
- -- Alan Kay (The Power of Context, 2004)
The importance of software lies not in its implementation, but rather in the eventual usage of that software. If premature optimization is an evil of our trade, then premature implementation is just as evil.
Once you get a B.S. in Computer Science, you think you know everything. Once you get an M.S., you realize you know nothing. Once you get a Ph.D., you realize no one knows anything!
Current software is shameful; it's bloated and overcomplicated. More importantly, we're developing things the wrong way: our tools are at the same time too complex, not powerful enough, and not suitable to formal automatic reasoning.
- -- Luca Saiu
My conclusion is that there is a structural, systemic problem with the creation of software. Of course, it's very frustrating because our brothers in hardware celebrate Moore's Law. Now, we have three Moore's Laws--one in processors, one in memory and one in bandwidth. Software is the opposite. We don't celebrate Moore's law; we commiserate over the continuing software crisis. That's why I always say that software is the bottleneck on the digital horn of plenty. It's so obvious that there is a giant gap between the processing capabilities of the machine compared to actual services it provides. Software takes up tremendous resources in talent and time. It's disappointing and hard to change. It blocks innovation in many organizations.
- -- Charles Simonyi
One can only display complex information in the mind. Like seeing, movement or flow or alteration of view is more important than the static picture, no matter how lovely.
- -- Alan J. Perlis
Optimization hinders evolution. Everything should be built top-down, except the first time. Simplicity does not precede complexity, but follows it.
- -- Alan J. Perlis
When you program, you spend more time reading code than writing it... a language that makes source code ugly is maddening to an exacting programmer, as clay full of lumps would be to a sculptor.
- -- Paul Graham
In practice, GUI programs are pretty disguisting... Everything bad about programming, all at once.
- -- Neelakantan R. Krishnaswami
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.
- -- Alan Kay (ACM Queue Conversation, Vol. 2, No. 9 - Dec/Jan 2004-2005)
He who does not lay his foundations beforehand may by great abilities do so afterwards, although with great trouble to the architect and danger to the building.
- -- Niccolo Machiavelli
Numenta cofounder Dileep George left to found his own company, Vicarious, to pick some of the more low-hanging fruit in the promising field of AI. This amicable separation stemmed from a difference of opinion between George and Hawkins; George tended towards a more mathematical approach, while Hawkins liked a more biological one.
Hawkins brushes off these criticisms and believes they come down to a difference of opinion between him and the AI intelligentsia.
"These are complex biological systems that were not designed by mathematical principles, and are very difficult to formalize completely. This reminds me a bit of the beginning of the computer era. If you go back to the 1930s and early 1940s, when people first started thinking about computers, they were really interested in whether an algorithm would complete; they were looking for mathematical completeness -- a mathematical proof. If you today build a computer, no one sits around saying 'let's look at the mathematical formalism of this computer.' It reminds me a little of that. We still have people saying 'You don't have enough math here!' There's some people that just don't like that."
The trouble with computers, of course, is that they're very sophisticated idiots. They do exactly what you tell them at amazing speed. Even if you order them to kill you. So if you do happen to change your mind, it's very difficult to stop them from obeying the original order. [stops computer from destroying Earth] But not impossible.
- -- The Doctor
The connection between the language in which we think/program and the problems and solutions we can imagine is very close. For this reason restricting language features with the intent of eliminating programmer errors is at best dangerous.
- -- Bjarne Stroustrup
Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.
-- Melvin Conway (Conway's law)
Mathematics is primarily concerned with the nature of the behavior of process independent of how that process is expressed:
the nature of a process is considered independent of its expression.
Computer science is primarily concerned with the nature of the expression of processes regardless of what particular process might be expressed:
the nature of expression is considered independent of its process.
- -- Karl Fant (A Critical Review of the Notion of the Algorithm in Computer Science, ACM 1993)
It's not that people are completely stupid, but if there's a big idea and you have deadlines and you have expedience and you have competitors, very likely what you'll do is take a low-pass filter on that idea and implement one part of it and miss what has to be done next. This happens over and over again. If you're using early-binding languages as most people do, rather than late-binding languages, then you really start getting locked in to stuff that you've already done. You can't reformulate things that easily.
The adoption of programming languages has very often been somewhat accidental, and the emphasis has very often been on how easy it is to implement the programming language rather than on its actual merits and features. For instance, Basic should never have surfaced because there was always a language better than Basic for that purpose. That language was Joss, which predated Basic and was beautiful. But Basic happened to be on a GE timesharing system that was done by Dartmouth, and when GE decided to franchise that, it started spreading Basic around just because it was there, not because it had any intrinsic merits whatsoever.
This happens over and over again. The languages of Niklaus Wirth have spread wildly and widely because he has been one of the most conscientious documenters of languages and one of the earlier ones to do algorithmic languages using p-codes (pseudocodes) -- the same kinds of things that we use. The idea of using those things has a common origin in the hardware of a machine called the Burroughs B5000 from the early 1960s, which the establishment hated.
- -- Alan Kay
In the past year I think I have finally come to understand the ideals of Unix: file descriptors and processes orchestrated with C. It's a beautiful idea. This is not however what we interact with. The complexity was not contained. Instead I deal with DBus and /usr/lib and Boost and ioctls and SMF and signals and volatile variables and prototypal inheritance and _C99_FEATURES_ and dpkg and autoconf.
- -- Ryan Dahl
The major cause [of the software crisis] is that the machines have become several orders of magnitude more powerful! To put it quite bluntly: 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 we have gigantic computers, programming has become an equally gigantic problem. In this sense the electronic industry has not solved a single problem, it has only created them, it has created the problem of using its products.
- -- Edsger Dijkstra
Until programmers stop acting like obfuscation is morally hazardous, they're not artists, just kids who don't want their food to touch.
- -- _why the lucky stiff
When you don't create things, you become defined by your tastes rather than ability. Your tastes only narrow and exclude people -- so create.
- -- _why the lucky stiff
It took 300 years to build and by the time it was 10% built, everyone knew it would be a total disaster. But by then the investment was so big they felt compelled to go on. Since its completion, it has cost a fortune to maintain and is still in danger of collapsing.
There are at present no plans to replace it, since it was never really needed in the first place.
I expect every installation has its own pet software which is analogous to the above.
- -- K.E. Iverson, on the Leaning Tower of Pisa
The Internet of Things is the nightmare of pervasive embedded insecurity made real.
-- InfoSec Taylor Swift