How and Why to Become a Programmer

January 23, 2019
Confidence: certain

I find myself recommending programming as a career path to lots and lots of people. It gets boring to write the same arguments over and over, so I thought I should just do it once more: the definitive guide to why programming is a great choice and how to break into it.


Programming is fucking cushy.

The money is really good. Like, we're talking really good. If you're willing to relocate, your first job will probably pay around \$105,000 USD in salary. In addition, you're going to make stock options (worth maybe \$50,000 a year if it's for a company that actually makes money---worth nothing otherwise.) Also, lots of big companies will actually pay you money to sign their contract. It's called a signing bonus, you get it on your first paycheck, and it's somewhere between \$10,000 and \$80,000. The only catch is that you have to stay for a year. After that, you're free to go somewhere else, get a 15% raise, and another big signing bonus. Before tax, you're looking at about \$200,000 USD per year on your first job, if you can land one of the good ones. If not, or if you're not willing to move, let's say \$100,000.

You don't need any qualifications. Nobody in the industry cares whether or not you went to university. They don't give a shit about what you look like or who your family is; all they care about is whether or not you can reverse a linked list in linear time[^1]---whether or not you can code. In other words, it's an industry in which skills trump qualifications every time. The interviews rarely have any "soft" questions; you're just asked to program a solution to a problem. If you can do it and your solution doesn't suck and you don't seem like an asshole, you get the job. Sometimes if your code is really good, they'll even look the other way on the asshole bit.

Everything you need is free. There's this neat culture in programming circles of people who make cool stuff and then give it away for free. That means every tool you need is already made and is freely available. And if it isn't, programming skills are the same ones you need in order to build the tools that don't yet exist. See working on real projects later in this essay.

It's a hot industry. Seriously hot. There are simply not enough people good at computers in the world. Everyone is hiring. I'm not kidding about that; I get roughly one job offer per week, sent to me by people I've never met before. And this number is low compared to lots of people in the industry---some people get a few every day. How many times per year do you turn down six-figure jobs? In addition, you don't need to worry about your job being automated-away---the people doing the automating-away are programmers, and some very fortunate mathematics prove that when we can automate programming we must already be able to automate everything else.

Programming is a creative endeavor. Most of your time is spent thinking about how to solve the problem; very little of it is actually solving it. Knowing the problem is like 99% of the way there. That means you can work from anywhere---in the park, in the shower, on the beach in Mexico. Seriously, I've gotten paid to work from all of those locations. The people in charge don't really know what you do; they just know that if they feed you energy drinks and buy a foosball table for the office, somehow lots of money gets made. Unless you work at a bank, your boss will recognize this and let you do your thing. So long as you get your work done and make a halfhearted attempt to make it to meetings, nobody cares what hours you hold.

Why Not?

There are a few reasons you might not want to become a programmer.

You need to spend a lot of time on a computer.

You feel like you won't be good at it. In my experience, computer programming skills overlap with a lot of other things. If your job consists of working with lots of different tools and understanding when to use which, then programming is going to be a good a fit. If your job consists of diagnosing why things are broken, programming will be a very good fit. If your job consists of making simple things and then assembling them into more complicated things, programming will be a good fit.

You need to spend a lot of time interacting with people who are lacking some crucial social skills. These people are not unpleasant by any means, just weird as fuck. In time, you will become more like them than you are comfortable admitting to yourself. It's OK.

"Isn't tech just full of tech bros?" No. See the above point.

It can be hard to experience your accomplishments. Unlike carpentry, when you've finished a software project, there's usually nothing that you can point at and say "yes, I made that." The construction exists only in the platonic world of ideas. Relatedly:

Nobody except other nerds will understand what the fuck you do. Despite hundreds of hours of talking with my mom about my interests, she's never going to truly understand what it is that I do. And she actually wants to know. If sharing understanding of your work with a wide group of people is something you really care about, this might not be a good career path.

Why Not "Why Not?"?

Is any of those "why nots" really worth \$200,000 a year to you?

Getting in the Door

"Ok, great! I'm sold on this exciting career aspect, Sandy! But how can I make it happen?" I can practically hear you shouting enthusiastically at me! Before we get into the "how to learn this stuff" bit, I want to give you a little more insight into the industry.

The cards are stacked in your favor. OK, get this. Every company I've ever worked at has this thing called a "referral policy." The deal is, if someone who works there hands your resume to the boss, and you end up getting hired, then that person makes somewhere between \$5,000 and \$20,000. I think the idea is to inspire people to recommend their friends, but they get the money regardless of whether they know you or not.

That's right. People get paid if they can get you a job where they work. This means LinkedIn is your best friend. You can just search for people who work at any particular company you want to work for, send them cold emails saying "here's my resume, please refer me," and they will because these people are smart and would like to make some easy extra money on top of their already-exuberant salaries.

But wait, there's more. You remember how I said that you'll be getting a job offer every week? Those things are sent by people called "recruiters" whose job it is is to hire people. It turns out that they too get paid if they can find you a job. Which means that if you're lazy, you can also just email random recruiters you find on LinkedIn and tell them you're on the job market. They will literally do the job hunt for you.

Learning How to Program

All of this sounds too good to be true, doesn't it?

Unfortunately, all of the above information is only applicable if you know how to program. Fortunately, while learning it is hard, you can do it in six months if you're dedicated. Most people in this field are mostly self-taught. You don't need to go to school or get a certificate or anything.

Seriously. Six months. No bullshitting. It'll be grueling, twelve-hour days, but it's doable. That's like, what, \$5,000 worth of food and rent? Go take out a loan and quit your job and focus on this. It's probably the most important thing you'll ever do. Programming has a 100% employment rate. In six months you can pay back that loan with your signing bonus and then take the rest of it to the bank.

So how do you do it? You don't need a special computer---whatever you already have will work, as long as it has a keyboard (no phones, sorry!). Go buy a copy of Cracking the Coding Interview, and use that as a todo-list of things you need to learn. This is a fantastic book that will prepare you for what sorts of questions you can expect in a technical interview. If you can correctly answer every exercise in the book in less than an hour, you are already more qualified than the vast majority of people I've ever interviewed.

To clarify, the goal is not to memorize the solutions to the questions. That won't work; interviewers can sniff that out a mile away. But if you can genuinely work out the answer to all of those questions based only on what's inside your head, you know more than enough. At that point you are highly employable. Enjoy those six figures, baby!

So, with Cracking the Coding Interview as your guide, how do you actually learn this stuff? Two fold: you ask lots of questions and you do projects. To ask questions, a good place to start is at /r/learnprogramming. A really good place to start is their FAQ question Where Do I Get Started. Everyone is really very friendly.

But beware! There is a very common misstep here that bites beginners---the communities that help beginners are often too helpful, and many a new programmer will develop learned helplessness. Which is to say they'll automatically ask for help whenever they see a new problem, without first giving their best attempt to solve it. Do not fall into this trap---you might never get out.

In order to do projects, pick something on the computer that you wish existed or something that does exist but you can immediately see how it could be better. Then dive in, and systematically work on bringing this idea to fruition. The only way to learn how to program is by actually doing it and bumping into reality. Having a real project in mind is a great way to accidentally discover holes in your knowledge. Ask for help when you need it, but give it a solid 30 minutes of thinking really hard first.

Additionally, having made real projects is great for your resume. It helps show companies that you're serious, even if you don't have professional experience.

Making a Great Resume

Keep in mind that nobody in this industry cares about anything. Except for whether or not you can code and whether or not you can make them money. Seriously. That's it. As a result, you want to tailor your resume with this in mind. My rules on this are simple:

Make the relevant information easy to find. At the very top, list what programming languages you know, and how well you know them. Chop out words if they're not necessary. Short and sweet.

If it's not impressive, take it off. This includes both work experience and bullet points. If your last job was a barista, nobody cares. Get rid of it. Unless you were the shift manager and realized that the company practices were terrible and you singlehandedly introduced a new system that saved ten thousand dollars a year. It's OK if this makes your resume short; better to be short and impressive than long and dull.

Put things in context. Programming people are an analytical bunch, so put in numbers wherever you can. Make sure the numbers are meaningful to someone who wasn't there. For example, saying you increased something's speed by 10 seconds is meaningless; instead say you improved it by 95%. Rather than saying you lead a project, say that you lead the team responsible for the company's most important project. Only if it's true, of course. If you don't know how to put things in context, go read this book.


So that's all I've got. If you're dissatisfied with your job or your money situation, I can't think of a single reason why you shouldn't commit yourself to this approach 100%. It will be hard and scary, but it will all be over in a few months and you'll be laughing about the experience all the way to the bank.

If you have questions about any of this, or if you just need a pep-talk, feel free to email me. I'd love to hear from you.