I’m often asked a question along the lines of “how do I get into software if I studied x instead of Computer Science?” Often x is a closely related field, such as electrical engineering, but I sometimes get this question from, say, English majors as well. So my answers will depend on how much catch-up there is to do.
One of the things I often skip is trying to determine if someone should make a lateral change, and just assuming it as a given. Software is both a very well paying job, and yet there’s a big shortage of engineers right now even in a deep jobs crisis. There’s a reason for that — it’s not everyone’s cup of tea. So before we get to the how its sometimes necessary to get to the why. If you’re looking to get in because of the money, but aren’t really all that interested in computing or math, then that raises the bar a lot in terms of what you have to be willing to put up with. I’m not going to be an idealist and say that you should only have a career doing something you love – the reality is that we mostly work so we can do the things we like; its not very often you truly love your career. So it’s a good idea to ask yourself if you really, really, want to spend your entire life staring at and discussing what appears on a glowing rectangle and being misunderstood by people who think you “fix computers” for a living.
But let’s assume you’ve gone through that discussion with yourself rationally, and you’ve come to the determination that you want to be a software engineer. I’m emphasizing the exact terminology here because this is my only area of expertise, and I can’t offer advice on how to become a repair technician, sysadmin, or database administrator. In most software companies, software engineering doesn’t even fall under “IT.” So you know what a software engineer is, and you want to become one. Let’s look at your options:
1. Go back to school for Computer Science: This is an obvious one, and yet it’s generally not what people have in mind when they come to me asking for advice. This should be the first option you consider, both because its low-risk and your best shot. If you have to rule this out, then you probably don’t want it bad enough and should stop considering a career in software. Sorry.
People seem to think that rubbing shoulders with engineers gives them an insider who can pull strings and show them a painless backdoor to becoming a well-paid engineer at a top-5 firm. Either that, or they are waiting for me to say “well, normally, I’d recommend you get a degree, but since you’re so exceptionally smart…” Folks, it doesn’t work that way. I have to say this because there’s a lot of misconception out there about qualifications; I wrote a whole essay on this – see why the degree matters. The short story is that proven ability and potential matters far far more than “who you know” or “what you think you know.” You’re not as good as you probably think you are.
2. Fill in the gaps and build experience: This is for people who are in a very closely related field, such as degree holders in mathematics or mechanical engineers. In order to pull this off successfully you need to both be very disciplined, self-motivated, and perhaps a bit lucky. You might need additional instruction in things like data structures, algorithms, or operating systems principles, but perhaps not a full-on second degree. You’re going to need to build up a portfolio of experience to show prospective employers. And you’ll need to have good grades from school — I’d venture at least a 3.2, scale up if your school isn’t highly ranked (if you don’t know if you are, then you aren’t).
Regarding your experience, you should either start or contribute to an open-source project, publicly available software release, or a startup or other smaller company willing to take a risk on you. Your title should be “software engineer” or very similar. You need to be writing code and learning at least 2 modern languages, preferably 3.
Your goal is to make yourself appear “serious” about software engineering, and simultaneously to build up the programming experience that allows you to keep up when you’re at a top firm that will expect it. Your degree will serve as an indication that you’re smart enough to do the job, and your resume is to convince them you have the right skillset. A computer science degree is supposed to do a little bit of both (in a “necessary but not sufficient” sense), but you’re piecing those two together without a degree.
3. Charge head-on. This is the step most people want me to recommend, because it’s the quickest: all you have to do is update your resume, study a few interview questions, and apply! The reality is that most people who didn’t do either of #1 or #2 will not be ready and will not succeed. The reason I say this is because this is an appealing, and somewhat dangerous option. The danger is that you will fail, but you won’t know it until much later. You see, HR departments and recruiters mostly just scan for keywords when looking at resumes, and because the employment field is so red-hot, you’ll start getting phone calls and emails just by putting yourself out there.
“Wow,” you’ll say to yourself. “Everybody wants me. I must be pretty good.” Except this is an illusion. Recruiters are practically BEGGING anyone with “Java” or “Python” on their resumes to go interview. It doesn’t mean you’re prepared to be a top engineer.
Next, you might even pass a first round interview just by virtue of knowing what a while-loop is and being able to explain class inheritance (the standards can be low, believe me). Then, odds are better than not that you’ll hit a brick wall — or worse, you’ll get a lucky dice roll and get a job offer.
Here’s the problem: the variance in impact in engineering, and the corresponding amount of pay, is massive. What I mean is that a GREAT engineer is easily worth 3-4 good engineers. And the best are going to be 10 times better — even at the same experience level.
Because of this, software is a winner-take-most kind of economy. All the best firms are wildly successful — and don’t have to deal with unproven candidates; they just offer 50-100% more salary and options than the median and get more applications than they can handle anyway. In addition, working at anything but the very best firms means you won’t be developing to your full potential as quickly as you might. If you settle, you will be making significantly less now, and you’ll have a slower trajectory on top of that. So the opportunity cost of not having the degree can be very high.
In this context, even if you can get a software job now, unless you are already getting offers (not interviews) from top firms, investing in a computer science degree can pay for itself in as short as 2-3 years, and from then on it’s pure icing on the cake. In the worst case, you’ll find that computer science isn’t for you anyway, and you’ll save yourself a lot of pain.