Futurist Programming Notes

Paul Haeberli and Bruce Karsh

Horiz Bar

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 Press, 1978.

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:
  • Television - 3 seconds
  • Automobile - 2 seconds
  • Microwave oven - less than 1 second
  • Video game - less than 1 second
  • Unix workstation - 120 seconds or more
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.

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?

Slogans

  • 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 peoples' work.
  • 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.

Baggage

  • 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 USER wants.

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:
  • How to make really nice customizable buckets and squeegees.
  • 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 any implementation.
  • 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.
Who would you rather have "solving" this problem for you, a computer "scientist" or a professional?

Futurist Programmers

  • 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 topping!!

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

We REJECT

  • 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 WASTE.