I have an interesting job. I get to build and lead a small team of developers to create a fancy web-based content distribution / market analysis tool. This will be the first time in the history of the company that a full time team has worked on the software. Up until now, they have had a mix of contractors and outsourcing firms provide their software needs. These are talented folks who have been able to come up with a great product, but as you can imagine, the system has become a bit fragmented.
In our solution, we are currently using the following technologies (in no particular order):
- Ruby / Rails
- Ruby / Sinatra / Unicorn
- C# / ASP.net
- Python / django
- Python / CherryPy
Quite a laundry list no? This might sound like a crazy stack, but other software companies I work for are no different. Software systems are complex beasts that tend to be spread across multiple platforms / technologies. Why is this the case? I believe that there are a few reasons why:
- Software moves a million miles an hour – New programming languages, frameworks, and technologies come out seemingly every day. Most of the time, these technologies provide developers with a faster, better, or more friendly way of solving a problem, so developers are anxious to get their hands dirty and try them out.
- Programmers are magpies, and prototypes, unfortunately, often end up being end product – Because of reason #1, developers will often want to keep up on new technologies and frameworks by getting a “hello world” fired up. I personally do this quite frequently. It is critical for developers to stay current on new tech. Often while experimenting with new technology, a particular software problem will come up at work, and a developer will think “man, that would be soooo slick in Node!” They poke around a bit, get a prototype running, show it to their customer, and before you know it, you’ve got Node running on your production server.
- Technology choice, or lack of adapting new technology is a narrative of the culture of an organization – Organizations say a lot about who they are and want to be by what technology stack they use. No one wants to be perceived as being built on a barn, so new passing craze technology will get wrapped into existing solutions just so the name of the technology can be thrown around in geeky conversation.
Seldom will a developer work for an organization that utilizes a single platform. We need to be flexible. We need to be willing to learn new things. We need to be generalists.
At a previous job, a developer was working on a project. He had worked in a particular technology for most of his career and was quite skilled at getting things done with it. A request came in from management which required him to step outside of his sandbox and use a new technology. I had personally used this technology only a little bit (due to my incessant “hello world” dablings) so he asked if I could help him out. I of course was happy to help. Teaching and mentoring are my true passions. I began to explain to him how he could go about solving his problem with this new technology. After about 5 minutes, he said something like this: “You know, why don’t you just go ahead and write the code for me. I really don’t have any desire to learn new technology.”
I was floored. How could you not have the desire to learn new technology? How do you expect to stay even close to relevant as a developer?
The second story relates to my new position. I am currently in the process of hiring a new developer, and I have had a few phone screenings with potential candidates. One candidate in particular stuck out to me. his resume was solid, and he had a lot of good .NET experience (which is good, because a large chunk of our new product is written in ASP.NET). After speaking with him for a while, I asked him what he thought about Ruby, Python, and a few other technologies. He said something very simmillar to the guy in my first story. ”I haven’t worked at all in Python or Ruby. I don’t like Linux. I don’t really want to learn any of that stuff.”
He was immediately off my list.
A large chunk of our product is written in Ruby and Python, and runs on Ubuntu Servers. What happens when those components break down? Does he just twiddle his thumbs until a bug report for the ASP components come in? Sorry.
Don’t be afraid to learn new things. Don’t pigeon-hole yourself into a technology. Be a generalist.
Unless, of course, you don’t want to be on my team.