Hacker News new | past | comments | ask | show | jobs | submit login
Clojure is not Software Conservative (n01se.net)
81 points by liebke on Aug 10, 2012 | hide | past | web | favorite | 43 comments

These people try to debunk Yegge's idea by proving, point by point, how their language isn't conservative. But no matter how much counter-arguments and rational fodder they provide, it doesn't change a bit anywhere because what Yegge offers is a perception, viewpoint, an idea, a gut feeling of his with some semirandom examples for the sake of examples. And you can't attack someone else's idea or perception with rational weapons.

What matters is how well Yegge's idea strikes the chord here. "But it's an oversimplification!" Of course it is but that's not the point here. The point is Yegge thinks he recognized the same driving energy between the political conservatives and conservative programmers, and similarly to liberal ones. The mindset, the kind. What's interesting is if that rings true and if so, how well it rings true.

Basically, he seems quite right, give or take a bad example or two. There are these two opposing mindsets in the field of programming whose clashes are well-known to everyone and the conservative--liberal axis quite nicely divides the camps. It overlaps a lot with the static vs. dynamic typing war but like he said, the typing wars are basically a special case of conservative vs liberal.

I can certainly recognize these daring sword-swingers and the patient fortress-builders of the programming league.

Why is "striking a chord" what matters? Shouldn't being right matter? Gut feelings may be what matters to some people, but that doesn't make those people right and it doesn't make rational people wrong. People are very capable of valuing things wrongly. This mindset you seem to be advocating here has a disturbing similarity to Stephen Colbert's famous idea of "truthiness."

And that brings us to tonight’s word: Truthiness. Now I’m sure some of the word police, the “Wordinistas,” over at Websters are going to say, “Hey, that’s not a word.” Well, anybody who knows me knows that I’m no fan of dictionaries or reference books. They’re elitist, constantly telling us what is or isn’t true or what did or didn’t happen. Who’s Britannica to tell me the Panama Canal was finished in 1914? If I want to say it happened in 1941, that’s my right. […]

Do you know you have more nerve endings in your stomach than in your head? Look it up. Now, somebody’s going to say, “I did look that up, and it’s wrong.” Well, mister, that’s ‘cause you looked it up in a book. Next time, try looking it up in your gut. I did, and my gut tells me that’s how our nervous system works.

Now, I know some of you may not trust your gut — yet. But with my help, you will. The truthiness is that anyone can read the news to you. I promise to feel the news at you.

You're raising an interesting question that drifts to being off-topic but I'll post a reply anyway.

My point was that you can't attack a perception or an idea with rational tools made for splitting things to right and wrong. You can only either resonate with his idea or not. Those who do resonate, are able to explore the idea further. Those who apply the rational tools will obviously reach a rational conclusion but that per se still can't give them decision of whether they're in or out as for the idea. It's an idea of Yegge's and simply, it's out there. It's not right or wrong, it's just there for some people to maybe make something out of it.

When you ask if being right shouldn't matter, you're assuming quite a lot about what's right and wrong and what can be known about right or wrong. The world as we know it rarely works out with facts; the problem is that facts are only facts within some commonly agreed context, and they're only true and untrue within that context.

I don't know the origin or context of the text you quoted but the author seems to play with the idea of what can you know really. For example, how much of human history is factually 100% proven to be absolutely correct? If it's not absolutely, undeniably correct then it doesn't matter whether it's 95% correct or completely false; what's left is only what we decide to (collectively) think about it.

The history of the same event, such as a war, as described in two opposing nations can be very different—which one is correct? It's foolish to think there's only one and only description that is correct and even more foolish to think it must be the one which is "ours". The event affected both nations and how it hit them both is both correct. If we want to remove subjectiveness of the nations themselves and we assume there was a third, objective observer to that event, then his would be the third truth, not the one and only one.

So, to come back to Yegge's idea—or to just reduce it to the old static typing vs. dynamic typing divide—how can you determine which one is right? How can dynamic typing be more right than static typing? How can you determine whether liberalism vs. conservatism applied to programmers is right or wrong? You can only argue for a specific point, such as whether frowning at macros makes Clojure conservative or not, but you can't extrapolate from that to make a decision of whether Yegge is right or wrong. It will come down to whether it resonates with you, or "strikes a chord", or not. If it does, then you don't care about the details and if it doesn't, then you're just arguing for nothing since you're not into his idea anyway.

You know, I got my brain into a serious knot trying to understand that quote while assuming "thruthiness" was related to the "truthy" of implicit boolean conversions as in Javascript...

Basically, he seems quite right, give or take a bad example or two.

I think he made a mistake by trying to extend the liberal/conservative dichotomy from programmers to languages. His obsession with static typing versus dynamic typing (which he apparently sees as the universal Manichean struggle underlying every single programming question ever) causes him to label languages in a way that contradicts the way he labels programmers. This is especially apparent right now when many of his "liberal" languages (notably Perl 5, PHP, Python, Visual Basic, and Javascript) are safe, established, corporate-friendly languages that any timid Blub programmer would tackle without anxiety, while many of his "conservative" languages (notably Scala, Clojure, Erlang, ML, and Haskell) are widely considered alien, exotic, and high-risk (from both a project management standpoint and a career standpoint.)

Perhaps he sees no contradiction in conservative languages like Haskell appealing mostly to risk-tolerant programmers and risk-averse programmers feeling quite at home with liberal languages like Javascript, but I find it incoherent.

I agree with you. Yegge's core mistake was to use political terminology as a descriptive tool for any topic other than politics. The political labels "liberal" and "conservative" are loosely defined, dependent on context, artificially limiting, and prone to fluctuate from one electoral season to the next.

I'm not going to submit this as a separate link, but here's Haskell: http://blog.ezyang.com/2012/08/is-haskell-liberal-or-conserv...

I want to make a bit of a snarky comment about everyone rushing to disclaim being conservative, but I think this really reflects the fact that the distinction isn't a very useful one for languages, and very dubious even for communities. If it's useful at all, which I don't particularly believe, it's only for specific people.

In this case I think the snark would be accurate. I was surprised at how the snark , "What are you? Republican?" was tossed about at my former search company. Thematically there is power in labels, and Yegge goes out of his way to attach the 'bad' label to things he doesn't like. Not much different than 14 year old boys calling each other gay on game chat boards. Take a label that is offensive, associate it with something you don't like, paint people who like what you don't like with a label that they don't like. Class warfare at its most middle school.

There is a reasonable point, which is you can't argue with someone who doesn't share your definition of 'good' and 'bad'. But the labeling thing is unfortunate.

"Take a label that is offensive, associate it with something you don't like, paint people who like what you don't like with a label that they don't like."

You forgot "Then sit back and watch the fun as otherwise intelligent people buy into your frame and scramble to defend their favorite languages on HN, Twitter, blogs etc".

I am in awe of Steve Yegge's ability to conjure up an internet storm at will. Everybody gets what he is upto, but feel compelled to respond anyway.

This. This. This.

I agree with your sentiment. But using the words "Class warfare" to describe it doesn't help your cause. It is equally a bad labeling of valid discussion points.

It was in fact already submitted by somebody but hasn't caught a lot of attention: http://news.ycombinator.com/item?id=4367807

What's the motivation for everyone to add noise to Yegge's obviously broken claim that you can reason about software engineering in such a one dimensional way?

He has a lot of visibility, and makes an argument that many people disagree with. Also, on the Internet there is no such thing as "obvious".

It's easier to add to the noise than it is to write about one of your own ideas. It's even easier when you're replying to a well know voice so you can ride on their coat-tails and be on the front page of HN, proggit, etc.

Steve is wrong about macros - they don't compose as well as functions, and that's why people don't recommend them where a function works just as well.

As far as adding new things into the language, though, Clojure does tend to be conservative. There is a lot of thought (hammock time) that goes into each potential addition, and whether the increase in complexity is worth the increase in functionality.

This seems like a good thing to me, but maybe that just means I'm a software conservative (I doubt it, since I also love Ruby).

You don't use macros to inline functions or anything. You use macros to do things functions can't do. In a program written by the Lisp mindset, the amount of code covering macros can easily grow to greater than marginal. It's just that you're not writing functions, you're writing translation rules for your own language where you can solve the problem more easily.

Exactly. When he says

    So under its expressive covers, everything about Clojure is strongly
    conservative, with a core overriding bias towards protecting
    programmers from mistakes.
he's probably talking about macros and the focus on immutability/FP. With respect to macros, I really don't get why he interpreted Christophe Grand's presentation like that unless he walked away after the first two slides or so (and even then it's a stretch). Rich Hickey debunked his statement on macros very well here on HN (http://news.ycombinator.com/item?id=4366661) - the view Christophe expresses is precisely the opposite of conservative: it's about increasing composability and flexibility, very liberal attributes by Yegge's own definition. Although "protecting programmers from mistakes" is definitely one side of FP/immutability, I seem to recall Rich and others arguing for it more in terms of reducing the cognitive overhead of programming by reducing incidental complexity - not having to hold as many things in your head while thinking about your system allows your brain to handle bigger systems and move faster. Removing mental obstacles for the programmer who is impatient to create furiously seems pretty damn liberal to me.

I had fun reading Yegge's post, as with most of his posts. But the part about Clojure really missed the mark. Which is a shame, given Yegge's arguing for lisp in the past and Clojure being a really cool, viable lisp for getting stuff done in the 21st century.

Agreed. I consider myself most comfortable in Python and I find myself uncomfortable with Clojure's liberal side more often than it's conservative side. I think I still have a lot to learn from and about Clojure but I don't think it fits very well into Yegge's spectrum. The author is correct that the most important thing about Clojure is Rich Hickey's philosophies on simplicity in code. I don't find simplicity to be a very political topic.

Have you seen the US Tax code?

Yes, and if you told me it was complex because of either the conservatives or liberals, I would call you an ideologue.

Leaving aside the question about whether the suggested division between "liberal" and "conservative" is a valid one... It seems like people are not happy for their favorite language being labeled as "conservative". I don't understand why. Depending on the problem domain, "conservative" and "liberal" approaches can have their benefits and drawbacks. I used to work at a company developing software for electronic trading. If anyone said something along the lines "bugs are not a big deal", they'd get fired pretty fast, because actually bugs can be quite a big deal when they cost your customers hundreds of thousands of dollars (if not millions). On the other hand, a social networking site could probably allow such approach. Facebook seems to have embraced it: yesterday I actually had to post a comment about five times before it finally appeared. Now I know that what I witnessed was probably a result of a "liberal" approach to development :)

There are a few features from Yegge's conservative list that I wish Clojure had. For example there is some very interesting work going on to support optional static typing. https://github.com/frenchy64/typed-clojure

But this article was not about what is desired, but about what is -- Clojure is not currently very "conservative" according Yegge's definition, for better or worse.

I don't think it's the labels that are the problem for the 'conservatives'. As I said on the other post, I fully expected that the 'liberals' like myself would say 'oh, what an interesting distinction', where the conservatives would say 'that distinction is bullshit, you're just covering for the people who are wrong by calling them liberal'.

I think the real issue is that the 'conservatives' do not see what Yegge describes as the 'liberal' position as being a legitimate alternative at all, labels or not.

But most of the people in the discussion are those people writing sexy new programming languages, so of course they don't want to be labeled as conservative. The real programming conservatives are probably not even listening for the most part.

And I don't understand the knee-jerk reaction against being labelled software-conservative. Yegge's overarching message, where conservatism is employed to mitigate engineering risk, is a Good Thing. Also, Yegge's specific examples of liberal features are astonishingly bad.

Half of the liberal features illustrate the worst aspects of language (non-)design. Automatic type conversion, stringification, semantic nulls? Sounds exactly like PHP and Javascript.

The other half of the liberal features are either inconsequential, or actually significant to conservative languages. Bitstrings, function overloading by arity, a global namespace, convention over configuration? Sounds like Erlang/OTP. Preprocessing and DSLs? Try ML (Meta Language), not to mention macros in Lisp-likes.

I don't think pointing to surveys showing few Clojure users came from Haskell/ML, is sufficient to disprove Yegge's assertion. If a language's designers came from camp A, yet the majority of users came from camp B, that does not mean the language is not strongly influenced by camp A.

That's a fair point, but it was an attempt to inject actual facts into a conversation full of generalities.

What the survey does suggest is a lot of people who used "non-conservative" languages in the past are now using Clojure. Maybe they all decided they wanted a "conservative" language, or maybe they think Clojure is "non-conservative".

Or maybe these labels don't have much meaning after all.

A correlation between people who use a language and the previous languages they have used does not imply a correlation (or intellectual/philosophical inheritance) between the language under discussion and the previous languages used.

I've never used Haskell, so I can't speak the specifics of the observation. But I don't believe much can be inferred from the observation alone.

"A correlation between people who use a language and the previous languages they have used does not imply a correlation (or intellectual/philosophical inheritance) between the language under discussion and the previous languages used."

And yet, that is exactly the basis for Yegge's point: attributing a philosophical label based on a perceived (and incorrect) background for a group. Goose, gander. Kettle, pot.

Maybe these labels don't have much meaning after all.

> If a language's designers came from camp A, yet the majority of users came from camp B, that does not mean the language is not strongly influenced by camp A.

To me the survey suggests that the division between camp A and camp B is immaterial to the decision to use the language. Obviously the designers think the language is worthwhile, otherwise they wouldn't have made it. Obviously the users think the language is worthwhile, otherwise they wouldn't use it.

Since both find value in the language, this political/conservative spectrum is about as valuable as judging physical fitness by hair color.

Rich Hickey, the designer of Clojure, isn't from Haskell/ML background. His background is C, C++ and Java.

With a little Lisp, incl. two Java<->CL attempts: http://jfli.sf.net & http://foil.sf.net

Did nobody tell him about http://common-lisp.net/project/armedbear/?

That's a much better response.

Already Yegge has fouled the technical discourse. Sad.

Why do people think it's useful to import badly fitting, emotionally loaded labels from politics into software? Behold the stampede of engineers running away from the "conservative" label!

Maybe a political conservative would have been able to construct the argument in a way that would make developers proud to label themselves programing conservatives.

Let's ignore political extremists for the moment.

I think the definitions of political conservative on Steve Yegge's post are pretty far wrong. If those are the commonly held beliefs among the liberal side, well, that seems like a stunning level of misunderstanding.

I think the only thing colloquially conservative about "conservatives" is that they are colloquially conservative in the amount of power the wish to cede to government.

Being a political conservative today in the US, in an ideal case at least, is about freedom and choice. Generally held beliefs are that free-markets are good in many cases, too much regulation is as bad and sometimes worse than too little, and that government is in very many cases a terribly inefficient use of resources.

In principle they do not believe in domination of the masses by a vast corpus of rigid rules. They believe a minimal set of overarching rules, and leaving much to freedom and choice.

That's conservatism in principle, from my view as a conservative. The reality of course is different, particularly for "conservatives" in office or seeking office. I personally have a hard time distinguishing one brand of politician from another.

And there are a vast array of people with sometimes bizarre beliefs that associate with one side or the other of the political spectrum, and the conservative side has plenty of them, and liberals do too.

I don't know for sure how this 'brand' of conservatism would apply to programming. I would suggest though, they would want as much freedom to express themselves as they could get.


--The idea of strong typing would rub conservatives the wrong way.

--A rigid and inviolable set of rules and procedures and processes for how code may be written.

I'm not sure what else. My programming experience is pretty amateur. My favorite languages to work in are C, Python, and Clojure. So maybe that says something.

You are speaking exclusively of the fiscal side of the current use of the word "conservative", which currently makes no sense from the point of view of the non-political definition of the word "conservative", because it would take a fairly radical set of policy changes to achieve those goals. This is why "libertarian" is a much better word for that type of "conservatism" - it refers to the goals themselves, not to the amount of policy change necessary to achieve them. However, on the social side of modern "conservatism", it truly is about conserving status-quo in many cases, even when that approach is at odds with "freedom and choice", (gay marriage, drug laws, etc.)

tl;dr; Yegge's use of the word "conservative" is not wrong, but rather the use of the word "conservative" to describe the (usually exclusively-) fiscally libertarian portion of the modern "conservative" movement is wrong.

Ok, I read more of Yegge's post and need to reply again:

There are definitely cases where the list of 9 software-conservative points should apply. These are the cases where bugs hurt or kill people... i.e. Software on airliners, software running important medical equipment, traffic signaling, etc...

I guess I was speaking from a less "mission critical" development point of view.

But I am a political conservative! Maybe a political conservative with more impressive rhetorical skills would have done better...

But wait, that doesn't make sense because this supposedly has nothing at all to do with political points of view.

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact