Live data from Hacker News

Steve Yegge: Notes from the Mystery Machine Bus

plus.google.com

1–10 of 186 posts

Re: Steve Yegge: Notes from the Mystery Machine Bus

#4
As Yegge mentioned in his post, this is a bit of an oversimplification. As a simple illustration, choosing a statically typed language like Java over Python is certainly a conservative trait. But then choosing Python over Haskell is exactly the same, just with the whole difference translated towards the liberal end of the spectrum.

Put 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

#6
before it started I knew it was going to be another typing rant. I think you continue to present a false dichotomy on typing, as well as missing some of the reasons people desire it.

In 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

#8
Interesting 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 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

#9

Interesting 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…

That list made me smile.

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

#10

Interesting 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…

It seems very subjective (and somewhat arbitrary) to assign labels of "conservative" or "liberal" to languages based largely on type safety. If this random blog post is taken as the definitive source of "conservative" vs "liberal" we get the following:

Twitter and Tumblr using Scala are "Hardcore conservative", while guys writing assembler for IBM mainframes are "Batshit liberal" ?

Post reply on HN