When I’m asked what I do for a living, I used to tell people, “I’m a .NET developer.” Recently, I’ve gotten in the habit of responding, “I’m a developer, currently working in .NET.” Why the subtle difference? Because that’s not the only thing I know and I’d hate to sell myself short.
Unless cranking out the same CRM system or Rails app is your divine calling and what satisfies you most in life, chances is are you just want exciting, dependable employment. My aim is to convince you that hardcore specialization is not the way to get there. I’ll try to skirt around the usual advice about staying on your toes in our bleeding edge industry in that I won’t demand you learn every new project trending on Github. What I do want to impress is that you should always be learning something.
Of course, one of the strongest arguments for polyglotism is employability. In a recent issue of P2 (an online publication from the consultancy firm, ThoughtWorks), Rouan Wilsenach urges employers to prefer a job candidate with smatterings of experience in different languages over one with an equal number of years in a single language. He suggests this even when that language is in the hiring company’s technology stack. The explanation is that a great deal of the expertise gained across languages is shared. Testing, heuristic design, and deployment strategies are all necessary, regardless of a language’s syntax and libraries. I would add that a developer who has experience in the respective build system of language A, B, and C is almost absolutely would understand the build system of language A better than a developer who has twice as much experience working only with build system A. The similarities of the languages underline deeper concepts shared across languages which are more generally valuable to understand than the intricacies of Java’s binary search or what have you. Certainly go the specialization route if you want to be the outlier for your stack, but being a Jon Skeet quite a feat.
Additionally, it’s rare that a given company will only ever require a developer to work in a single technology stack. In NoSQL Distilled from Pramod Sadalage and Martin Fowler, the NoSQL movement is described as valuing an appropriate solution to a given problem, rather than a single monolithic solution that fits all needs. The authors describe a system that take advantage of multiple “NoSQL” databases in different components of the system, rather than forcing one general-purpose database to fit different and contradictory roles. Go Continuous Delivery, a recently open-sourced project that I’m getting my feet wet in, uses Java for its back end and Ruby On Rails for it’s client and front end, which of course necessitates HTML and CSS. Many projects share a similar model, and it’s worth it for all developers on a project to at least have reading comprehension in all of the languages in use.
Perhaps more valuable than the similarities of languages, though, are the differences. Early in my career, I spent my week off from work fiddling with Ruby to do some light scripting. When I eventually got back to C# I almost couldn’t believe how much easier I could make things with a more functional vantage point. I cut out at least half of my procedural loops and made my code more readable with an enlightened change in programming style. Also, the first-class treatment of regex in Ruby had me seeking it out in .NET when I had previously fumbled with multiple chained Replace() calls. In any case, my point is not to try Ruby if you’re a .NET programmer, the point is to learn something different. The Pragmatic Programmers have started an excellent series along the lines of “Seven $x in Seven Weeks” where $x so far is languages, databases, web frameworks, and concurrency patterns. Though I would certainly recommend the languages book for programmers, I encourage DBAs and especially programmers to read the databases book. The fact that the database representations can be so dramatically different is valuable for the same reasons highlighted above.
I urge you to spend as much of your personal development time as you can trying something new to you. Pluralsight courses are great for surveying a language or technology, but remember to get your feet wet too. Most languages these days like go, TypeScript, F#, and Ruby have online guided tutorials so there is almost no barrier of entry. Even Docker has a neat sandbox so you can try out one of the biggest new technologies. If you can make it to Vancouver in May (I wish I could), head out to the Polyglot Unconference where you can attend a half or full day workshop and hang out with fellow multi-linguals.