<story><title>Extremist Programming</title><url>http://blog.ezyang.com/2012/11/extremist-programming?</url></story><parent_chain></parent_chain><comment><author>tikhonj</author><text>I agree with the blog&apos;s premise: &quot;extremist&quot; languages are great for language and for research. So this whole rant is not directly related to the post&apos;s central thesis. Instead, it&apos;s about the assumptions most people have whenever this topic comes up.&lt;p&gt;What I&apos;m a little annoyed with can be summed up with a single banal and overused phrase: &quot;the right tool for the right job&quot;.&lt;p&gt;For one, this phrase really doesn&apos;t say all that much--it&apos;s basically a tautology. Yes, using the right tool would be good, but with programming languages, it&apos;s rarely obvious what the right tool &lt;i&gt;is&lt;/i&gt;! It&apos;s just a specialized version of the advice to &quot;make the right choices&quot;, which is not much advice at all.&lt;p&gt;Another problem is that people inevitably ignore how much programming languages overlap. Virtually any languages worth comparing are going to be &lt;i&gt;general-purpose&lt;/i&gt; languages. Choosing between a functional language and an OO language is not like choosing between a hammer and a screwdriver to pound in a nail, it&apos;s more like choosing between different types of hammer. In a world where hammers can do anything. (I don&apos;t know enough about carpentry to extend the analogy properly.) There are very few applications where one language clearly fits and another is clearly unsuited--and if you&apos;re in a vertical like that, the question just won&apos;t come up in the first place!&lt;p&gt;Another thing that comes up is people assuming that a multi-paradigm language has the benefits of &lt;i&gt;all&lt;/i&gt; the paradigms it supports. I&apos;ve found this is never the case. Even very multi-paradigm languages tend to favor one paradigm or the other more. And even if they didn&apos;t, there are benefits to being consistent. You can do much more by being functional &lt;i&gt;everywhere&lt;/i&gt; than you can by merely supporting functional programming in some places. Any mix of paradigms is necessarily going to be a compromise, and the advantages of prioritizing one main paradigm can outweigh the flexibility of supporting more than one to any large extent. Doing one thing, and doing it well, is a powerful idea that doesn&apos;t stop applying in designing programming languages.&lt;p&gt;Now, I&apos;m not leaning one way or the other here in any comparison of languages (I&apos;m sure my biases are pretty evident and show through, they&apos;re just not germane to this comment); I just think that summarily dismissing a language for being too focused or too &quot;extremist&quot; or not multi-paradigm is rather short-sighted. Also, often, unless you&apos;ve tried doing something in a language yourself, don&apos;t assume it&apos;s more difficult than what you already know. There is much &quot;common wisdom&quot; about (like &quot;functional programming is bad for GUIs&quot;) which is often more &quot;common&quot; than &quot;wisdom&quot;.</text></comment>
<story><title>Extremist Programming</title><url>http://blog.ezyang.com/2012/11/extremist-programming?</url></story><parent_chain></parent_chain><comment><author>jonsen</author><text>Another extreme direction to try out is the direction toward the machine. The value of trying out assembler programming may not have similarly direct benefits. But I personally find it a great general advantage to have detailed knowledge of under which practical conditions your program must run. To know that whatever fancy high level constructs you are making use of, you are always building a giant state machine where space is traded for time.</text></comment>