Blogger. Smalltalk evangelist. Retired software engineer. Avengers fan.
If you Google for “best programming languages,” you will find dozens of blogs listing their best recommendations. However, their “best” is always equated with “most popular.” Popularity is not the only metric for what is best. What about the quality of language design? What about the degree of programmer productivity? What about the fun factor? What about suitability for instructional or teaching purposes?
Slant is a product recommendation community with the goal of making it effortless to find the best product, app or game for you. No more spending hours doing product research with tabs full of forums and reviews.
What are the “best” (productivity-enhancing, well-designed, and concise, rather than just popular or time-tested) programming languages?
What is the best programming language to learn first?
For the first question, the top ten results are (updated October 23, 2017):
And for the second question, the top ten results are:
Smalltalk does extremely well in both, as it should. Smalltalk is an exceptionally good programming language. It is a supremely productive, beautifully elegant language. And while it’s not particularly popular at the moment, it is most certainly time-tested, as Smalltalk has been commercially used for over three decades by enterprises around the globe, including the likes of JPMorgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Orient Overseas Container Lines, Siemens AG, ALLSTOCKER, and so on. In my home country, Smalltalk is used by Communications Security Establishment (CSE), Canada’s national cryptologic agency.
In fact, in the early 2000s Smalltalk was used by the U.S. joint military to write a million-line battle simulation program called JWARS. It actually outperformed a similar simulation called STORM written in C++ by the U.S. Air Force. That by itself is an astonishing testament to the capabilities of the language.
Smalltalk is also superb for teaching programming. It was designed for teaching young people by Alan Kay and his team at Xerox PARC. Its syntax is so simple, it can be summarized on the back of a postcard! And since Smalltalk is a superlative object-oriented language, there is no better way to learn this very important programming paradigm.
The crowd is indeed wise. This wisdom shows up in the latest StackOverflow survey, as well. Under “Most Loved Languages,” Smalltalk shows up in clear second place (after Rust and before TypeScript, Swift, Go, Python, Elixir, and C#). This shows that people who’ve used Smalltalk love the language and are loyal to it.
It also shows, by inference, that the programming community is not aware of how good Smalltalk is. Most in the community wallow in ignorance over it. If they were to try Smalltalk programming, the language would very likely become popular.
I think that’s a very reasonable hypothesis.
There are, however, instances of crowd wisdom I find questionable. Why is C (#5) recommended as a beginner’s language? I can’t imagine why. It’s an archaic language rooted in the past. It’s very heavily filed-based with its use of header files for modularization; header files present all kinds of dependency headaches. Its reliance on manual memory management is at odds with modern programming practice; every other major language uses garbage collection or reference counting. Its use of memory pointers is problematic for beginners; pointers are dangerous. Its preprocessor and macro system is crude beyond belief. It is totally lacking in support for either object-oriented programming or functional programming, the two most vital paradigms in the industry today. C is most purely a procedural programming language; you can’t get any more anachronistic than that.
Yes, C can teach you about low-level computer architecture. So can assembly language. This subject is best left for later as an advanced topic.
Don’t get me wrong: I love C. In the course of my career, it paid for my early retirement! But I most assuredly wouldn’t recommend it as a beginner’s first language.
Despite all the “improvements” that ECMA TC39 have made to the language, they still haven’t repaired the fundamentally broken semantics. And they can’t, not without breaking the web. ES5.1, ES6, ES7, ES8…it’s all just putting lipstick on a pig.
And finally, I am bemused by the recommendation of Common Lisp (#7) as a productivity-enhancing, well-designed, and concise programming language. A number of famous programmers would vehemently disagree. If you like Lisp, I would strongly suggest Scheme or Racket, rather than Common Lisp.
Wisdom can be found in the crowd, but the crowd is not infallible.