Man, I was thinking about something just like that as I was reading Steve Yegge’s latest essay on the parallels of the political spectrum to the developer platform spectrum. I am always very happy to see a new post from Mr. Yegge.
When people ask me about Java and why I don’t often write applications in it, my answer is not that I think “Java sucks”. I think the JVM is amazing technology, and there are a ton of fantastic APIs. Using Java is a great answer for many situations. However, the least amount of fun that I have had programming has been when using the Java language. It isn’t just that it feels frustratingly verbose, although that is part of it. I feel like I am saying too much:
I am using the Greeting “Welcome” to the Person Ben!
I always found like I was stuck speaking in someone else’s tone. A boring tone. I would try to change things up by using more fluent APIs (e.g.
withScreen().shop().navigateToCategory("Auto & Tires/Tools & Equipment").tapListItem(3), but then I would feel like I just didn’t fit in. It also didn’t feel fair to the rest of the team that would be speaking in another monotone. Reading code is so much more important than writing it… and all that jazz.
Speaking of jazz, maybe some people enjoy singing in a large choir and getting the harmony just right. I think I prefer to be in a jazz band where I have more room to explore (and mess up?). Improvising leads me to different API choices and different solutions. Some people hate APIs such as
7.days.ago, but I tend to enjoy them.
There is huge value in a community having a coherent voice, but I am still trying to find the right balance. I am still looking for my voice. I don’t want to go too far and get obsessed with the process and forget the content though. The purpose of my code is to deliver an experience, and that output has the most value, but that doesn’t mean I don’t have to care about my craft and learning.
If I think about the (somewhat) massive wasted effort that I have seen over the years on switching frameworks and arguing over Struts vs. WebWork, jUnit vs. TestNG, Spring vs. Guice, jQuery vs. Prototype, or [insert your favorite argument]. I don’t think that if I went back to any choices and switched the “winner” I would have had drastically different results in the experience I ended up building. I think that is why I am focusing more on being a Product Engineer, but one who has fun building it in his own voice?