The Wisdom of the Crowd

Written by richardeng | Published 2017/08/03
Tech Story Tags: programming | education | javascript | startup | smalltalk

TLDRvia the TL;DR App

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?

Popularity means that it’s easier to get paying jobs for those languages. However, such a mercantilist attitude denies you all the benefits of superior technologies such as Elixir, Haskell, Julia, Rust, and Smalltalk. Moreover, in some instances, popularity condemns you to unpleasant or more frustrating programming experience like in the case of PHP, JavaScript, and C++. Remaining with what is popular impedes future progress in the advancement of programming technologies.

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.

Slant can be very useful in choosing a good development tool. I found two intriguing questions at Slant that offered astonishing answers. First,

What are the “best” (productivity-enhancing, well-designed, and concise, rather than just popular or time-tested) programming languages?

And second,

What is the best programming language to learn first?

For the first question, the top ten results are (updated October 23, 2017):

  1. Smalltalk
  2. Python
  3. Nim
  4. Elixir
  5. Racket
  6. Scheme
  7. Common Lisp
  8. Haskell
  9. Rust
  10. Elm

And for the second question, the top ten results are:

  1. Python
  2. Smalltalk
  3. Racket
  4. Scheme
  5. C
  6. Ruby
  7. Lua
  8. Elm
  9. JavaScript
  10. Golang

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.

Why is JavaScript (#9) recommended as a beginner’s language??? JavaScript is a horrible first language for beginners. It will teach all kinds of bad habits. The language is demented in so many ways. Need I point out the numerous WATs and WTFs for which JavaScript has been the butt of industry jokes? JavaScript is rife with internal inconsistencies and traps (what Jeff Walker calls a “minefield”).

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.

Look, I get it. If you must do web programming, you must learn some JavaScript. (And I emphasize “some”; I do web development but I use very little JavaScript.) But that doesn’t make JavaScript a good teaching language.

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.


Published by HackerNoon on 2017/08/03