The intersection between my facebook friends and people who read this blog is probably (relatively) large, but for completeness and historical record I’ll post my current facebook status:
“David is considering at what point he should start to wonder whether the problem might not be with the rest of the world.”
I get into a lot of arguments, or at least heated disagreements. Sometimes it’s because I’m wrong, but most of the time it feels like the world has reflexively thought “Oh, David has an opinion. Let’s disagree with it!”
This is very frustrating. Especially when I’m clearly right. Or, at the very least, when those I am arguing with are mouthing gibbering nonsense and ignoring my refutations of it.
This isn’t new either. It happens in whatever area I’m working. More so in programming than it did in maths, but I think that’s a function of which side of the discipline I interact with more than it is of the discipline itself.
Example points on which I’ve had arguments in ##java.
- First class functions are a good thing.
- Java’s type system is crap.
- Random access strings are a poor design choice for an immutable data structure.
- The non-trivial import features Java provides (* and static imports) are actually a good thing.
- JEE is bloated nonsense (ok, only about half of ##java disagrees with me on this point).
- Large scale ORM is a stupid idea, and causes the most amazing amount of grief.
- XML may be standard, but it’s still a rubbish format and should be avoided at all costs (*waves to the RSS readers*).
- Most recently (and inspired by this) the minor suggestion that being allowed to override void methods with non-void ones would be useful (response: Garbage arguments as to why this would be horrificially wrong and unsafe. It’s not.).
- Endless stylistic arguments that basically boil down to “Why the Java standard approach of writing procedural code and calling it object oriented because it lives in a class is a bad one”.
- Endless philosophical arguments that basically boil down to “Why ‘That’s not OO’ is the most useless criticism of an approach in the history of programming”.
As per the earlier quote, eventually I have to start wondering whether the reason I disagree with everyone might just not be because everyone else is wrong.
But then I come to my senses.
Firstly, these are mostly Java programmers. There are certainly competent Java programmers, but the average Java programmer is the very definition of blub. “Oh noes. It’s an anonymous function? What’s a function? How do I write that with a for loop???”. Even the good ones tend to be very set in their ways. Admittedly some of these arguments are with people who I’d otherwise have believed to be competent. However I’m going to perpetrate a no true scotsman fallacy^H make a highly reasoned distinction: If they were competent, they wouldn’t be spouting nonsense and then ignoring a detailed explanation of why they were wrong.
Secondly, the state of the the world in general and of technology in particular gives me irrefutable empirical evidence that the vast majority of people are idiots. It therefore stands to reason that a sizable proportion of the people I interact with are idiots. Not coincidentally, I get into arguments with a sizable proportion of the people I interact with.
So, in conclusion, I am correct. The problem is not with me, it is with the rest of the world. I should stop letting the opinions of idiots bother me.
By the way, this is not a deliberately over the top rant. You may be tempted to think that I’m being tongue in cheek or making some metaphorical or otherwise not entirely serious point with this post. I’m not. Deal with it.
It does seem to me that average ‘education’ tends to be a function of the community itself. Following that, I prefer to be a member of #haskell, since it’s the smartest community I’ve seen yet.
That said, a good indication of a clueful person is one who understands several languages and paradigms and can perceive good and bad points of all of them.
Even so, cognitive dissonance is hard to break. I too was a Java weenie for years.
I was perhaps a little harsher about Java users than I should have been.
My problem isn’t so much with people who use Java and no other. I’m not very impressed by the attitude, but it doesn’t in of itself bother me. My problem is (Perhaps ironically, given the content of the post) with people who are completely unable to see a point of view other than their own and will either automatically dismiss such or spew nonsense at it without being able to admit their error.
Part of my irritation with this attitude is of course that I’m very often the “view other than their own” in almost any circumstance. I freely admit to having weird interests and opinions.
You’re right though. #haskell is a hell of a lot better than ##java. :-)
David, I empathise with your position. I feel as if my intimate knowledge of Freenode ##java could have saved you. I have had similar experiences on that channel. Nobody there has a clue what they are doing – not even with Java.
It is is a bit like a religion; and those who not subscribe to it, can actually describe it better than its subscribers. This is exactly my experience with Freenode ##java. It is all ego promoting and bashing; rather than mature exchange of information and thoughts for the purposes of learning.
I hope you will accept a consolation of my invitation to other channels on the same network, such as #haskell and ##scala, both of which are extremely productive in terms of information exchange.
Personally, I view any conversation as successful if one or both parties come away having learned something, or at least, have something to reflect on.
There is one particular user on Freenode who has a seriously fundamental disagreement with me regarding type systems and I enjoy our exchanges, despite them being exhausting at times (on that note, after picking up TaPL, I am more convinced that I am right, but under-qualified to support my position).
Anyway, good luck in the future and try to stay away from marketing victims – ala Java users, especially Freenode ##java – it is a waste of time.
Tony Morris (dibblego)
Er, I just realised you’re already on those channels, aren’t you? Been stuffed yet? :)
Not stuffed yet, no. I did have a lot of pizza the other day though.
I may as well explain the source of my comments about your observed behaviour. (There will be a longer blog post on a related point coming up shortly). In conversations I’ve had or observed with you, you seem to suffer from much the same problem as ##java (albeit a more clued in version thereof) – you’re incredibly dogmatic about your position. It happens to be a position I somewhat agree with, but it’s still dogmatism.
The basic content of your arguments seems to be “If it’s not lazy, purely functional and statically typed, it must be rubbish!”. Granted you cite a number of reasons for your position, but you seem to give little thought or time to the opposing side of the argument.
Everything has its place, and everything has things to learn from it. Java is a pain most of its time, but it has its good points (many of which you can see refined in Scala). Monocultures are inherently fragile and doomed to failure. I’d rather program in Haskell or Scala than C or Java, but I’d be rather worried if the latter two didn’t exist!
Maybe I’m being unfair to you. As you’ve observed, we’ve not exactly interacted directly to any large extent. I’m happy to withdraw judgement for now. :-)
(And stop posting my rants to reddit dammit. ;-) )
You’re right that I hold what seem to be “dogmatic positions”. I do not hold these because I have an extension of self-worth into these ideas. They are simply ideas that are founded on evidence.
Given compelling evidence to the contrary, I’d happily shift. The only conversation I can recall is where I said “Java arrays are not co-variant”. You said “yes, they are” and provided evidence (iirc?). Then, I shifted position immediately.
In actual fact, “Java arrays are not co-variant” could be construed as true, since an attempt to do so is a runtime failure, which (as you might know) is indistinguishable from a type error.
Nevertheless, I didn’t intend this meaning when I said it and to maintain my position by stretching my intended definition is intellectual fraud.
The point is, at least I took something away from this exchange. It is this that I may be accused of being dogmatic about – my thirst for knowledge.
Regarding the position that I hold and you describe, yes I hold that position. I have much evidence supporting it. I have not seen any evidence that is compelling enough to cause a shift. I’m always open to that possibility.
Imagine if I am wrong, how great that would be!
Ok, maybe that bit about Java as well as Scala isn’t really true. I wouldn’t be at all worried if Java got dropped in favour of Scala.
I would however be worried if Scala abandoned mutable state and eager default evaluation.
Hm. I didn’t even *remember* the “Java arrays are not covariant” conversation. :-) Now that you remind me I vaguely recall it, but it’s certainly not one I was thinking of.
Ones I had in mind were much more along the lines of discussions of laziness in Scala. e.g. I made a comment that your repeated complaints about the lack of laziness in the language (I do agree that some parts of it – e.g. the comprehensions – need to be lazier than they are though) were flawed, as that degree of laziness in Scala would be very opposed to the way the language is intended, to which you responded something along the lines of “Anything other than default laziness is fundamentally flawed” (possible paraphrasing occurs).
Other conversations we’ve had include discussions about the performance of lazy datastructures in Java. I think we were both relatively reasonable during this argument though. :-)
“Anything other than default laziness is fundamentally flawed”
I still hold this position and have done for quite some time. I have also read literature supporting this position (am I bias?).
In any case, I’d be willing to present my evidence supporting this position in a civil manner if you think that it would be beneficial (for either of us).
Go for it. I’d be interested to hear your reasoning.