Futurist Programming.. in 1994

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


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2007/07/futurist-programming-in-1994.html

Sounds a bit like Apple’s mindset to me…

Yeeeeah, sure… Show me ANY usable system designed with this “futurist programming” thingy.

Well, here’s a list of “futurist programmers” from the Futurist Programming Notes page.

Henry Massalin - Superoptimizer, Synthesis Kernel
http://en.wikipedia.org/wiki/Self-modifying_code#Henry_Massalin.27s_Synthesis_Kernel

Bill Atkinson - Quick Draw
http://en.wikipedia.org/wiki/Bill_Atkinson

Jon Bentley - Programming Pearls
http://en.wikipedia.org/wiki/Jon_Bentley

Butler Lampson - Hints Paper
http://en.wikipedia.org/wiki/Butler_Lampson

No idea if these guys identify themselves as futurist programmers. But they’re supposedly examples of futurist ideals, at least as they existed in 1994, FWIW.

I’m so confused. Good is bad. Bad is good. Up is down. Small is big. How in hell is a simple code monkey to keep track?

I might have missed the point, but what about rejecting “Extensibility, Modularity, Structured Programming, Reusable code, Top-Down Design, Standards of all kinds, and Object-Oriented “METHODOLOGIES”.” sounds like a good or even remotely sane idea ?

Or are we endorsing it just because it’s radical and different ?

Code monkey very simple man

http://blogs.vertigosoftware.com/jatwood/archive/2006/07/25/Code_Monkey_very_simple_man.aspx

No Extensibility, Modularity, Structured Programming, Reusable code, Top-Down Design, Standards of all kinds, and Object-Oriented “METHODOLOGIES”???
“Hi Jim, your first job is familiarize yourself with Johnny HAx0rs code base. I’m sure you’ll be glad to know he was is one of those futurist programmers. Now I know theres no whitespace and its all in one file but Sam felt it was excessively wasteful on the hard disk and besides, it runs pretty quick…classes, are you mad!!!”

All well and good, but what do we replace these things with? They appear to be throwing the baby out with the bathwater, probably deliberately just to get people talking. But all that will achieve is a whole new way of doing things that is more complex, more prone to error and more bureaucratic.

Many of the problems have been solved in unix a long time ago, yet they rail against the technology of the past. Today I needed to clean out a disk on a webserver. “du | sort -n | tail” told me all I needed to know, simple, fast, modular (oh no!). But of course I had to learn that, and if there’s one thing we can’t do, it’s treat users like adults.

Imagine you’re putting up shelves, do you:
a) Carefully align your shelves, drill holes in the wall of the appropriate diameter, insert plugs of the correct type and screw them in with the correct type of screw?
b) Stand around complaining about the lack of usability in shelving?

The reason programs are getting worse is we’re attempting to substitute the intelligence of the user with software. Unless someone’s solved the AI problem and not told me, this is simply wrong headed.

Good code is no art! It doesn’t have “look cool”! It has to work and to be understandable by any other guy with some idea of programming.
Sometimes it’s better to have less efficient code that you can debug in one hour than have very efficient code and pray it will work.

Yeah, well, as for top down design - I’ll be awaiting the “Futurists’ Operating System”, for many years to come. This somehow has the feel of agile programming; no need to plan, we’ll just wing it from what we think we want and continually compile.

Sorry, but top down design has a tipping point where it becomes less efficient than starting from the ground up. Furthermore, try to make somewhat radical changes to a top down design - you’ll have to start from scratch anyways.

Just my $.02, from a software development major (young and optimistic, or something to that effect).

So, if I want to make software that’s not user configurable, because it’s convenient for me, the programmer, what then?

I agree that one shouldn’t cling to dogma (old practices) for the sake of clinging. But, when something works (well), why fix it? That’s especially true with standards, structured code, etc. (Echo what P Short just said.)

Design what software ?
What are the Goals ?

Or do you mean the cheap production of software using disposable programmers ?

While a biz might be prepared to pay the high salaries for accountants, lawyers and such like, software production is just “technical”, so we should not pay too much money.

Don’t forget:

  • No comments because code should be self commenting! Yeah!

That reject list sounds like a call for COBOL programmers.

Futurism is very similar to cubusim and dada, both contributed to the movment.

Just to clarify, many were facist unfortunatly because if you weren’t you were dead as an artist. Those that were true to the movement’s ideals were dangerously close to being dead. They sure as poo couldn’t be dada 'cause they would be worse then dead. Then again I think Kurt Vonnegut said it best:

“Beware who you pretend to be, because you are who you pretend to be.”

I take the futurist rejection to: Extensibility, Modularity, Structured Programming, Reusable code, Top-Down Design, Standards of all kinds, and Object-Oriented “METHODOLOGIES”.

To be a rejection of dogmatic form. Much like the rejection of structured art by futurist, cubists, and dada. The idea that the form of an artist could be mimiced by an immatator following a “guide” or set of rules struck fear and resentment to the artists of the time. These movements are a reaction to industrialization and the technological wonder of the camera. I see this as a resentment toward methodologies because they take the stance that simply following a methodology will not make you a good programmer.

OOP for OOP sake will not make a good system. With this I agree. NO amount of reading or mimicry or worship to dogma will make you a good programmer, nor artist. A good programmer sees OOP or Agile for what it is. A tool, learned to be good for certain situations, applied with specific intent. Not just another bible to beat someone with or road to instant success.

Now, (flimsy) comparisons between developing programs and constructing bridges are all over the place, but that “Futurist Programming Notes” page is the first place where I have seen a comparison between programming and window washing.

I realize most of what they are saying must be symbolic or rhetorical but putting bullshit in one’s very manifesto cannot be a good starting point, no?

So if they REJECTed all those things, what kinds of software would they like to have seen? It seems like they wanted all users to be programmers, but with languages and systems that are simple and direct to program and hack on by knowlegeable users – something I would love to see happen, at least in some cases, but have yet to really see in action in any big system other than web pages (and then only partially).

I find it interesting that this article was posted on Coding Horror, where the author is madly in love with .NET and C#. Doesn’t C# violate a lot of those rules up there? Don’t waste the users’ memory? Sure, users have a lot of memory these days but a huge framework and managed code that takes up a lot of memory is what I’d call “wasting”.

I could go on but the point is, I just find it interesting, that’s all.

I recall the corporate sign for Yoyo-dyne in Buckaroo Bonzai. “The future is tomorrow”. How about oral programming or programming by natural language? Talk about the future (no pun intended).