Coding Horror

programming and human factors

Futurist Programming.. in 1994

Paul Heberli and Bruce Karsh proposed something they call futurist programming in 1994:

We believe there is a great opportunity for Futurist principles to be applied to the science of computer programming. We react against the heavy religious atmosphere that surrounds every aspect of computer programming. We believe it is time to be free from the constraints of the past, and celebrate a renaissance in the art of computer programming.

We find that many of today's computer systems are hopelessly wasteful and inefficient. Computer hardware has realized performance increases of a factor of more than 200 in the last 20 years, while in program design very little progress has been made at all since the invention of the subroutine. We would like to see the science of programming advance as quickly as other fields of technology.

We believe that undergraduate education spends too much time conveying dogma, instead of teaching a sound theory of program design that helps programmers create good programs. Universities should provide students with less religion, and much more practical experience in making and analyzing small, fast, useful and efficient programs.

Futurism was a primarily Italian art movement in the early twentieth century; the most succinct summary I've found is on this Futurism resource page:

Futurism was an international art movement founded in Italy in 1909. It was (and is) a refreshing contrast to the weepy sentimentalism of Romanticism.

Giacomo Balla, Plastic Construction of Noise and Speed, 1915

The Futurists loved speed, noise, machines, pollution, and cities; they embraced the exciting new world that was then upon them rather than hypocritically enjoying the modern world's comforts while loudly denouncing the forces that made them possible. Fearing and attacking technology has become almost second nature to many people today; the Futurist manifestos show us an alternative philosophy.

The 1994 Manifesto of the Futurist Programmers is wholly based on the 1910 Manifesto of the Futurist Painters. But perhaps the best explanation of what futurist programming actually means is tucked away in the Futurist Programming Notes:

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.

It's an admirable set of goals. Of particular interest is the futurist reverence for programs that dynamically generate code; this presages the current renaissance of dynamic programming languages, ten years later. Apparently the future is now.

The core futurist philosophy that religion and dogma of all kinds should be examined critically is an important one. I've written many times about certain accepted "wisdoms" in software development that are counter-productive if not downright dangerous. I think you should be constantly questioning the status quo, and solidly skeptical of so-called best practices. But this, too, can be taken too far. I intentionally omitted the last sentence of the futurism summary on the Futurism resource page:

Too bad they were all Fascists.

You have to be careful that rejecting dogma doesn't itself become a kind of dogma. Sometimes, a bulleted list of best practices can be helpful, too.

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Exchange and Discourse. Disclaimer: I have no idea what I'm talking about. Find me here: http://twitter.com/codinghorror