You are smart enough to be a software developer
All you need to do is write code.
To become a good software developer, you need to practice writing code. You need other people to look at your code and make suggestions to improve it, and you need to accept that you don’t know everything. And that is pretty much it. Writing code is not about innate genius. It’s about practice, making mistakes and learning what does and doesn’t work.
When you start learning to code, just like when you start learning anything else, you will have a low skill level. This is normal. It doesn’t mean that you’re not a real software developer. It doesn’t mean you don’t belong in software development, and it doesn’t mean you should give up.
There are people who would tell you otherwise, and those people play a role in creating an unwelcoming culture in the industry. These are people who have learned to gain respect through elitism and negativity. And they don’t want you to become a software developer because it would make them less special.
@deannathedev @aprilwensel I'll never forget reading someone's question about difficulties they were having with Netbeans and the response "First learn to program in Java, then stop trying to use an IDE you don't understand.
Software developers are not a special breed
Software developers are people who have learned to use a tool. We are not born this way. We are not wizards. There is no special part of the brain that only developers have. The more you learn about code, the more you realise again and again that it isn’t magic.
If you’ve never peeked under the covers of a particular domain, it is easy to form self-limiting beliefs about it. I used to work in a team where I wrote code but someone else handled the deployment. For me, deployment was something a bit mysterious and outside of my domain. When I started writing my own deploy scripts I was surprised and delighted to discover that deployment isn’t magic either. It’s just something I didn’t know very much about.
The most important skill of all for a software developer is the ability to give and receive constructive feedback without being an asshole about it.
Not everyone who tries software development will become an excellent software developer, but it is a myth that software development requires extraordinary talent and passion. Being excellent at software development requires continuous learning, exactly the same as being excellent at anything else.
Important skills for a software developer
The most important skill for a software developer is the ability to give and receive constructive feedback without being an asshole about it. Code review is an important part of the software development process. Some great stuff has been written about giving feedback, but receiving feedback well is just as important.
People are going to find fault with your code. This is a good thing. It’s supposed to happen. It’s why we do code review. Having someone point out your mistakes can be a little bit of a blow to your ego, but it makes your code better and gives you a learning opportunity. If you respond from a place of insecurity, by being dismissive or trying to undermine the other person, the opportunity is lost.
Code review is not about you. It is not about the person giving you feedback. It doesn’t matter if you think you are smarter than the other person. What matters is stopping defects from going into production. Stop, set aside your emotional reaction, remember why we do code review, and focus on understanding the problem at hand.
The kind of programmer I don’t want to work with
The trouble with the myth that coding is about genius and extraordinary talent is that it creates software developers who believe they are geniuses with extraordinary talent (or at least who feel they have to project that image to cover up their insecurity). I don’t want to work with someone who thinks they have nothing left to learn.
Or someone who won’t follow a style guide. Or someone who thinks they are too good to do the task they’ve been assigned. Or someone who doesn’t want to participate in code review. Or someone who thinks you’re not a real programmer if you use a GUI-based text editor.
Where to begin
If you want to learn to write code, you need to write code. But it can be hard to know where to begin, and it can all be a bit overwhelming. Here is what I would recommend:
- Make an account on github if you don’t have one already. You’re about to start building a lot of cool stuff and you’ll want somewhere you can keep track of it and share it with others. You can also see graphs of your contribution activity, which is handy for tracking your habits.
- Make a plan. Something I’m loving at the moment is my 5 x 5 action plan. By breaking each goal down into five separate actions that I will take over the next five months, I can focus on this month’s actions without feeling overwhelmed by all the other actions I want to take.
- Make something fun! There are so many great tutorials out there. This one looks really cool and I’m bookmarking it for later (it’s not in my action plan yet).
Let’s get over the idea that it takes a special type of genius to learn to code. It’s elitist nonsense that doesn’t help our industry. You are smart enough, and all you need is practice.