The end of dynamic languages?
An excellent article about why static types are necessary for successful, large projects has appeared on /r/programming.
This article is very on-point about most things. It brought back memories of struggling with exactly the same kinds of problems as the author describes in languages like Clojure.
The new generation of statically typed languages with proper type inference is simply objectively better, mathematics can not be argued with - and if you get the correctness benefits without having to explicitly type your code (Thanks Hindley & Milner!) then what reason is there to not use them?
Or so you would think. The author makes this hopelessly optimistic prediction:
This is my bet: the age of dynamic languages is over. There will be no new successful ones.
Unfortunately this is where he collides with reality and with what I call "the rampant anti-intellectualism" of the IT industry.
There are two main types of dynamic language users:
The ones who have never used a proper statically typed language with type inference. This is an interesting group. They are often happy in their dynamically typed world, and their experience with types is limited to languages like Java which - let's be honest - don't make the use of types either particularly nice or helpful. It is possible to get them to use statically typed languages by showing them that you don't need to have any overhead, and that in fact the correctness guaranteed by the compiler will make you more productive. (Computers are better at being strict than humans, afterall). However this takes a lot of time.
$thingand it works just fine!" (trust me, it doesn't). At the same time they walk around and call themselves geeks and/or nerds.
Group 1 is usually not very engaged in the debate and it is possible to reason with them. Group 2 is extremely vocal and prefers to loudly ridicule and/or ignore arguments for valuing software correctness.
Group 2 is also insanely productive, they produce framework after framework, more build tools than can be counted and a neverending stream of fundamental tutorials with varying degrees of minor inaccuracy. All this is very easy to do when you don't have to concern yourself with correctness.
The problem with that is that the flood of things produced by them overshadows the limited efforts of the other side. Until that changes I don't see an easy way for us to get out of this mess.
Go forth and write correct, statically-typed code!