Wednesday, October 5, 2011

JavaOne 2011: The Diabolical Developer (Redux)

There was an hour between sessions before the beginning of Martijn Verburg's "The Diabolical Developer (Redux)" (25303) in Divisidero in Parc 55 Hotel. I wanted to attend this presentation for three reasons: the abstract appealed to me, I had read good things about it, and I wanted to meet Martijn after trading several blog comments with him. Incidentally, there is a recent Kevin Farnham video interview of Martijn available at

Here is the abstract for this presentation:

The Diabolical Developer hosts this in(famous) session in which he challenges everything the modern Java developer holds to be good and true. The Java developer today stands in a sea of APIs, frameworks, best practices, software development methodologies, and more. The developers who sent mankind into outer space did not have all of this. Makes you think, doesn't it?

The session takes you through practical steps (the right attitude, self-learning, using the right tools, sticking to Java 1.4, and the like) you can take to free yourself from the chains the industry has put on you. You will leave empowered and will get back to doing what you love the most, hacking Java code.

This irreverent presentation was just as the abstract would lead you to expect. With great sarcasm and tongue-in-cheek, Martijn challenged some of the trendiest software development technologies and methodologies and called into question some of the "best practices" software development preaches. The gist of this presentation is that developers should "think about the problem, think about what they're doing, and use common sense." Martijn proves this point through use of outlandish (sometimes) statements that consist of "half-truths, outright lies," and some things he actually believes. He left it to audience members to decide which of his points fell into each category and in this way encouraged developers to think for themselves rather than blindly following what has been preached and sold to them.

I am intentionally not repeating all of Martijn's points that are either half-truths, outright lies, or things he truly believes in because part of the appeal of his presentation is the delivery and the shock value. Instead, what I plan to do in this post is pick a few of his points that I believe (and at least for me) fall into the half-truth or "I believe" categories.

This presentation was packed and, fortunately, was going to be offered again in the subsequent section. I don't think anyone left once it started except for the one guy who left and came back. Martijn warned attendees at the beginning of the session that they should leave if they were Agilists, Software Craftspeople, Oracle employees, or "sensitive." I found it humorous that Martijn invited anyone who wanted to leave to do so after explaining that his presentation would have none of the popular topics (JVM bytecode, Clojure, or Scala) of this conference.

Martijn talked about vi being the only editor one needs to know. I know that this is only a half-truth because I know that he uses NetBeans. That being stated, I have blogged before on advantages of using vi (or derivatives) and definitely find times when basic knowledge of vi commands has proven handy and productive.

Martijn "recommended" several practices as part of mortgage-driven development. These practices tend to be the same as those for resume-driven development (or "CV++ development" in the UK) and involve things like hoarding information, obfuscating code, and using terse variable names with no comments.

Although many of Martijn's points were intentionally shocking or extremely worded, he also made some "serious points." For example, after making fun of Agile's worst purveyors, he established the real point: agile is "not a silver bullet." Brooks told us there is no silver bullet and I still believe that to be the case regardless of whether we're talking about agile, SOA, cloud, or any other trendy topic. Martijn added that the numerous "grand technologies behind Agile" had been ruined by folks selling services, books, and the like. He described Agile as "just a set of techniques" that "in New Zealand we call 'common sense.'"

Another Martijn serious observation was that software craftsmanship is about attitude and can be easily summarized without books and consultants: "Just care about what you're doing."

On the theme of thinking for oneself, Martijn stated, "Those can't code, teach coding. Those who can't teach coding, write a book about coding. Those who cannot finish a book about coding, speak at conferences." Given that he is working on a book and speaking at a conference, it is likely that this falls into the half-truth category. The more serious point he did make is that it is easy to get so busy doing all those other things that one has no or very little time for actually developing code.

One of my favorite "recommendations" from this presentation was to place rear-view mirrors on monitors. The idea here is to be able to quickly come up with an excuse to leave when a Seagull Manager is approaching. He explained that the Seagull Manager is the manager who "flies in and craps all over the place."

Martin observed that "copy and paste is fine" for effect and then in a more serious tone stated that it is fine for prototypes to be rapidly created and can be refactored out later. This was an example of how, in some of the cases, Martijn would intentionally say something shocking and then back it up with practical thinking that is much less shocking.

The point of Martijn's presentation seems to have been to get software developers to challenge conventional thinking and to embrace those things that do work for them in their situations and jettison anything that does not apply to them or their situations. In light of this, he prefers the term "better practices" over the term "best practices." His concern about "best practices" is that the term implies we've reached the peak in that area and have no more work to do.

One of the statements that I wholeheartedly agree with Martijn on (whether it was half-truth or fully believed) is: "Being a software developer is one of the greatest, most creative things you can do." Although Martijn's "recommendation" to look in the mirror each day and tell yourself, "I am awesome," may be a little extreme, I do believe a software developer needs to be confident.

Another interesting observation made during this presentation occurred when Martijn asked how many in attendance in this packed room had a real, legitimate need for cloud computing. One individual raised his hand. Martijn restated what I believe we were all thinking: vendors and consultants continue to sell us concepts and technologies that we don't really need. This was a stark reminder of the importance of thinking for oneself and avoiding vendor-based architectures.

I've long been a fan of contrarian viewpoints because they do challenge groupthink and the Lemming Effect. Martijn's presentation was aimed at challenging long-held generalized thinking. Developers who attended seemed to be entertained by Martijn's extreme presentation, but I'm sure most of them had at least one favorite practice or mantra challenged and now have the opportunity to reflect on the validity of that practice.