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.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.
Sounds a bit like Apple's mindset to me...
pcmattman on July 23, 2007 2:31 AMYeeeeah, sure... Show me ANY usable system designed with this "futurist programming" thingy.
Nero on July 23, 2007 2:40 AMWell, 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.
Jeff Atwood on July 23, 2007 2:46 AMI 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 ?
J. Stoever on July 23, 2007 3:45 AMNo 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.
Stephen Jones on July 23, 2007 4:17 AMGood 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).
Scott L on July 23, 2007 5:34 AMSo, 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.)
ChrisL on July 23, 2007 5:51 AMDesign 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.
David Ginger on July 23, 2007 5:52 AMDon't forget:
* No comments because code should be self commenting! Yeah!
Kai Tain on July 23, 2007 6:09 AMThat reject list sounds like a call for COBOL programmers.
George T on July 23, 2007 6:16 AMNow, (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?
Ishmaeel on July 23, 2007 7:10 AMSo 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).
Reed on July 23, 2007 7:14 AMI 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.
Cecil on July 23, 2007 7:15 AMI 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).
I’m guessing that these ideas were to make programmers think critically and not necessarily take their own programming training at face value. I’ve come to this conclusion because I’m having a hard time reconciling: “Rejecting COPIES that have been done before” and “Rejecting Modularity”. Also, if your trying to stop a programming religion, why would start a new one? Since Futurism was originating by painters, this sounds so Dada to me.
Norm on July 23, 2007 7:54 AM
> It's an admirable set of goals.
Hmmm. I saw this some years ago, and I remember thinking then that it was a load of bollocks, and I think time has proved me right :-) It was a clear over-reaction to what a couple of guys thought was a problem. I would like to see what sort of code they produced under this regime. Although I wouldn't like to have to work on it :-)
Oh, and Scott L, this doesn't sound much like Agile programming to me (the no paper documentation is the only vaguely Agile thing in the list), and Agile programming != no planning. It does, however, require a different sort of planning.
Jim Cooper on July 23, 2007 7:54 AM>Extensibility, Modularity, Structured Programming, Reusable code, >Top-Down Design, Standards of all kinds, and Object->Oriented "METHODOLOGIES".
I actually found this to be powerful. It really says to me that we need to expand our toolbox and think beyond the tools and techniques we have today. If you only have a hammer you tend to view every problem as a nail. I welcome this futurist outlook. Only once we reject our past can we move beyond the approaches that have only incrementally evolved in the last 40 years.
mike johnson on July 23, 2007 8:07 AMThey reject "Reusable code" ? I can understand that to keep a system lean not adding things in for "code reuse" that you may not need, but copying and pasting the same algorithm everywhere doesn't seem like a good way to keep things lean or fast, much less bug free.
fregas on July 23, 2007 8:12 AMWhat is wrong with user-configurable software? Am I supposed to read someone's mind and guess where files should go, who the user should be, where the database is?
Or is this aspect of the futurist philosophy so narrow-minded that I should already know where those things are?
Or am I a noob and got it all wrong?
Gene on July 23, 2007 8:51 AMI think some of the "Priorities" are dead on mark:
* The USER LIKES to use the program.
* The program is BUG-FREE.
* The program needs NO USER MAINTENANCE.
* The program requires NO USER DOCUMENTATION.
* The program requires NO SYSTEM ADMINISTRATOR
The red background on that "Futurism resource page" site really messed with my eyes. Also the link colors couldn't be any worse. I had to CTRL-A to select all the text just to read the URL links.
Adam (Rez) on July 23, 2007 9:50 AMI don't think I want to be on a team that doesn't decouple code using standard O.O. design and/or modular and reusable code. "Don't worry guys if you need some data just grab it the globals.h file I'm sure no one else plans on using your data" That sounds like a nightmare to manage. I can't imagine this "model" works well for life critical software either...
jace on July 23, 2007 9:57 AMI'm pretty tired of hearing about people who think computer science curricula should not consist of computer science education. If you just want to be a programmer solely, go to ITT Tech.
BM on July 23, 2007 10:04 AMYeah, well, I want my car to run on nothing but farts, but there's some natural laws that get in the way.
John Radke on July 23, 2007 10:10 AM> Am I supposed to read someone's mind and guess where files should go, who the user should be, where the database is?
The futurist stuff-- and I'll admit some of it is just rhetoric-- turns out to be a decent oracle in this area, as well.
Convention over Configuration
http://softwareengineering.vazexqi.com/files/pattern.html
> Anything that is done for the convenience of the programmer at the expense of the user.
> All additional forms of USELESS and IRRESPONSIBLE WASTE.
These sound _very much_ like Lean/Agile to me. I am just finishing up "Lean Software Development" by Mary and Tom Poppendieck ( http://www.amazon.com/Lean-Software-Development-Toolkit-Managers/dp/0321150783/ref=pd_bbs_sr_1/102-3016171-0456151?ie=UTF8&s=books&qid=1185213614&sr=8-1 ), which is a great explanation of the motivations behind the Agile "philosophy". A couple big recurring themes in the book are (a) eliminating waste, and (b) rapidly delivering value to the user.
WaterBreath on July 23, 2007 11:03 AMThis repeats the oft spoken nonesense about bloatware. "Don't waste precious memory", "don't waste precious processor cycles." Frankly that is total bunk. Memory and cycles are not particularly precious at all. When I was a kid I wrote lots of Z-80 code that had to be extremely tight on memory and cycles, today you simply don't have to. It seems much better to waste memory, than delay a release.
Premature optimization of cycles or memory is a core mistake made by people who don't have to work in the practical world of deadlines and feature lists. Since my Z-80 days, I never hear people complaining about the memory footprint of applications, and rarely do I hear about performance woes. (In the latter case, it is usually a poor choice of algorithm, rather than the need to unroll all your for loops that is at fault.)
Futurist Programming looks like a great tool... for writing revolutionary software and helping one think out-of-the-box. But, that's not always an important requirement.
I hope that the computer scientists coding the local nuclear power plant's water supply control routines don't throw out all their proven algorithms to try something new.
It takes courage implore others to forget everyone and everything that's come before and then admit that they didn't actually come up with the idea.
Michael Debro on July 23, 2007 11:58 AMI tend to agree with Stephen Jones's remark that we are now writing software that coddles users. Rather than expecting users to learn how to use the application, we try to make it fool-proof, often at the expense of efficiency and, in the long run, dumber users. If you expect users to be non-intuitive then they will expect you to be perfectly intuitive.
Mattkins on July 23, 2007 11:58 AMMichael Debro said: "Future Programming looks like a great tool (for) helping one think outside the box...that's always...an important requirement."
Couldn't agree with you more. And it's a good thing our profession widely adopted this tool; in 2025 we have no boxes due to the Great Box Famine of 2019.
Bippy Simpkins on July 23, 2007 12:53 PMI'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?
Brad on July 23, 2007 3:40 PMCode monkey very simple man
http://blogs.vertigosoftware.com/jatwood/archive/2006/07/25/Code_Monkey_very_simple_man.aspx
Jeff Atwood on July 23, 2007 3:58 PMFuturism 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.
Brian on July 23, 2007 6:32 PMHi,
While discussing Yet Another Software Development Movement Based On Some Other Movement, I'd like to mention the one I just came up with:
Programming Dadaism:
"Dada Programmers thought that reason and logic had led people into the horrors of war, so the only route to salvation was to reject logic and embrace anarchy and irrationality."
According to its proponents, Dada Programming was not programming — it was "anti-programming". It was anti-programming in the sense that Dadaist Programmers protested against the contemporary academic and cultured values of programming. For everything that programming stood for, Dada Programming was to represent the opposite."
I like the analogy of Futurism with coding methodology. Most of the goals listed are right up the alley of a typical demoscene coder. Yet, the demoscene started up well before this 1994 realization. :) Nice find.
Shawn Poulson on July 24, 2007 6:54 AM"Universities should provide students with less religion, and much more practical experience in making and analyzing small, fast, useful and efficient programs."
Sounds like TopCoder (www.topcoder.com).
Pedro on July 26, 2007 4:45 PMThis could be about art. Maybe,, programming has had too much method drilled into it. Is there room for emotion?
Keios on July 27, 2007 2:40 PMThis could be about art. Maybe,, programming has had too much method drilled into it. Is there room for emotion?
Keios on July 27, 2007 2:41 PMWhat luck!
I enter a search to read about the Futurists in order to be inspired and giddy about the gadgetry and widgetry washing over us, and I end up here.
I love the nationwhole: the Hudson River School landscapes and the Futurist cityscapes.
I love the way Boccioni made urban scapes hirsute, and how Mondrian made oceans like subdivisions.
I have traveled through time and space on astral wings, and have drifted back home in cosmic gales.
The waxing of heaven sweeps through and without the tidal basin, bringing every glinting pebble and stone forward an increment toward soft gentle ovule and sedimentary shore.
The Positivists are ok, but the Futurists are smokin' cool.
I am not sure how well their pre-digital principles can be superimposed and integrated into a digital age, but it is well worth the effort.
Paul
Paul Roe on March 12, 2008 4:12 PM| Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved. |