Coding Horror

programming and human factors

Vive la Programming Revolution!

viva le programming rvolution! Jonathan Edwards' Manifesto of the Programmer Liberation Front is an inspiring call to arms for programmers who are fed up with the status quo of Java and C#. Maybe it is time to open your window, stick your head out and yell, "I'm as mad as hell and I'm not going to take this anymore!"

Or you could just read his blog post. Here are a few highlights:

Compared to every other field of design and engineering, programming is an embarrassment and a failure. The "software crisis" has dogged us from almost the beginning. We who have made programming our life will no longer tolerate this.

Programming languages are the fundamental technology of programming. To make fundamental improvements in programming you need a fundamentally better programming language.

There is a widespread belief in both industry and academia that working on new programming languages is pointless. This is short-sighted. Historically, all sciences and technologies undergo revolutionary change. The lack of meaningful progress in the last 20 years means that there is an enormous pent-up potential for change, and the lack of interest in it means there is an enormous opportunity for the intrepid. It is a good time for a revolution.

To fully embrace adaptation as the essence of programming will require a change of attitude that is quite difficult: discarding elegant yet fragile constructions in favor of messy but flexible ones. One case in point is copy-and-paste programming. This violates all the accepted rules of modularity and hygiene, yet everyone still does it routinely. Either most programmers are stupid and evil, or the accepted rules are idealistic and impractical. The latter is the case. It is necessary to embrace copy-and-paste as a first-class "semi-modularity" mechanism in the language – to track it, manage it, and eventually refactor it into "proper" modularity. This may be heretical, yet an honest appraisal of how programmers really work requires something like it. Usability is a subversive idea.

In Science and Math, formulas are typically one-liners. Even small programs are far larger than any mathematical statement. Expression-based languages attempt to scale up formulas to hundreds or thousands of lines. One reason this does not work is that people can not easily handle more than about 2 levels of nesting. We are not stack machines! Natural languages rely on linear narrative flow and avoid deep nesting. This may be the real problem with LISP: people complain about parentheses, but they are really complaining about deep nesting.

Commercial considerations often dictate that compatibility and performance have the highest priority, with disastrous consequences (witness C++). As the Open Source movement has demonstrated, progress requires overthrowing the economics of software. We will need to go even further, freeing our minds of traditions established with the very first programming languages. Usability is the guiding light to rationally reinvent programming from scratch.

Programming is at a dead-end. The only way things will get better is with a complete revolution. More conservative attempts over the years have repeatedly failed to make a difference, leading to the widespread abandonment of hope. We have nothing to lose.

You might say it's a street corner preacher rant. But that's what makes it so good.

Written by Jeff Atwood

Indoor enthusiast. Co-founder of Stack Overflow and Discourse. Disclaimer: I have no idea what I'm talking about. Find me here: