Writings

How to Become a Developer Part 2: What skills?

April 19, 2017

This is Part 2 in a series on "How to Become a Developer." Part 1 is here, and it talks about why you would want to become a developer—and why you wouldn't want to. This post is a continuation of the series focusing on the skills you need (and don't need) to become a developer.

This post is not about the skills you need to actually write code (that's later in the series). It's about the skills you need as a person to succeed in software development—the character traits or "soft" skills required.

Again we'll look at both sides of the equation here:

  1. Skills you need
  2. Skills people think you need that you don't need

Leggo.

Skills you need

Raw determination

You might be surprised that there's only one skill here. I think there's only one thing you need to succeed as a developer—and that's sheer will-power to work through problems. I know this won't sell development as being very sexy, but most of it is just working through problems. Computers are systems of systems built on top of systems—all made by humans. They're prone to bugs, failures, and just general unreliability. As a developer, your job is to wade through these things and get them to play nicely together.

It can be infuriatingly frustrating at times, but you just have to take some deep breaths and work through it. If you've ever fought with a wireless printer/router/some other piece of technology, you may know this feeling already.

Again, you don't need genius-level intellect (although it certainly wouldn't hurt)—just an attitude that you won't be beaten, and you'll figure it out some way, somehow.

My story

I'd like to share my story of coming to programming, because it was definitely not a magical nor easy process. When I first started learning to program, I knew absolutely nothing about computers. I knew how to double-click on icon to play a videogame, and that's it. If I was feeling frisky I'd right-click > Open to get things going. So savvy I was.

My first exposure to programming was my freshman year of college in the computer science program. I was hopelessly lost. So completely, maddening-ly lost I wanted to quit every single day. It was embarrassing, depressing, and infuriating, but thankfully I stuck with it. Week by week, semester by semester I started to pick things up—little by little. After a year or two in I had some basics down (still feeling totally lost), but I kept going. After college I got my first programming job, and I again felt overwhelmed and honestly, quite dumb. I didn't know it at the time, but I had been exposed to maybe 5% of what it meant to program. At my next job, I realized I had grown a little more—I had a couple more things under my belt.

At my next job after that, I realized I had grown again. I wasn't getting stumped as often, and when I did get stuck I wasn't stuck for nearly as long. I was reaching a level of expertise in the tools I was using. There were many things I didn't know (and still don't), but I was beginning to know what I didn't know. And when I needed to figure something out, I could.

Here's in my opinion what differentiates a good programmer from a great one:

All programmers hit constant roadblocks—great programmers just clear them faster and more succinctly.

All you need is determination to not be beaten—that somehow, some way, eventually, you will figure out what is wrong and you will fix it.

Skills you don't need

There's only one skill you need: determination. That means anything else you can think of is not a requirement. Let's address a few of the most popular.

A computer science or math degree

This is the most common perception about what you need to learn programming. But really, computer science and programming are two completely different things. Related? Yes, but the same? No. To steal an analogy from a friend of mine, programming is like learning how to weld, and computer science is learning how to become a material scientist. One is theory, math, and science, and the other is application.

Can you be a welder and a material scientist? Of course. Would knowledge of material science aid you in welding? I'm sure it would, but it's not a hard requirement.

By learning to program, you're learning to weld. You're taking tools someone else has made for you, a torch and some metal—I'm not a welder guys, ok? Go with me here—and you're learning techniques on how to use them. Learning to develop websites or apps is very similar. Someone else has developed the programming language and tools you're using—you're just building with the tools you have.

A computer science degree is focused on the theory of computing—the theory of computers and programming languages. They're out to develop better tools and materials. In a CS degree you do learn to do some coding because it helps illustrate the source material (and they can't release you into the job market with four years of school and zero practical skills—that looks bad on the program and school), but the focus is on the theory and not the "doing."

Now there's nothing wrong with theory or trying to become a material scientist if that's what you want to do. But remember the initial goal we set out at the beginning: become a full-time developer. There are some great things to be learned from theory, but when you're first starting out you should focus on gaining practical skills. Learn how to use the tool—then learn how the tool works. We'll talk more about this when we get to the practical steps, but step one is learning to weld.

Prior computer skills

As I stated in the section about my learning to program journey, I had zero computer skills upfront. If you know nothing about computers, that's completely ok. You will learn and pick up a ton of things along the way.

Being good at math and science

This is similar to the section on the CS degree, but there's very little actual math and science done in programming (assuming you're not programming a math or sciency-type program). Even though, thanks to the CS degree, I have a math minor that included four calculus courses, differential equations, linear algebra, and more—I haven't once been working at my job and thought, "Man, I'm SO glad I learned how to compute triple integrals in spherical coordinates! That's about to be so useful!!" (At this point I don't remember a single thing about it either.)

(Side-note: If you think you're not good at math or science, I would wager a guess that the reason you think that is based on some past experience from a grade school. Maybe someone told you you weren't good at it—maybe you had a hard time understanding a subject or got low grades. Maybe you told it to yourself before or after these things, and you've believed it ever since. I would encourage you to drop those self-labels. Many people have figured out math and science. Don't judge yourself too quickly on what could have been one instance of a poor teacher, a poor choice of words, or anything else. I don't have to tell you stories about people who were told they couldn't do something, and ended up becoming household names because of it. Determination!!)

It just takes hard work

Like we talked about in Part 1: it's not hard; it just takes hard work.

I hope through these two posts I've helped address and dismantle some of those things hanging around in the back of your head about why you can't do it. If becoming a full-time developer is something you want to do, I would encourage you to go after it, and to not let anything stop you along the way.

The next post(s) will focus what you actually need to do and learn to become a developer. If you've made it this far, you've got what it takes! Keep on.

John

TwitterGitHub