Type Wars: The Empire Strikes Back
Robert C. Martin (aka “Uncle Bob”) wrote an article in The Clean Code Blog entitled “Type Wars” back in May of 2016. In it, he clearly articulated the case that by using Test-Driven Development, or TDD, dynamically typed languages such as Smalltalk and Python can be just as safe and reliable as statically typed languages such as Java and C++. Said Uncle Bob,
You see, when a Java programmer gets used to TDD, they start asking themselves a very important question: “Why am I wasting time satisfying the type constraints of Java when my unit tests are already checking everything?” Those programmers begin to realize that they could become much more productive by switching to a dynamically typed language like Ruby or Python…
You don’t need static type checking if you have 100% unit test coverage. And, as we have repeatedly seen, unit test coverage close to 100% can, and is, being achieved. What’s more, the benefits of that achievement are enormous.
Therefore, I predict, that as TDD becomes ever more accepted as a necessary professional discipline, dynamic languages will become the preferred languages. The Smalltalkers will, eventually, win.
It’s widely recognized that dynamically typed languages are far more productive than their statically typed counterparts. Both anecdotally and statistically, Smalltalk is known to be the most productive of all languages.
Like Python, Smalltalk is supremely easy to learn. It virtually has no syntax. Smalltalk syntax can fit on the back of a postcard!
Moreover, by its very nature, it is easier to read and understand Smalltalk code. In conventional functional notation such as f(x, y, z), the arguments x, y, and z have no context for understanding their meaning or intent. Their required order is not clear, either. But in Smalltalk syntax, keyword messages provide reasonable context so that both the sequence and the intent of the arguments are clear: f: x keyword1: y keyword2: z, where keyword1: and keyword2: can be meaningful names.
Smalltalk programming is practically Zen-like. The language imposes virtually no cognitive friction at all.
Smalltalk has a wonderful “live coding and debugging” IDE/runtime environment that makes programming exceedingly quick and productive. You can make live changes to a running program and immediately see the results. This almost completely eliminates the edit-compile-test-debug cycle that hampers nearly all other programming languages. And it’s wonderfully easy to use. There is nothing else quite like it in the modern programming world.
Smalltalk’s image persistence allows you to save the execution state of an application and resume execution at a later time exactly where you left off! This is awfully convenient and a huge timesaver.
I’m glad to see that Uncle Bob has come to recognize the potential and bright future of Smalltalk. This is nearly a 180 degree turnaround from his famous RailsConf talk in 2009.
One thing I do have to take issue with is Uncle Bob’s assertion that Smalltalk ever “died” as a language. What does it mean to say that a language dies? That it’s no longer used at all? That it’s only used by a small cadre of nut cases?
In the world of IT, programming languages rarely die. Even today, Cobol is still kicking, albeit mostly in legacy situations. APL is practically dead but its progeny, such as J and K, live on. Forth is still a viable language for embedded applications. Fortran continues to be an important scientific language.
If by dead, Uncle Bob means that Smalltalk is no longer the premier programming language that it was in the 1980s and 1990s, then that’s hard to argue against. But then again, Smalltalk keeps company with many, many other languages that are far from mainstream, languages such as Ceylon, Clojure, Common Lisp, Crystal, Dart, Erlang/Elixir, F#, Haskell, Haxe, Julia, Kotlin, OCaml, Rust, Scheme/Racket. Are all of these languages dead???
Smalltalk actually enjoys more commercial usage than most of these far-from-mainstream languages. The European Smalltalk User Group, or ESUG, is a vast and active organization. The Pharo project is an exciting development path for the language. Redline Smalltalk promises to deliver Smalltalk for the JVM later this year!
The reports of my death have been greatly exaggerated.
~ Mark Twain
So let’s give Smalltalk its dues. Smalltalk is not only a survivor, but it thrives…to the extent that any non-mainstream language thrives. I contend that it’s a better programming language than most of these younger upstarts.