I went home for my father’s 77th birthday last weekend. Besides catching a bad stomach flu that has laid me out for the last few days, I also had a little browse down the memory bookshelf. In with Plato’s Republic I found a few of my less useful CS books — 80×86 and 68k assembly language books, Fortran, PASCAL — that I haven’t bothered to include in my working programmers library. I rarely have to look at any legacy Fortran or PASCAL, and I haven’t had to do any assembly language in forever. I’ve toyed around with assembly language for the JVM, but more as a curiosity. Unless you are a kernel or compiler writer, there just isn’t much call to do it.
Now I’ve interviewed and worked with lots of developers over my career. Just taking the last seven, say since 2000, I’ve noticed a real drop off in those who have studied assembly language programming. Now why would I care about whether programmers are knowledgeable in a skill that I myself don’t even use? Why should I value such an impractical skill? Well, because I think that solving problems using assembly language gives you a deeper insight into the workings of the underlying hardware and, more importantly, imposes a certain mental discipline on the problem solver. The same thing is true for programming with punch cards. I may be one of the youngest people around who actually wrote code on punch cards and fed it to an ever obliging Amdahl (an IBM mainframe clone at SUNY Binghamton, near the birthplace of IBM, eegads).
Having to retype your code a card at a time (no backspacing, baby, and no code completion) and waiting for up to an hour to find out you had committed a logic or syntax error, makes you ruthless and efficient in your debugging and problem solving. For guys like me, symbolic debuggers and all the crutches that an IDE provides seem like junk food for the programmer’s mind. Of course, once you’ve used tools like Resharper, a plugin that makes Visual Studio a pleasure to use, you have to allow yourself a few development Fruit Loops.
I see the same sort of evolution with the browser platform. The appearance of well engineered frameworks that simplify, hide or eliminate the need to know Javascript, CSS or XHTML, is the beginning of the end of Javascript as a core skill set for web development. It may not seem obvious now, of course; after all, there seems to be more Javascript development going on than ever before, but the trend toward Javascript-free Ajax and web development is rooted in this furious framework activity.
And that trend disturbs me for the same reasons that the trend away from Assembly language disturbed me: a lack of mental rigor and an ignorance of the underlying platform. Maybe I’m a fuddy-duddy as described in On the necessity of removing “cruelty” from the teaching of computing by Tony Clear:
They bewailed the dumbing down of programming, with COBOL’s grandiose claims to remove the need for good old assembly language programming. It was going to make programming easy, as later would fourth generation languages and all the subsequent over-hyped marketing exercises proposing the end of programming.
The impetus for this article was the talk by Edsger Dijkstra entitled On The Cruelty of Really Teaching Computing Science. He was arguing for the teaching of CS as a mathematical discipline. The debate has moved on, but one of my favorite statements on the mixed blessing of applying computers to real world problems:
The business community, which, having been sold the idea that computers would make life easier, is mentally unprepared to accept that they only solve the easier problems at the price of creating much harder ones.
It’s good advice to keep in mind as we solve the “easy” problem of making web applications more powerful and easier to develop.



People are all for computers reducing the workload of accountants, secretaries, Wall street traders, but when computers are used to reduce the workload of programmers suddenly the world is coming to an end.
There are only so many hours in the day and only so much knowledge a single human can possess. If every programmer knew the ins and outs of assembly language how much room is left for actual real-world domain knowledge? There are real business and social problems that need to be solved the less programmers are fiddling around with technology the better.
I also noted that trend, but I do not see any problem with it though, as long as the abstraction is not too leaky. You can make things simpler by having abstractions which hide the underlying complexities, and the elimination of JavaScript (and its browser incompatibility problem) is only to make it simpler to developer most Ajax-based applications.
I figure there will always be programmers that are willing to dive deeper into it than they need to. On the other hand there are programmers that want to do their job and archieve their goals as fast as possible with maximum help from code generators, frameworks and whatever else is out there to assist.
All you can do is choose the right guy for the job in question. A real system bulldog will never be happy in a customer application project with a tight schedule where the second-to-best solution is the one you take as long as you can put a green flag to it in the project plan.
Your article and the contrasting comment from AlmostAlive show it. Oh and yes I figure JS is the assembly language of web2.0 …
a beautiful assembly language guide online at http://assembly.co.nr