Some say that aerodynamics can’t explain how a bumblebee flies. Perhaps that was once the case, but as far as I know there are no difficulties now. The bumblebee story persists as an urban legend. And it makes a nice metaphor for things that work better in practice than in theory.
Here’s the passage that brought the bumblebee story to mind.
Almost every software engineering principle that has become generally accepted as useful and valuable, Emacs flouts. The code is 24 years old, huge, and written by hundreds of different people. By rights, the whole thing should blow up. But it works—and works rather well.
This comes from Jim Blandy’s chapter in Beautiful Architecture. Blandy explains that Emacs’ architecture has allowed it to thrive despite some apparent disadvantages. Emacs is mostly written in its own programming language, Emacs Lisp.
Emacs Lisp has no object system, it’s module system is just a naming convention, all the fundamental text editing operations use implicit global arguments, and even local variables aren’t quite local.
In short, Emacs expects developers to be self-disciplined and does not enforce a great deal of external discipline. However, because the software is so light on bureaucracy, it is easy to customize and to contribute to.
TeX is another bumblebee project. Like Emacs, it has thrived for decades without following currently fashionable software techniques. Knuth implies in this presentation that TeX would have been a dismal failure if it had used technologies that are trendy now.
If you read the source code for the Apache DefaultHttpClient, you will find seemingly perfect object oriented composition, and will likely find it completely inscrutable.
@David:
After resisting Apache HTTP Client library for many years, I finally gave in last week and attempted to use it. Reading the tutorial and skimming the code, I just had to cry at all the OO atrocity. And mind you, I am a grown man :) After championing OOP, Design Patterns and TDD for many years, I am saddened to see them mostly used as rituals than substantive aids to the process of product development. What is even worse is the lack of appreciation of ‘engineering’ in software development.
Emacs still works because developers prefer working on the tools to get the job done MUCH MORE than working on the job itself.
Emacs is a tool, and working on that tool is “fun”…