Not the Last Programming Language

16 Apr 2011. comments

Uncle Bob Martin is a well respected figure in the software development industry and the chief driving force behind the Software Craftsmanship movement. His talks on methodologies, languages, and the state of our industry are always entertaining and insightful. Uncle Bob tends to make a lot of analogies to other professions as a means to bring our industry to maturity, such as doctors, lawyers, etc. There’s a lot of valuable analogies to make there; Here’s a sampling:

“Do you think the only time musicians play their instruments is when they are on stage? Do you think the only time that batters hit balls is during games? Do you think the only time lawyers give a closing is at trial? Of course not. These people are professionals; and professionals practice! Professionals study the minutia of their disciplines. Professionals know all the little tricks and quirks. They know the history, the theories, the anecdotes. They know techniques and methods. They know good options and bad options and how to tell them apart. And they know all this stuff because they practice, practice practice.”


We as a profession must agree to a set of disciplines, a set of rules that we will follow. Uncle Bob tends to use the analogy of doctors always washing their hands rigorously before they do anything (and if they didn’t we wouldn’t consider them to be a ‘professional’). During an operation a doctor follows his discipline by not allowing fear to take over in the shadow of a deadline (literal). To this point in the history of software development, we’ve not really had a ‘profession’ in the truest sense of the word. Uncle bob says it best when describing the state of things:

“All we knew about what programmers did was that for weeks/months we threw meat in the room, and later code came out.”

One True Language?

In the past several weeks however, Uncle Bob made another observation which I find myself disagreeing with. He postulates that we may have reached the point in our industry where there are no more programming language paradigms to explore. His analogy to other professions this time around, is that of notation. Electronics, Chemistry, Biology, Mathematics, etc have agreed on common notations and therefor so should we, he says.

I have to disagree with this. In those professions the purpose of notation is purely communicating the same ideas in a uniform way. Source code is similar but there are some important diferences that make this comparison fall apart in my mind. The high-level languages (Javascript, Ruby, Java, etc) are optimized for safety, expressiveness, and productivity because they are used to create applications quickly and in a malleable way. They often make this tradeoff with performance. On the other hand low-level languages (C, C++, Go, Rust) are intentionally closer to the actual machine instructions that will be executed because tight control of things like memory and branching are important when writing things like embedded systems or hardware drivers.


Tagged: agile software craftsmanship software engineering languages

2017 Ben Lakey

The words here do not reflect those of my employer.