It used to be pretty easy to be a practicing software developer. First you would go to school and study computer science. You would learn about math, data structures, algorithms, object-oriented programming, project management, and perhaps take a course or two in computer graphics. Armed with these basic skills, you could think of yourself as an “engineer”, and build interesting things out of raw bits for a living.
I am rapidly coming to realize that those basic skills aren’t enough anymore for people who want to spend their working lives building things out of bits.
To do a credible job as a developer these days you also need a whole bunch of other skills:
- You need to be a lawyer, so that you can read, understand, respect, and perhaps even write license agreeements and other contracts.
- You need to be an artist, so that your products use nice colors and proportions, and exhibit a sense of style.
- You need to be a marketer, so that you can get some attention for your work.
- You need to have some business skills, so that you can make deals and negotiate contracts.
- You need to be an architect, so that you can create credible 3D objects in virtual worlds like Second Life or Croquet.
Did I miss any skills?
In the past, project teams were large, and it was possible to create a team with a bunch of developers and other people with the requisite skills. These days, thanks to better programming tools and high-level platforms and services, very small teams can have an incredible impact, but only if that small team includes enough people with all of these skills. Instead of specializing, it is better to be a jack of all trades.
Some food for thought, late on a Friday night.
Update 1:: There’s some great info in the comments, so be sure to check them out. I’m embarassed to admit that I missed some stuff that was so obvious (stuff that I do every day), like hardware technician, database administrator, and system operator. Not to mention writer / communicator.
Update 2:: I really like what Santosh said: “Ouch, I spent 6 years of my life studying computer science ! What is made extinct is the idea of large teams of developers with support groups that carry these other skills (refer to “The Mythical Man Month” to see where the idea of support and specialization within teams is documented).“