You Have to Experience It

August 16th, 2008  |  Published in commentary, erlang, productivity, REST, WS-*  |  14 Comments  |  Bookmark on Pinboard.in

I’ve noticed that frequently in technical discussions, the strongest disagreements seem to come from people with little to no actual experience with the technology they’re arguing against. How can that be? For example:

  • Test-First Development. I wish I had a dollar for every time I’ve suggested to a developer that writing their tests before or along with writing their code will make the code not only easier to write but also more robust coming out of the gate, and I get back responses like, “What? That’s crazy! How can you write tests before you have any code? That doesn’t make any sense!” Having an initial reaction like that isn’t such a big deal, as I’ve seen numerous developers who have such reactions actually try the “test first” approach and quickly become strong advocates who wonder how they ever did without it. The point is, though, that they actually tried it. Arguing with them before they tried it always turned out to be a total waste of time. No amount of words seemed to convince them. They had to experience it before they understood it.

  • Erlang syntax. Erlang is getting more and more attention these days, and rightfully so, but a typical reaction from those who have written little to no Erlang code is that the language’s syntax is too weird, too hard to read and write, etc. Is the syntax different? Yes. Is it weird or difficult? No, not at all — in fact, it’s actually very simple and regular when compared to popular general-purpose imperative languages. Spend a day or two writing some real Erlang code, and I guarantee you that any initial dislike you might have for its syntax will disappear.

  • REST. If you search the blog of any REST proponent, including this one, you’re sure to find all kinds of comments from detractors who argue against REST despite never having used it to develop any real systems. Similarly, the blogs of many WS-* advocates who have never tried using REST contain all kinds of reasons why REST can’t possibly work. Check out the comments in Damien Katz’s recent “REST, I just don’t get it” posting, for example; you have useful ones from those who have obviously used REST and understand its benefits, and then you have other comments that argue against REST while simultaneously showing a great misunderstanding of it. Those detractors would do well to read Bill de hÓra’s excellent response.

Also interesting about these three particular cases is that I don’t personally know of anyone who’s actually tried the approaches and decided against them. In a posting last November, for example, I asked for comments from anyone who had actually tried REST for real and with an open mind, but decided that it was inferior to WS-* and so abandoned it. Either nobody read that posting or no such people exist. I’m fairly confident it’s the latter.

There will always be arguments made by people whose livelihood is somehow threatened by the approach they’re opposing, but I don’t think that’s the source of all the opposing arguments. As developers we can’t possibly try everything, of course, because there just isn’t enough time. It’s inevitable that we’ll sometimes have to resort to researching an approach via only reading, questions and discussion and decide against it without prototyping. But ultimately we developers owe it to ourselves and our employers to keep ourselves objectively informed so that we can take advantage of new approaches whenever appropriate. When a whole bunch of smart developers have success with a particular approach, I don’t see how any responsible developer can actively and vocally oppose it without first objectively trying the approach and experiencing it firsthand.

Responses

  1. Mark Griffin says:

    August 16th, 2008 at 7:47 am (#)

    Steve,
    You hit the nail on the head with this but it’s not limited to a technology thing. We have become a nation of experts on stuff we have no experience in. Although developers can be some of the worst. We have always been opinionated here but it has gone to a new level.

    I saw a poll on CNN asking if the space shuttle was safe to fly. Last I checked most of us aren’t rocket scientist who worked or have worked on the space shuttle program. But those types of questions and the opinions coming back have become common place. Maybe the Internet has some role. It certainly has made it easier for folks to get their opinions out there, kind of like I’m doing right now. I think one of the big differences now though is the passion behind the opinions.

    “But ultimately we developers owe it to ourselves and our employers to keep ourselves objectively informed so that we can take advantage of new approaches whenever appropriate.”

    Couldn’t agree more. Developers really have to take ownership of this one themselves. Most businesses and IT shops are not setup and run to encourage this although some good ones do.

    markg

  2. Cedric Beust says:

    August 16th, 2008 at 12:37 pm (#)

    Actually, I have tried TDD and gave up on it after a while. I use it occasionally, but most of the time, it’s just not worth the trouble (I give more details why in our book). I’m not alone: TDD has been extremely hyped these past years so a lot of people around me have tried it and then been disappointed with the results.

    I think this is in great part due to TDD advocates, who are usually not very objective when they advocate this approach and fail to disclose the pitfalls and downsides of TDD. This ends up backfiring since people try it with very high expectations and end up disappointed.

    And I really wonder what TDD on Erlang would look like :-)


    Cedric

  3. steve says:

    August 16th, 2008 at 1:10 pm (#)

    @Cedric: the important point with respect to this posting is that you tried TDD before deciding whether it was effective for you — that’s the key. Your point about the advocates is also a good one; the fact that there are always going to be those who overhype technologies or approaches is another good reason for developers to try things for themselves before forming opinions.

    TDD with Erlang is very straightforward. There are a few unit testing frameworks available such as eunit, and it’s also easy to roll your own.

    Not to turn this into a TDD discussion, but I find that every time I employ test-first, the result is really, really solid, but if I get lazy and put testing off until afterwards, I invariably find that that’s the code that has all the bugs. I also find these results occur consistently regardless of which programming language I’m using.

  4. evgen says:

    August 16th, 2008 at 2:08 pm (#)

    I would point out that your “Test-first Development” point contains a subtle difference from that makes it more palatable to most programmers when compared to what is being promoted by true TDD zealots. Specifically the “or along with” clause. Writing test cases before you write a single line of code is often perceived by most of us as an exercise in programming masturbation, but writing the tests as you are writing the actual code is far easier to justify and practice.

  5. ali says:

    August 16th, 2008 at 2:38 pm (#)

    “Is it weird or difficult? No, not at all — in fact, it’s actually very simple and regular when compared to popular general-purpose imperative languages.”

    Actually, all of the complaints about Erlang’s syntax that I’ve read have come from Lisp and Haskell programmers. (Possibly due in part to sample bias: I read Lisp blogs and drink beer with Haskell programmers.) To a Lisp programmer, hearing something is “very simple and regular when compared to popular general-purpose imperative languages” is not exactly reassuring!

  6. mind says:

    August 16th, 2008 at 2:47 pm (#)

    python indentation. scheme parenthesis.

  7. Steve says:

    August 16th, 2008 at 4:49 pm (#)

    Add Vim to that.

  8. William Vambenepe says:

    August 17th, 2008 at 3:27 am (#)

    “Either nobody read that posting or no such people exist”. Sorry, that’s not a logically correct statement. Wish you had written a test for it before putting it out… ;-)

  9. occident.us » Blog Archive » links for 2008-08-17 says:

    August 17th, 2008 at 3:30 am (#)

    […] for 2008-08-17 You Have to Experience It :: Steve Vinoski’s Blog Wise words from Steve Vinoski. (tags: rest tech […]

  10. Robert Virding says:

    August 17th, 2008 at 6:20 pm (#)

    @ali: Actually, all of the complaints about Erlang’s syntax that I’ve read have come from Lisp and Haskell programmers. (Possibly due in part to sample bias: I read Lisp blogs and drink beer with Haskell programmers.) To a Lisp programmer, hearing something is “very simple and regular when compared to popular general-purpose imperative languages” is not exactly reassuring!

    I think you’re wrong there, most complaints I have seen about the Erlang syntax comes from Java/other OO programmers who complain that it doesn’t look like Java and who are worried that the world will come to an end because you can’t re-assign variables.

    Sorry for sounding a bit bitter here but I don’t understand why people bother to learn another language if their primary complaint is that it doesn’t look like what they are used to. I mean, the reason for learning another language is that it *is* different. I am in the middle of learning Python (finally) just because it isn’t Erlang, or C. Real C, K&R C. :-)

    Anyway for lisp programmers you can always use LFE, Lisp Flavoured Erlang, to get the benefits of both worlds.

  11. Aristotle Pagaltzis says:

    August 17th, 2008 at 11:29 pm (#)

    Another example I face all the time: people who know nothing whatsoever about Perl except for the absolutely certain fact that it’s write-once spaghetti line noise.

  12. WSDAC#16 - Behind NBC’s Olympics Website - Service Endpoint says:

    August 21st, 2008 at 12:34 am (#)

    […] Vinoski – You Have to Experience It – on having strong opinions without experience using a particular […]

  13. WSOAC#29 - REST Explained - Service Endpoint says:

    August 21st, 2008 at 6:58 pm (#)

    […] Vinoski – You need to have to experience, before you can comment on […]

  14. aleks says:

    August 26th, 2008 at 2:46 pm (#)

    About Erlang: I am just in the process of reading “Programming Erlang” (currently at the chapter on file processing, next to go on to TCP/IP and then OTP) and I can testify that the language is amazing! So many things have been done the right way: lightweight processes, message passing as the only way to do interprocess communication, exceptions and fault-tolerance… I believe that whenever something is being introduced that is so different, there are going to be negative emotional reactions, probably because the society as the whole is divided into vested interests. For companies it is money, and for programmers it the time they spent learning what is now their favorite technology.

    I remember how hard it was for me to decide to start learning C (that was waaay back!). How ugly its syntax was compared to Pascal!

    This touches on some universal truth about human society – Darwin had to endure personal attacks for trying to challenge creationist views of the scientific community of the day, Einstein had a hard time to get physicists to accept his theory…

    My point is that it is a waste of time arguing with people who try to start a flame war without knowing anything about the subject matter. It is even good that Erlang gets only this kind of negative reaction; that means that the language is promising and there is as yet nobody who has tried the learning it seriously but found it useless or faulty. For me, the question is whether Erlang is useful to make real-world software (which I am working on finding out for myself); how different from the mainstream it is is completely irrelevant. Ditto for TDD and REST.