Introduction
In some circles I am used to provide some inspiration to aspiring software engineers with non-traditional backgrounds. A non-traditional background here just means the lack of a college degree in either computer science, mathematics, or electrical engineering. The difference between a traditional and non-traditional background has profound socioeconomic implications. It’s not really a secret that non-traditional candidates have to overcome unusually high barriers to entry to enter the field of software engineering. While the idea of facing more obstacles as an outsider is not controversial, few lack the first-hand experience to tell you how hard it is, and insiders underestimate the difficulty. In my case, I was more non-traditional than most: No formal CS education, no bootcamp, and no network. I also did well for myself: I eventually had offers from Microsoft and Facebook (though it was not my first job in SE). That said, I have unusual but first-hand advice for people looking to get into software engineering from non-traditional backgrounds.
The more non-traditional you are the harder it will be to succeed
This is for two reasons: search engine optimization and human heuristics.
SEO
For SEO, people need some way to find you. I found that recruiters were initially very excited if they actually saw my resume, but I had no traction online. It seemed that the search queries used to find candidates seemed to follow what I call socioeconomic checkboxes. The most important socioeconomic checkbox is a degree in computer science. If you lack that, you are likely to be on page 10 and disappear into obscurity. I verified this by A/B testing my resume several years ago, and let me tell you- the fake version of me with a degree in computer science was incredibly popular. Even today, I have a friend who works at LinkedIn and went to Georgia Tech in Computer Science. He gets recruiter emails multiple times a day. While my LinkedIn profile views have certainly gone up substantially since I started at Facebook, I have been contacted about three times over three months. With poor SEO, you are functionally invisible to the world, and it is a very avoidable barrier if you know you want to go into SE and have time to plan.
Heuristics
For heuristics, the first part is recruiters and anyone in the position of evaluating you is generally looking at you and many, many other candidates on paper in a short time span. This feature of human psychology extends beyond hiring, but when someone doesn’t know how to evaluate you, they soft reject the opportunity. I can’t blame someone who is trained to assess people with traditional CS backgrounds getting confused when they see a physics background, or some other background. I have an incredible amount of domain expertise in STEM having bounced around math, physics, computer science and biology. For that reason I know physics, chemical engineering, and math majors are especially difficult and math-heavy majors. I can’t expect someone else to know that.
The second part of heuristics is that resumes are a pretty poor indicator of someone doing well in an interview, but non-traditional backgrounds have little crossover with the traditional SE interview, so they are less likely to do well interviewing for that position. I suspect, but I do not have the data for this, that by being a non-traditional candidate you are judged by the average performance of your peers when deciding whether or not to start the interview process. Interviewing takes a lot of resources, and I imagine this is just an effort to making interviewing less expensive. I do know that at my first SE job, people who came from coding bootcamps did much more poorly in the standard SE interview that people with formal CS degrees. For that reason we didn’t seem to interview many people from bootcamps, and to my knowledge in the three years I worked at my first job there was not a single person who had gone to a coding bootcamp. The percentage of people with non-traditional backgrounds at this job was less than 5%.
The benefits of studying computer science are much more than an education
In the time following my graduation, I had spent a few years as an unofficial student auditing CS courses and studying programming. There were two things I was very interested in doing: research and internships. For the research (and this was in physics), I looked at what the professors were researching, read some of the papers of those that I liked, and went in to talk to them about their research. I thought it would be an easy sell, given that I was free labor over 9+ months. Anyway, I was actually rejected each time I went to ask about getting involved in their work. It turned out that students actually detracted from resources on average during the time you would be trained (6 months) and free of any pressure from the registrar, they declined. They suggested I apply for a masters program or PhD program and start from there, but I wanted exposure to research for the purposes of deciding if these programs were right for me.
Regarding internships, there are actually strict requirements that applicants be currently enrolled in a 4-year degree program. For some reason that left me a little confused, having graduated a 4-year program just recently disqualified me from consideration. I was caught in a strange position where I was too inexperienced for an entry-level role, but graduated and hence ineligible for programs meant to cultivate a functional level of experience.
Next, studying computer science with a cohort will be an extremely useful network of people with the same shared goal (full-time work in software). I have learned a good amount just by being around the few friends who were in the field in terms of tools to use, how I should be spending my time looking for work, and referrals. Companies will also heavily recruit from the schools that they like, and being part of that network means you are given special consideration as a complete stranger.
What if I can’t get a degree in computer science, what can I do?
The good news is that there are things you can do, but having high levels of motivation is practically non-negotiable to succeed here. Motivation is the single most important quality I’ve seen that correlates with long-term outcomes. The bad news is that it will be hard, and it is likely you will be in a socioeconomically disadvantaged position to some degree until you either become traditional, or achieve some level of success that is much more highly valued than a traditional background. Even then, you’ll still be relatively disadvantaged compared to your CS-degree-holding twin in a parallel universe, but the hope is that you’ll be making enough money where the primary reason for not pursuing a CS degree is the opportunity cost of not working for a year rather than the tuition.
Understand that you’ll have a few limitations and work around them
As I mentioned, SEO is sort of a nightmare for non-traditional candidates. It is so poor that it would be a much better to exclusively network in person. This is easy in San Francisco, but it is much harder outside of any tech hub, like where I was when I first tried to enter software engineering in a New Jersey subarb. Here I’d recommend that you move to a tech hub like Austin, San Francisco, Seattle, etc. and network as much as you can focusing on start ups, if you can afford it. Start ups have much more limited ability to demand traditional backgrounds than bigger, more financially secure companies. Start ups also value hustle much more culturally, which is exactly what you need to be doing for your first job search. It doesn’t really matter imo exactly how you go about networking except that you need to meet people in person, focus on start ups, and figure out what skills you need to increase your market value as a job applicant.
Applying directly through a company job site will almost certainly be a black hole before you have 2 years of experience in your industry if you have a non-traditional background. The only way in is through referrals, so you really need to push for getting those. Getting referrals is actually pretty hard in the beginning because you have no network, and people don’t always feel comfortable referring acquaintances who they barely know or people they just met. This is why it’s important to cultivate a network as early as you can so it has time to mature, but barring that just be patient with the network you are cultivating.
It is sort of important that you have an understanding of the fundamentals of computer science and programming experience better than the average person with a traditional background, since your non-traditional background will at best be received neutrally, and at worst raise doubts as to your ability to succeed in this role. Interviewing is extremely conservative in that the team has to be very confident that you will do well to extend an offer. If they have doubts or lack the data to suggest you’re experienced enough, they are very likely to reject.
Some other ways to increase your value
Also, bootcamps in 2017 aren’t a bad idea if you can go to a selective one. Bootcamps are becoming more normalized than back in 2013. I’ve heard of some companies having a different interview process for bootcamp grads which takes into account that you’ve only been learning for just a few months. Traditional SE interviews are very difficult for bootcamp grads to pass due to the sheer volume of information you need to know. Totally doable over four years but maybe not in three months. I get the impression that there is little benefit to going to an unselective bootcamp, since you will be judged by the quality of your peers. By going to a better bootcamp you’ll also be taken more seriously when you do look for work. Not having been to one, I can’t really tell you much about the value. I do know they help a lot with networking, and you will learn a lot.
It’s worth mentioning that there are post-bootcamp/pre-interview courses which aim to prepare you for the technical software engineering interview specifically. These courses are sort of the natural evolution of consultants in this space scaling their expertise to a wider audience. 2016 costs are about $4k per, and instruction ranges from around 48 – 80 hours of instruction with more time expected to be allocated to homeworks. Examples in this space are Outco and Interview Kickstart. Outco generally targets the market of people who are trying to apply for their first job in SE and so they focus on both the technical aspects and the non-technical aspects, like networking. Interview Kickstart targets the market of people who are more experienced (~2+ years of work experience in SE) who are looking to succeed at very challenging technical interviews. I have taken both of these courses, and my aim was primarily to identify any areas I may be weak in (even if the feedback is just ‘all good’) rather than to polish any specific skills.
Masters programs in CS do exist where it is not a requirement to have an undergraduate degree in computer science. In my A/B testing I’ve found that Masters degrees are less valued than Bachelors degrees. I’ve spoken with a lot of software engineers about the quality of Masters students vs. the quality of Bachelors students in CS, and the consensus is that the average quality is less for Masters students, which is unfortunate, as you’ll be judged by your peers. So costs being equal, a Bachelors degree makes more sense in terms of employment value. However, Masters programs are often designed to be minimally disruptive to working professions (e.g. 1 year full time program). Also, if you choose a top-10 CS school to get your degree, you’ll be hitting two socioeconomic checkboxes at the same time, and you’ll effectively convert from non-traditional to traditional. I think that especially early in your career, like before your first job, this could make a lot of sense financially. Software engineer salaries routinely pay upwards of $100k, and sometimes beyond $200k. The tuition of a 1 year graduate program at Stanford is approximately $40k, so for the right person this can make financial sense. But to commit to this it’s really important that you know you’re going to be in software for 3-4+ years. That’s because applications for Masters programs occur 6+ months before matriculation, 1-1.5 years for the Masters, and then 1-2 years of work to recoup the cost of education. This is assuming you have the grades and coursework to jump immediately into a Masters program, which is not the case for the majority of non-traditional students. Again, it could be the right opportunity for the right person.
It’s pretty important that you get involved in larger programming projects if only because you will not be eligible for internships or research. The only capital you have left to show that you have experience working on larger systems is to build them yourself on your own time. This is sort of unfortunate, since even though you will have experience working on projects you will lack the mentorship that usually comes with that at an internship. Projects are definitely valued highly since the people who do these things seem more engaged as software engineers than average. The more self-directed, the better. It is slightly better to work on a large open source project than your own personal project since large open source projects will more closely mirror the codebase you will be working on at an employed role. Also, I suspect that the branding will be very helpful, so all things being equal definitely consider a widely known project, like Vim.
Despite doing all the right things, there are still companies that will refuse to interview you. I have heard that these are not the companies you’d want to work for, but some of the people who gave this advice were literally working for those companies and didn’t know it. There is some truth to rigid company cultures being unpleasant, but aversion to non-traditional candidates is extremely common before your first two years of industry experience, and then somewhat common afterwards.
Conclusions
A traditional vs. non-traditional background has real socioeconomic consequences for a career in software engineering. If you can avoid it, I would strongly recommend that given the additional obstacles to success you will need to overcome. If you can’t avoid it, I’ve described some things you should avoid almost entirely at first, like job boards and large companies. I’ve also described some things you can do which will increase your value, like working on high-profile open-source projects and possibly attending prestigious bootcamps or Masters programs. Lastly, I’ve described a reasonable course of seeking your first job, like spending large amounts of time networking exclusively in person and focusing on start ups.
It’s worth mentioning again that the personality quality that correlates most with long-term success here is motivation.