Today's ideal developer
Scott Hanselman wrote a short blog post about developers vs. Googlers, but I really love where that inspired Rick Strahl to go. Having been in a lot of positions to hire people over the years, I think Rick really goes in depth with regard to skills, career development and the market reality of what we need out of people.
I have a lot of respect for people who really endeavor to go deep into computer science. If I were to pick heroes, few people could blow my mind like people I met in Microsoft Research. Scary smart people thinking about things I would never think about. That said, you don't need people of that caliber to do the bulk of production coding. The requirements are completely different.
The biggest things that have changed since I shifted to this line of work are the availability of open source projects and information online. Back in the day, I got better by way of books and experimentation, and hopefully worked with people better than me. Today, you still need the better people, but the Internet quickly shows you that most problems have already been solved.
So in this environment, the thing I value the most is the ability to skillfully assemble solutions. Being an algorithmic genius is not essential, but the ability to loosely couple different components, whether from open source or their own code, is where it's at. It's kind of like being a plumber. You don't need to know all of the specifics about how the hot water heater works, but you do have to understand it well enough to make it work in the system.
Let's be honest here. If you've ever switched jobs, probably the first thing you noticed about the code base was that things were tightly coupled, and therefore hard to change and maintain, and hard to test. I've seen it a hundred times. It's really a drag. There are a lot of things that go into measuring code quality, but this keeps coming back to me as one of the most important.
What do I look for when hiring a developer? I want them to demonstrate reasonable understanding of the frameworks and environment they're working in. Beyond that, I want to see how they structure an application. Do they mix different concerns in the same code? Can I easily unit test what they write?
The soft skills are important too. I want to see that they fundamentally understand that they might be coding for fun, but that there is a business there with a lot of stakeholders. I want them to experiment and try new things, but not go off and do something that hasn't been socialized, prioritized and added to the current iteration of work.
Things have really changed, but I think they've changed for the better. I think about how my forum app, which has been around in some form since 1999, was a lot harder to build back then. I had to write my own rich text editor (which only worked in IE), and scripts were hard to encapsulate and improve. Now the same app has open source components for rich text, dependency injection and testing. It's even available in five languages. There's no question that we live in a better world.
The profession is evolving, and I think it's for the better. We'll always need people who can write device drivers and 3D game engines, but for most of us, there's a great opportunity to learn to quickly build quality applications that are easy to maintain.