Steve Yegge: Notes from the Mystery Machine Bus
plus.google.com
Steve Yegge: Notes from the Mystery Machine Bus
1–10 of 186 posts
Re: Steve Yegge: Notes from the Mystery Machine Bus
#2Re: Steve Yegge: Notes from the Mystery Machine Bus
#3Re: Steve Yegge: Notes from the Mystery Machine Bus
#4Put another way, it's the political liberals who came up with OSHA (I hope--I'm somewhat ignorant of the actual history :P). A liberal or conservative outlook is not characterized by some particular processes or tools--it's characterized in an entirely relative way. The conservative approach is in choosing the familiar over the novel and in avoiding change. The familiar could be safer--Java vs Python--or it could be less safe--Java vs Haskell. I've talked to some ardent Java adherents, and they have lucid cases for not going over to Python or Ruby or Clojure or what have you. But--critically--these cases are virtually identical to their cases against going over to Haskell or Scala. There are differences in details, of course, but it's a difference in degree rather than kind.
Another even more extreme example is TDD. In particular, the arguments people have against adopting TDD are essentially exactly the same as I've seen from TDD supporters against using formal methods. Once again, some details differ, but the core idea seems to remain: some people are inherently wary of change.
It's also interesting to note how Yegge categorizes certain concepts in multiple "buckets". Either he's just being inconsistent (which is plausible) or he's making a deeper point: it's not about the particular concept, it's about the philosophy behind it. If he wasn't making that point, I've made it for him :).
That is, anything called "something calculus" is conservative, but lambdas (e.g. lambda calculus) aren't. Type-based functions overloading (like type classes, I guess) is conservative, but Scala implicits are liberal.
In my view, the languages that are the most conservative (at least in my part of the world) are Java and Python. Why? Simple: they are the default language for almost everyone I know. You're at an enterprisey company? You're probably using Java. You're at a startup? You're probably using Python. You're using C or Scheme or Haskell or Erlang? You're crazy. (I should note that I don't know very many people in systems or embedded programming, so my view is obviously rather biased.)
All this rambling (I certainly see why Yegge always writes long posts) has left me with a fairly concise conclusion. Namely, mapping programmer attitudes to a spectrum vaguely inspired by politics is a reasonable idea. Sure, the reality is that there is no total ordering so a one-dimensional representation is fundamentally lacking. However, it's good enough to give some insight.
But I would not map technologies there based on the technologies' innate traits. Rather, I would map them there based on the thinking behind the people who use them. This is similar to how--if you don't know the background--it's hard to guess which political party supports which regulation. Gun control is the opposite of liberal, but it's exclusively heralded by liberals; deregulation seems liberal but, of course, isn't. Yet, on other issues, people on either end of the spectrum behave as expected!
This is why I think languages like Java and Python are fairly conservative. Not because they try to offer some sort of safety but because they are safe choices. This is also why I would probably place C# as significantly more "liberal" than Java--it may be the most "conservative" .NET language, but it is far less afraid of embracing new ideas than Java. So that end is simple: at least for enterprisey companies and startups, it's populated with Python and Java. But what about the other end? I think this is where the languages that most people consider too crazy to use go. Haskell, Scheme, Erlang and so on. Only very brave--very liberal--companies are going to use Haskell or Scheme in actual production. Too many weird features. Even the sentence "Scheme in production" just sounds weird.
So it's not a matter of wanting handrails (Haskell) or not even wearing a helmet (Scheme); rather, it's a matter of being willing to choose something more advanced over something more understood.
Re: Steve Yegge: Notes from the Mystery Machine Bus
#5Re: Steve Yegge: Notes from the Mystery Machine Bus
#6In particular, I like typing as machine readable documentation, that makes IDEs simpler and more accurate in code navigation and refactoring. Dart in particular shows this false dichotomy really well, but having a type system for human and machine readable docs, making the IDE experience far more pleasant, but which can be turned on or off. Unsound, untyped, programs can still run. Yes, dynamic languages can have nice IDEs too (Smalltalk), but they are harder to engineer.
In terms of optimization, typing is a must for many types of hard real time programming. You can bet that the Mars Curiosity rover isn't using a garbage collected dynamic language. Nor are the inner rendering loops of most mobile games or console games. (Lua is another story when it comes to actual game logic)
Lots of bold claims have been made for Javascript JITs for example over the years, include a lot of hype about tracing JITs, but the reality is, Javascript still doesn't even come close to native performance, and it's hideously slow on mobile platforms in comparisons, with basic, idiomatic programming (e.g. dictionaries with fields) having terrible numeric performance. All this has actually served to threaten the Web with a native-takeover because we don't have a fast web language CPU and memory efficient on these devices.
I don't think that Tim Sweeney or John Carmack are prematurely optimizing when they decide to write a game engine(rendering) in C++, because experience has taught them that it is highly unlikely they'll be able to optimize a dynamic language implementation later to a satisfactory level.
I think many people use a mix of languages depending on the context. I certainly wouldn't write a web service in C++, nor would I write a 3D game in BASIC. I wouldn't use anything but Perl to masage text files, and I'd use R for data analysis.
Re: Steve Yegge: Notes from the Mystery Machine Bus
#7In my estimation, if the answer here is unclear, then this metaphor breaks hard.
Re: Steve Yegge: Notes from the Mystery Machine Bus
#8Assembly language: Batshit liberal.
Perl, Ruby, PHP, shell-script: Extremist liberal.
JavaScript, Visual Basic, Lua: Hardcore liberal.
Python, Common Lisp, Smalltalk/Squeak: Liberal.
C, Objective-C, Scheme: Moderate-liberal.
C++, Java, C#, D, Go: Moderate-conservative.
Clojure, Erlang, Pascal: Conservative.
Scala, Ada, OCaml, Eiffel: Hardcore conservative.
Haskell, SML: Extremist conservative
Woud be nice to overlap James Iry's chart[1] with it...
[1] from http://james-iry.blogspot.com/2010/05/types-la-chart.html
Re: Steve Yegge: Notes from the Mystery Machine Bus
#9Interesting positioning of languages: Assembly language: Batshit liberal. Perl, Ruby, PHP, shell-script: Extremist liberal. JavaScript, Visual Basic, Lua: Hardcore liberal. Python, Common Lisp, Smalltalk/Squeak: Liberal. C, Objective-C, Scheme: Moderate-liberal. C++, Java, C#, D, Go: Moderate-conservative. Clojure, Erlang, Pascal: Conservative. Scala, Ada, OCaml, Eiffel: Hardcore conservative. Haskell, SML: Extremist…
The reason it made me smile is that whilst I find myself agreeing with the whole conservative/liberal thing (I despise JavaScript, and yet fall firmly into the Hardcore liberal camp), my mind is still screaming "I'm unique/unclassifiable/obviously an outlier," and had to wonder how much a). my experience and b). my liking for Steve Yegge influences that juxtaposition.
Re: Steve Yegge: Notes from the Mystery Machine Bus
#10Interesting positioning of languages: Assembly language: Batshit liberal. Perl, Ruby, PHP, shell-script: Extremist liberal. JavaScript, Visual Basic, Lua: Hardcore liberal. Python, Common Lisp, Smalltalk/Squeak: Liberal. C, Objective-C, Scheme: Moderate-liberal. C++, Java, C#, D, Go: Moderate-conservative. Clojure, Erlang, Pascal: Conservative. Scala, Ada, OCaml, Eiffel: Hardcore conservative. Haskell, SML: Extremist…
Twitter and Tumblr using Scala are "Hardcore conservative", while guys writing assembler for IBM mainframes are "Batshit liberal" ?