Learn a foreign language (and spy on your enemies)
Besides coming up with corny jokes and blog post titles, I spend a fair amount of time reading about new technologies. Recently I have found that I am reading more on languages outside the .NET world. It's interesting to note the similarities and the differences. For example, the well-known and timeless design patterns tend to show up in all languages.
This got me thinking about a project I was on years ago. I was a ASP/VB6 developer at the time (sad, I know) hoping to get into .NET (VB.NET of course, wasn't too sure about that new-fangled C#). An opportunity came up at work to join a Java team. It wasn't .NET, but it also wasn't VB6. I jumped on the opportunity.
As an aside, I should note I wasn't yet a seasoned developer. I thought I knew a lot, but "I didn't know what I didn't know". It was clear the programming leads really knew Java. I had "mastered" ASP, so I fit in as a "smart dude".
The leads were into all sorts of various Java technologies and projects. I instantly concluded that Java was about assembling far too many different small pieces. Pieces I would have to learn one-by-one. So whether it was Struts, Java Beans or Java Server Faces, I jumped in.
I quickly found out a few things:
- Java, the language, was pretty easy to learn. I had done a little bit of Java in college, but that didn't mean anything in the professional world. I came up to speed pretty quick.
- Java, the enterprise collection of features, projects, and practices, was really hard. They don't teach this stuff in school.
- Some of the "Java" programmers on the team were just as clueless as my ASP brethren.
What turns out to be hard usually frustrates. I was frustrated by all these little bits and pieces. There was a pattern that seemed to have a different, yet similar object, at each level of the application as data made its way through the system. Form Bean objects copied their data into data transfer objects, which passed their data onto objects to persist the data. I didn't understand each of their purposes and quickly went mad.
Fast forward five years and the .NET development practices have matured and caught up to Java in many regards. I've been involved in various UI patterns, and finally see the value in all those various objects I used to loathe. In a way, I feel I wasted two to three years of my career being "good enough", not knowing what I was missing. Had I paid more attention and found out the "why" behind the patterns, I could have been ahead of the curve.
Let's review the implied lesson. If you spend time in other languages and developer ecosystems than your native, day-to-day language, you may learn something. Ruby has has had this "on Rails" thing for a while. Perhaps you (and I) should check it out. jQuery loves to talk about "chainability". While it may not have created to the fluent interface, I can't help but think web developers switching between their native languages and JavaScript wanted to see more of that.
I'm not asking you to commit to completely learning a new language, or abandoning your current. I'm asking you to look around, see what else is out there, and take the best pieces and improve your craft.