30 ms·
As much as some commenters are (weirdly?) railing against this classification scheme I think the underlying idea that software conservatism is about risk aversi
by cletus 14y ago
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.
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'm not talking in the algorithmic sense, meaning complexity expressed as the asymptotically worst case. I'm talking about people, software and ecosystems.
Let me illustrate this idea with Java.
- C++ has operator overloads. Java does not? Why? Because people might abuse them. That's optimizing for the worst case (ie bad or inexperienced programmers). Properly used, operator overloading can lead to extremely readable code;
- 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't;
- Java has no multiple inheritance. Same story: it can be abused ("it is known"). But also mixins can be a powerful metaphor.
- Rinse and repeat for duck typing, extension methods, etc.
Putting Python two steps from Ruby strikes me as an interesting choice. I'd say the difference is at most one.
I'll also agree that Google as a company (based on my own much more limited experience than Yegge'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).
I also see a lot of Python code that isn't really Python. It's Java expressed in Python syntax rather than idiomatic Python and that is kind of sad.
Which isn't to say that any of this is necessarily bad (or good). It's just a (software) political viewpoint you need to be comfortable with (or at least can tolerate) or (to quote the South Park meme) "You're gonna have a bad time".
One of the comments linked Worse is Better [1], which is worth a read too.
[1]: http://www.stanford.edu/class/cs240/readings/worse-is-better.html http://www.stanford.edu/class/cs240/readings/worse-is-better...
- thebluesky 14y ago...except that most of the features you mention are in Scala in some for or another, yet he classifies Scala as "hardcore conservative"
- vetler 14y agoIt might be because of the Scala community, as he feels it is with Clojure.
- thebluesky 14y agoTumblr and Twitter don't strike me as a particularly conservative audience. Quite the opposite.
- brown9-2 14y agoI don't think Yegge is arguing anywhere that the language choice you make is tied into your overall corporate software "liberalness" or "conservativeness". The "software liberal" companies he lists - Facebook and Amazon - both make heavy use of C++ (a "moderate-conservative" language to Yegge) and Amazon also uses Java heavily (another "moderate conservative" language.
- jsolson 14y agoAmazon's a bit lighter on the C++ these days and has quite a bit of Ruby. As usual with Amazon, though, this is an area where it makes more sense to talk in terms of individual teams than the company as a whole. Some teams build almost everything in Ruby and are open to new languages. Others are pure Java shops. Other than Infosec approval, it's really up to teams to decide for themselves.
- dpritchett 14y agoTumblr and Twitter use Scala to solve their nice-to-have scalability problems using a services-based architecture. This is "core functionality must protected at all costs" conservatism. They still have PHP and Rails (respectively) up front. This is "we like to roll out new user-facing features regularly" liberalism.
- pheinberg 14y agoI don't think the main problem with operator overloading is "abuse"; I think it's that there's absolutely no way to know what a given clause of code might mean, even if the overloading has been defined by excellent coders.
- mark-r 14y agoI think it has more to do with expected outcomes. It's hard to argue that a + operator on a string or matrix class is a bad idea, because the outcome is intuitively obvious. For the other extreme see boost spirit for C++, which I'm sure was written by excellent coders.
- colomon 14y agoActually, it's not at all obvious what a + operator on a string does. Some languages think it means string concatenation. Others think it means convert the strings to numbers and add them.
- quatrevingts 14y agoIt's pretty obvious what it means: + means call the + function. Well what does that mean? Probably something additive. Just like if it were called "add". You don't really know in either case unless you read the function. The risk is that programmers might start using symbols in a way that is not obvious, but what is obvious is highly contextual. I'd prefer it not be the language designer who decides which operators are obvious enough to be allowed in my context.
- flatline3 14y agoYegge took a massive shit on technical discourse, and if not countered, the ramifications thereof could be felt for years. His influence is disproportional to his value, and I am extremely disappointed to see anyone here taking his emotional arguments seriously. Unless firmly censured, I expect to see Yegge's ridiculous viral meme of "liberal vs. conservative" spread and repeated by inexperienced developers indefinitely. 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. 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'm disgusted with it, as well as any debate that seriously approaches his irrational appeal to emotion. Yegge should be ashamed.
- smashing 14y agoBut look at all those comments Yegge is getting. He has long been an engaging, comedic writer with a very technical slant, but this really pushes him into the mainstream. People will look forward to the Steve Yegge show providing them entertainment in the same way Mike Daisey provides entertainment through The Agony and the Ecstasy of Steve Jobs.
- jeremiep 14y agoI couldn't disagree more with that. From reading his other essays, it's obvious the guy has a broader perspective on programming than most software developers. I believe it's experienced developers who will spread this because it takes experience in many different languages and paradigms to really understand what Steve described. I have different coding styles for Lisp, Haskell, D, Ruby and CoffeeScript for instance. The foundations of software development are generally not well understood. Otherwise the vast majority of software out there would be more robust by a few orders of magnitude. Steve at least offers a classification for the different styles found in programming communities today. He may not be right on spot, but at least it's a start.
- 14y ago
- taw 14y agoPython the language is not much more conservative than Ruby the language. On the other hand Python culture is ridiculously more conservative than Ruby culture.
- cbsmith 14y agoMaybe you are unaware, but Java's checked exceptions are generally seen as a mistake (only slightly less so than C++'s checked exceptions), and really only made sense for Java's originally intended purpose: embedded systems.
- signalsignal 14y agoFace it, Steve Yegge jumped the shark.