One of the goals of my film is to encourage people that don’t necessarily look like me to join the ranks of software developers. Because of this I get asked quite a bit about what are the best skills/framework/platform to learn to get a job in tech.
The answer that most people want is something like “Learn C# for back-end, Angular for Front-end, and SASS for design”. But that’s not the answer I like to give them.
It would be easy to look at the top languages in GitHub or the StackOverflow Surveys and take that as what you should be learning. But that clouds the real issue. In my 30+ years in software, I’ve learned so many different skills. And I don’t think I’m alone. This means, over an average career, the skills you learn won’t matter. What really matters is understanding why those skills are used.
I know, I know. For the starting developer, it might be hard to tell you to learn how computers and languages work. I’m not actually asking that. To get that first job, you’ll likely need to know one of the skills mentioned in the popular surveys, but the technical skills aren’t the important things to learn. It’s the inherent skills you learn while learning those skills.
The actual coding and building of software is a minority of the job. Really.
Your job is to understand what needs to be built, whether this is the feature you’re working on; or the whole system from the gestalt▹ view. Your job as a software developer isn’t to write code…it’s to solve problems. That means that ultimately you are solving problems with languages, frameworks, and platforms. They are the necessary evil. But before you can solve the problem, you have to understand the problem. That’s easier said than done.
So in my world, the skills I’m more apt to hire for aren’t technical exactly. They’re communication, social, and process skills. This means I expect developers to have skills like:
In some ways this may sound like a cop-out, but the best developers I’ve worked with are great at all of these. Learning the process of modern software development is key. This means code reviews, working in sprints, and never being the loudest or software voice in the room.
Every technical skill can be taught, but teaching someone how to not have to be ‘right’ in every case is incredibly difficult. The nature of the team-based development that is today’s software development means you have to be open to learning something at every turn. Every developer can learn something from any other developer.
Fuck rock star developers. Great software gets built by consensus and compromise not by edict.
Learn to work with people; learn to say “I don’t know”; and learn how to adapt. The technical skills will build as you write software. The rest is just ego stroking.
We’re all adults; please comment with that in mind…