Inevitably, as development changes so will developers need to adapt. The stereotype of a socially awkward, green screen loving, mouse hating, hacker who wears black-now-grey jeans and t-shirts that state "127.0.0.1 is where the heart is" for a week at a time and mumbles through the pizza crumbs that drop in piles from his beard onto his ever rounding belly, is not going to cut it in this new world. Future projects will be run on the basis of success and that means you can't forgive someone's shortcomings because they are a "code wizard".
So what sort of developer does cut it at the beginning of this new decade? What sort of skills are you going to need? Well, funny you should ask-
Domain KnowledgeOr, knowledge of the business you are working for. Systems are more complex than ever and businesses increasingly rely on them. Regardless of the general mistrust of IT it has moved right into the heart of business, providing the engine, one without which many businesses couldn't survive.
To build successful systems The Thoroughly Modern Developer has a thorough knowledge of the businesses intention and the value being delivered; it isn't good enough to rely on a BA and a Development Manager to 'translate' business speak into dev syntax.
Eric Evans goes into this in detail in Domain Driven Design. Designing and building a system is a collaborative effort between the domain experts and the developers to create a common model (or a ubiquitous language). If you don't understand the business how can you model it? But it goes further than that; if you don't understand the business value how can you deliver it?
QABack in the old days testing meant running up the app, clicking a couple of times and then waiting a month or two before the testing team raised a list of bugs for the junior devs to pick up and fix. It took XP to change our attitudes on this. TDD meant we wrote unit tests and verified our systems with at least some code. Agile put QAs at the heart of the development process and bugs where fixed at the end of every iteration, but the 'throw it over the wall' principle was still there, just shorter.
The Thoroughly Modern Developer takes responsibility for her own quality, she cares more about meeting the acceptance criteria in a bug free fashion than anything else. This makes the QA's role even more critical as they must continuously guide and help the dev but they will no longer be reduced to simply checking they've done the work.
UsabilityThe average developers idea of building something usable is akin to [the car Homer designed]. For some strange reason even the simplest of tasks, such as getting a column of text boxes to line up, seems to be a feat of incredible endurance.
But usability is crucial. The first developer I ever worked for told me The users don't care about how clean and beautiful your code is, they never see it, but the smallest spelling mistake on the UI and they're on the phone.
The Thoroughly Modern Developer builds systems with usability in mind from the start. Sure, she's no expert - but she knows enough simple rules to get her by - so she works closely with the UX person to ensure what is being produced is usable not just functional.
PolyglotThe Thoroughly Modern Developer does not define her role or skillset around a single language (or worse, a single toolkit - i.e. ASP.NET Developer).
She is language agnostic, and she has experience of a number of different languages, using different paradigms (OOP, functional, dynamic etc.) and her level of understanding goes beyond syntax.
The Thoroughly Modern Developer will choose the best tool for the job or circumstance. Throw her a language she's never worked in and she has no issues about picking it up. Or put her on a project where she's expected to work in two or more different languages and she isn't phased.
In Code Complete Steve McConnell talks about Programming "into" a langague over programming "in" a language. The Thoroughly Modern Developer does the former.
Value DrivenTo every new feature, ever request, every line of code, the Thoroughly Modern Developer asks the same question: how does this deliver value or what's the value of doing this? She's obsessed, she keeps going on about it, it's all most as if it's all she cares about.
Which it is of course. To the Thoroughly Modern Developer value is the sole purpose of her job.
A People PersonOh yes, it's that horrible phrase, one that causes many devs of old to run away and hide behind a wall of cabinets filled with specification documents. The Thoroughly Modern Developer, on the other hand, likes people, gets on with people, can talk to people. She doesn't need 'Relationship Managers' or 'Business Interfacers'; put her in a room full of real people and she'll hold her own without spitting when she talks or snorting Beavis and Buthead style when someone uses any word, or collection of words, which bear a vague resemblance to bodily functions.
Why is the Thoroughly Modern Developer such a people person? Because she understands that in order to build quality software, that delivers business value she needs to talk to people, all different sorts of people, all the time. Whether it's to find out whether the button should say Save or Create or to explain to non-technical people why it took longer to integrate the zobertron with the phlargbleg initiator (of course the Thoroughly Modern Developer would never have come up with those names but she's still got to get along with the old skool) and for the client to be confidant.
People are what makes a software project successful and if you can't do people you can't do software.
FacilitationThe Thoroughly Modern Developer often finds herself in the middle of difficult and complex situations. Because she wants to get the system right she has to raise difficult questions about the way the business works.
The Thoroughly Modern Developer needs basic facilitation skills. She needs to be able to lead a group of people through creative and difficult exercises. To get the right answers you have to keep people on track, resolve conflicts, remove distractions, know when to call time-out, get them to make a decision.
Has "other" interestsFor athletes cross-training (training in your non-core sport) is a essential technique to ensuring you excel in your core discipline. This is no less true for intellectual disciplines and even more true for creative ones (artists/writers/musicians have known for centuries the importance of pursing other arts - think Da Vinci). If your entire existence is writing software then you are greatly narrowing your reference points and are more likely to suffer from boredom or stagnation. For example many prominent developers have blogged on the strange relation between development and music (as a failed musician I entirely concur).
Personally, I have found that long distance sports have allowed me to strengthen and develop a lot of essential development skills: focus, pace, general discipline; not to mention the health benefits that keep my brain active and my energy levels high.
But not only does it benefit your work but it makes you a more interesting person, which is always useful when talking to 'real' people like the users. So do your self a favour, when you get home do something that doesn't involve the computer.
Understands that technology isn't importantThe Thoroughly Modern Developer has a healthy cynicism towards technology. If something can be done without technology that's her preference and she'll push for it. She actually wants to write less software; complex clever gadgetry and features fill her with a great sense of foreboding.
If she was a developer at Timpsons (who have no centralized till system), she'd be strong in resisting all efforts to introduce one. She only cares about technology if it offers real benefit, if it provides genuine value or is essential to the business or user.
She's great is the Thoroughly Modern Developer. She's so awesome people high five her every time she gets up to make a cup of tea. And yet she's so humble with it. If only I could be just like her (sigh).