<story><title>Steve Yegge: Notes from the Mystery Machine Bus</title><url>https://plus.google.com/u/0/110981030061712822816/posts/KaSKeg4vQtz</url></story><parent_chain><item><author>cletus</author><text>As much as some commenters are (weirdly?) railing against this classification scheme I think the underlying idea that software conservatism is about risk aversion is essentially accurate.&lt;p&gt;Perhaps another way of framing this is to ask the question: are you optimizing for the best case or the worst case? This ultimately is a form of risk management. And I&apos;m not talking in the algorithmic sense, meaning complexity expressed as the asymptotically worst case. I&apos;m talking about people, software and ecosystems.&lt;p&gt;Let me illustrate this idea with Java.&lt;p&gt;- C++ has operator overloads. Java does not? Why? Because people might abuse them.  That&apos;s optimizing for the worst case (ie bad or inexperienced programmers). Properly used, operator overloading can lead to extremely readable code;&lt;p&gt;- Java has checked exceptions and uses them liberally (pun intended). C#, as one example, only has unchecked exceptions. Why? Philosophically the Java language designers (and many of its users) feel that this forces callers to deal with exceptions. Pragmatically (IMHO) it does not and leads to more cases of exceptions being simply swallowed. But again this is optimizing for the worst case ie programmers who should deal with a particular error condition but won&apos;t;&lt;p&gt;- Java has no multiple inheritance. Same story: it can be abused (&quot;it is known&quot;). But also mixins can be a powerful metaphor.&lt;p&gt;- Rinse and repeat for duck typing, extension methods, etc.&lt;p&gt;Putting Python two steps from Ruby strikes me as an interesting choice. I&apos;d say the difference is at most one.&lt;p&gt;I&apos;ll also agree that Google as a company (based on my own &lt;i&gt;much&lt;/i&gt; more limited experience than Yegge&apos;s) is firmly conservative. The style of writing Javascript that he refers to is about writing Google Closure code with all sorts of directives to aid the Closure Compiler (I describe Closure as putting the Java back into Javascript).&lt;p&gt;I also see a lot of Python code that isn&apos;t really Python. It&apos;s Java expressed in Python syntax rather than idiomatic Python and that is kind of sad.&lt;p&gt;Which isn&apos;t to say that any of this is necessarily bad (or good). It&apos;s just a (software) political viewpoint you need to be comfortable with (or at least can tolerate) or (to quote the South Park meme) &quot;You&apos;re gonna have a bad time&quot;.&lt;p&gt;One of the comments linked &lt;i&gt;Worse is Better&lt;/i&gt; [1], which is worth a read too.&lt;p&gt;[1]: &lt;a href=&quot;http://www.stanford.edu/class/cs240/readings/worse-is-better.html&quot; rel=&quot;nofollow&quot;&gt;http://www.stanford.edu/class/cs240/readings/worse-is-better...&lt;/a&gt;</text></item></parent_chain><comment><author>flatline3</author><text>Yegge took a massive shit on technical discourse, and if not countered, the ramifications thereof could be felt for &lt;i&gt;years&lt;/i&gt;. His influence is disproportional to his value, and I am extremely disappointed to see anyone here taking his emotional arguments seriously.&lt;p&gt;Unless firmly censured, I expect to see Yegge&apos;s ridiculous viral meme of &quot;liberal vs. conservative&quot; spread and repeated by inexperienced developers indefinitely.&lt;p&gt;If I had any respect for Yegge, I entirely lost it here. The question of how to write software should be founded in careful consideration of specific problem domains, experience and research, and studied approaches. It should not be founded in some gross politicized and emotional argument.&lt;p&gt;Yegge is not just wrong, his reframing of engineering decision making is dangerous, and his ridiculous and viral engineering-as-politics meme makes people dumber for having simply read it. I&apos;m disgusted with it, as well as any debate that seriously approaches his irrational appeal to emotion.&lt;p&gt;Yegge should be ashamed.</text></comment>
<story><title>Steve Yegge: Notes from the Mystery Machine Bus</title><url>https://plus.google.com/u/0/110981030061712822816/posts/KaSKeg4vQtz</url></story><parent_chain><item><author>cletus</author><text>As much as some commenters are (weirdly?) railing against this classification scheme I think the underlying idea that software conservatism is about risk aversion is essentially accurate.&lt;p&gt;Perhaps another way of framing this is to ask the question: are you optimizing for the best case or the worst case? This ultimately is a form of risk management. And I&apos;m not talking in the algorithmic sense, meaning complexity expressed as the asymptotically worst case. I&apos;m talking about people, software and ecosystems.&lt;p&gt;Let me illustrate this idea with Java.&lt;p&gt;- C++ has operator overloads. Java does not? Why? Because people might abuse them.  That&apos;s optimizing for the worst case (ie bad or inexperienced programmers). Properly used, operator overloading can lead to extremely readable code;&lt;p&gt;- Java has checked exceptions and uses them liberally (pun intended). C#, as one example, only has unchecked exceptions. Why? Philosophically the Java language designers (and many of its users) feel that this forces callers to deal with exceptions. Pragmatically (IMHO) it does not and leads to more cases of exceptions being simply swallowed. But again this is optimizing for the worst case ie programmers who should deal with a particular error condition but won&apos;t;&lt;p&gt;- Java has no multiple inheritance. Same story: it can be abused (&quot;it is known&quot;). But also mixins can be a powerful metaphor.&lt;p&gt;- Rinse and repeat for duck typing, extension methods, etc.&lt;p&gt;Putting Python two steps from Ruby strikes me as an interesting choice. I&apos;d say the difference is at most one.&lt;p&gt;I&apos;ll also agree that Google as a company (based on my own &lt;i&gt;much&lt;/i&gt; more limited experience than Yegge&apos;s) is firmly conservative. The style of writing Javascript that he refers to is about writing Google Closure code with all sorts of directives to aid the Closure Compiler (I describe Closure as putting the Java back into Javascript).&lt;p&gt;I also see a lot of Python code that isn&apos;t really Python. It&apos;s Java expressed in Python syntax rather than idiomatic Python and that is kind of sad.&lt;p&gt;Which isn&apos;t to say that any of this is necessarily bad (or good). It&apos;s just a (software) political viewpoint you need to be comfortable with (or at least can tolerate) or (to quote the South Park meme) &quot;You&apos;re gonna have a bad time&quot;.&lt;p&gt;One of the comments linked &lt;i&gt;Worse is Better&lt;/i&gt; [1], which is worth a read too.&lt;p&gt;[1]: &lt;a href=&quot;http://www.stanford.edu/class/cs240/readings/worse-is-better.html&quot; rel=&quot;nofollow&quot;&gt;http://www.stanford.edu/class/cs240/readings/worse-is-better...&lt;/a&gt;</text></item></parent_chain><comment><author>pheinberg</author><text>I don&apos;t think the main problem with operator overloading is &quot;abuse&quot;; I think it&apos;s that there&apos;s absolutely no way to know what a given clause of code might &lt;i&gt;mean&lt;/i&gt;, even if the overloading has been defined by excellent coders.</text></comment>