That Steve Yegge is really good at starting conversations. Everyone including Steve thinks his essays are way too long, but they’re insightful and erudite and funny. His most recent outing, Notes from the Mystery Machine Bus, is all of those things, and worth plowing through to the end. It’s also more or less completely wrong.
Wrong Why? · Because, after providing a framework to help think about competing software technologies, Steve says, essentially, “It’s like politics, we’re not gonna all just get along, use whichever suits you”. But damn it, this is an engineering discipline, and for most projects we undertake, there should be some consensus Best Practices in terms of tools and architectures; where there aren’t, that’s a bug. In my profession as a whole, I mean.
Related · Steve’s rant provoked Yossi Krenin to emit What “Worse is Better vs The Right Thing” is really about, another long, valuable, mostly-wrong (albeit for different reasons) essay.
Things come in clusters; also in this one is Andy Boothe’s Should I Use ORM Or Not? Sure. (Andy’s blog’s title space reads: “SIGPWNED / killall -PWNED n00b”. Uh, OK.)
Liberal/Conservative · That’s Steve’s premise. That there’s this great big single axis that analogizes well with the way we think about politics, and that you can slot technology choices in along it. Assembler: Liberal! Erlang: Conservative! And so on. Steve’s over on the left, he says.
He’s also out of the mainstream, since he works at Google scale and not particularly on mobile. The big wide center of software development, these days, is medium-to-large apps and their mobile front-ends.
Best Practices · I claimed that they exist, independent of your software politics. To illustrate my point, here are a few; by way of example, I mean, not a comprehensive list:
When you’re building a Web app at less-than-Google scale, and time-to-market is important, the use of traditional “Enterprise” frameworks involving Java EE, Spring, and Dependency Injection is wrong. The use of dynamic-language-based Web frameworks is right.
Building systems which require a great deal of concurrent processing is to be avoided. If concurrency is required, mutable global state is wrong. The use of functional-programming techniques is required.
Rapid iterative deployment of systems, with each release focusing on a very small number of features is (when feasible) a sound methodology.
Static typing’s attractiveness is a direct function (and dynamic typing’s an inverse function) of API surface size.
Dynamic typing’s attractiveness is a direct function (and static typing’s an inverse function) of unit testing workability.
Obviously there are more. I’m not sure whose job it is to collect & curate them. Unfortunately I’m entirely out of touch with how Software Engineering is being taught these days. I wonder how much they think about Best Practices, and what they think they are?