I find there are roughly two categories of languages that are worthwhile (based on my opinion of course).<p>1. Easy to write/produce: Languages/Framework that are easy to write because they are highly expressive (Haskell/Scala) or are very opinionated (Rails).<p>2. Easy to read/maintain: Verbose languages with excellent tools... cough... Java/C#.<p>As for reading code I don't know what it is about crappy verbose languages but I have yet to see Java/C# code that I couldn't figure out what was going on. Sure I have more experience with these languages and the tools (particularly code browsing with an IDE) make it so much easier... but so do most people.<p>The reality is language dilettantes think writing code is painful (as mentioned in the first paragraph by the author) but the real bitch is maintaining.<p>I feel like there must be some diminishing returns on making a language too expressive, implicit, and/or convenient but I don't have any real evidence to prove such.
There are a couple of implicit assumptions in the final paragraphs that I think should be made explicit. One was that we can evaluate these languages based on this experiment <i>with a single programmer</i>. Another was the not-clearly-defined term <i>strong work ethic</i>, by which I <i>think</i> he means someone who will strive to make the program work properly, not have horrible kludges, will avoid known problematic aspects of the language, etc.<p>The problem with these assumptions is that you don't run into situations like that often. You're far more likely to run into a team of people of mixed abilities, and with some languages, one or two of them will be able to inflict horrors on the whole codebase.
Temper the soldier rather than steel, and a club becomes a sword. A fairer example might be to compare the Nix and Guix package manager codebases, which aim to implement the same model of declarative system wide dependency management. The former is written by a university team in C++ and Perl, the latter by GNUcolytes in Guile Scheme and a touch of C.
My take away here is that it only pays to be a programming language dilettante if you are actually building a programming language, especially if it's a dedicated language for a new platform. Otherwise, you're mostly going to be subject to whatever's already mostly in use on your platform of choice, up to minor tweaks in that language over time.
Unfortunately, the real value of anything is almost entirely due to extrinsic factors. Air? Very valuable if you're underwater, on the moon etc.<p>Which human language? The one spoken by the people you need to communicate with is most valuable.<p>The first iPhone? Very valuable then; not today.<p>But some people love intrinsic value. And it's what they create that ends up having real value. They would say that intrinsic value is the only "real" value. They aren't very practical.
Give me Scala and a real-world problem vs someone using using PHP or Javascript and I will beat them on the initial write, and destroy them on the maintenance. I wouldn't use Scala professionally if I didn't believe this.<p>In the short term practical concerns can be more important than PLT ones - in five years' time I'm sure Idris will be a better language than Scala, but for some tasks it isn't yet - apart from anything else, you need a strong library/tool ecosystem before a language is truly useful. But that's a temporary state of affairs. If you were making this kind of judgement 20 years ago, and chose a popular language like Perl or TCL or C++ over a theoretically-nice language like OCaml or Haskell, how would you be feeling about that decision today?
This article isn't exactly wrong. Certainly, running on your target platform and having library support for the things you're trying to do are critical features for getting anything done, and a great language that lacks these things in the wrong tool for the job. That doesn't mean criticism of bad design choices in, say, Javascript is mistaken, or as the author describes it, "troubling". It just means you probably have to use Javascript anyway[0].<p>It also leaves out another reason for learning languages and using them for pet projects: it makes you a better programmer. The more good languages you know, and idioms from those languages, the more likely you are to recognize when an ad-hoc implementation of one of those idioms is the right solution to a problem in the language you're actually using.<p>[0] Though possibly only as a compilation target.
When doing serious development and hitting these issues, the workaround isn't to continue using a broken language. The workaround is to use a different language. The first question 'Does this language run on the target system that I need it to?' isn't a yes or no question.<p>Take a look at this example - <a href="http://blog.fogcreek.com/the-origin-of-wasabi/" rel="nofollow">http://blog.fogcreek.com/the-origin-of-wasabi/</a><p>A language that compiles to PHP and ASP, what a relief.<p>And for the contemporary result - <a href="http://blog.fogcreek.com/killing-off-wasabi-part-1/" rel="nofollow">http://blog.fogcreek.com/killing-off-wasabi-part-1/</a><p>When the platform catches up, then you can go back to mainstream development with a useful language.
<i>Even something as blatantly broken as the pre-ES6 scoping rules in JavaScript isn't the fundamental problem it's made out to be. It hasn't been stopping people from making great things with the language.</i><p>No, it hasn't been stopping them, but I guarantee you it's been slowing them down, at least a little. If nothing else, it makes the language a little bit harder to learn than it needed to be. I'll wager it also causes actual bugs that people have to spend time tracking down. It's true that those bugs can be avoided by proper discipline, but the brain cells required for enforcing that discipline could have been used for something else.<p>ETA: I agree with the author that a certain pragmatism is useful in selecting a language for a particular project, but I still think it's important to raise people's consciousness about warts in language designs. Doing so improves the odds that the next language someone designs to scratch their personal itch, but that happens to catch on for some reason, will have fewer such warts.
matlab? custom function was (or still is?) a one-function-one-file. i had bunch of function-files in a project directory. my mind was literally scattered.<p>then i moved on to languages that allow binding function to variable. i had much less files. simpler.<p>FP with anonymous function further frees my mind from naming variables so i have zero chance of mistyped function names. easier maintenance? sure<p>those didn't stop me from getting work done; however, i prefer to not waste time on weaker programming languages, although coding on those languages did broaden my mind (yeah, now i know they suck)
Kinda mean to Ruby.<p>Also misses the point, it's not the job at hand that matters, it's the 10000 jobs that keeping the thing alive that matters.