Futurist Programming Notes
Paul Haeberli and Bruce Karsh
A Futurist Programming reading list
Here are several references that you might find useful.
- Jon Bentley, Writing Efficient Programs, Prentice-Hall, 1982.
- Ester Coen, Umberto Boccioni, Abrams, 1988.
- Dana Giola, Can Poetry Matter?, The Atlantic Monthly, May 1991.
- Simson Garfinkel, Daniel Weise, and Steven Strassmann, The UNIX
HATERS Handbook, IDG books, 1994
- Paul Haeberli, http://www.sgi.com/grafica/future/, WWW, 1994.
- Pontus Hulten, Futurism and Futurisms, Abbeville Press, 1986.
- Butler Lampson, Hints for Computer System Design, Proceedings of ACM
SIGOPS, Operating Systems Review, Volume 17, Number 5, Oct, 1983.
- Henry Massalin, The Superoptimizer: A Look at the Smallest Program,
Proceedings of ACM SIGOPS, Operating Systems Review, Volume 21,
Number 4, Oct, 1987.
- Henry Massalin and Calton Pu, The Synthesis Operating System,
Proceedings of the Fourth Workshop on Real-Time Operating Systems,
Cambridge, MA, July 1987.
- Caroline Tisdall and Angelo Bozzolla, Futurism, Oxford University
Computer "Science" terms exposed
- Structured programming = slow.
- Modular = bloated.
- Extensible = late.
- Reusable = buggy.
- Object-Oriented = slow and bloated and late and buggy.
- Top-Down Design = hard to use.
- Standard Compliant = slow and late and hard to use = obsolete.
- Automatic = Manual.
- Configurable = Unfinished.
- Fully Configurable = Completely Unfinished.
- Type Safe = Imponderable.
- Hack = useful.
- Little Hack = very useful.
Modern software is incredibly wasteful
The user's time is a precious thing. Let's look at some boot times:
Isn't it surprising that the more expensive machines
waste more of the user's time. A UNIX workstation
will execute over one billion instructions for itself, before
executing even one instruction for the user.
- Television - 3 seconds
- Automobile - 2 seconds
- Microwave oven - less than 1 second
- Video game - less than 1 second
- Unix workstation - 120 seconds or more
Is any progress being made in software development?
In the last 20 years machines have increased in performance
by a factor of 200. Why hasn't software performance improved
by a factor of 2?
- Sure today's software is a little slow, but the thing you gotta
remember it's hard to use AND completely bug ridden.
- Usefulness Is Primary.
- Instead of Structured software, why not Liquid software?
Notes on computer science tradition
- Unscientific - The acceptance of ideas depends more
on personalities than on technical merits.
- Anti-Intellectual - Alternative ideas are discouraged.
- Stodgy - The primary concepts haven't changed
in 20 years.
- Dogmatic - Irrelevant criteria are used to evaluate
- Arrogant - most NEW ideas are feared and rejected.
- Insular - isolated from other disciplines.
Futurist Programming Exercises
- Remove all system files that haven't been accessed in the
last 6 months. Ours works fine!
- Write a program that dynamically generates code.
- Try indenting from right to left.
- What is the shortest program that will accomplish your task?
- lowest number of characters in source.
- smallest executable.
- executes least number of instructions.
- Write a program using assembly language. Compare this to
a C++ implementation.
- Most operating systems have way too much baggage.
It's like you're traveling around the world with 6000
pounds of luggage.
- Futurists don't check any baggage at all - they carry on
just one piece.
Technological status seeking
- How many transistors does your radio have? Does
it have 9 transistors?
- How many jewels in your wrist watch? 17 jewels?
- Is your program developed using Object-Oriented
programming techniques? Is it Extensible?
- IT DOESN'T MATTER as long as
- You get good reception.
- The watch keeps accurate time.
- Your program runs FAST and does what the
How would you wash a window?
Suppose we were asked to wash a window and we chose to
do it the same way that software is developed. We'd get things like:
Who would you rather have "solving" this problem for you,
a computer "scientist" or a professional?
- How to make really nice customizable buckets and
- A system for classifying window shapes.
and materials, including of course, window materials
and shapes that might be developed in the future.
- An analysis of how well a window washing
technique scales from windows the size of a bee's wing
to the stain-glass windows in the largest cathedral.
- A commitment for a full design review BEFORE starting
- A consultant to write a user's manual.
- A promise of compatibility with the new Window
Washing Standard from MIT.
- Plans for a set of meetings to discuss a schedule for
developing user training to teach users to wash windows
the modern way.
- Henry Massalin - Superoptimizer, Synthesis Kernel
- Bill Atkinson - Quick Draw
- Jon Bentley - Programming Pearls
- Butler Lampson - Hints Paper
The tyranny of creeping elegance
"Check out this really cool sports car I just bought!"
- Yeah! but can you put a trailer hitch on it?
- Yeah!, but does it have 4 Wheel Drive?
- Yeah!, but how much can you carry in case you need to
take a dozen hogs to market?
- I've got this floor wax that's also a GREAT dessert
Top Futurist Programming priorities
- It is something that has NEVER BEEN DONE BEFORE.
- The USER LIKES to use the program.
- The program is as FAST as it can be.
- The program is as SMALL as it can be.
- The program is BUG-FREE.
- The program needs NO USER MAINTENANCE.
- The program requires NO USER DOCUMENTATION.
- The program requires NO SYSTEM ADMINISTRATOR
- COPIES of work that has been done before.
- USER CONFIGURABLE software.
- PAPER documentation.
- Any program that WASTES users' precious MEMORY.
- Any program that WASTES users' precious TIME.
- System administration and ADMINISTRATORS.
- Anything that is done for the convenience of the
programmer at the expense of the user.
- Extensibility, Modularity, Structured Programming,
Reusable code, Top-Down Design, Standards of
all kinds, and Object-Oriented "METHODOLOGIES".
- All additional forms of USELESS and IRRESPONSIBLE