Introduction
Before becoming a software engineer, I was a Ph.D. student in philosophy. I get the sense that many Ph.D. students and Ph.D. recipients who lack tenure-track jobs stay in academia not because they want to be there, but because they can’t see a way out.
This is a mistake. One option, which I’ll talk about here, is to become a software engineer. There are concrete steps that you can take right now and in the near future to prepare for a career in software engineering.
Even if you’re unsure whether you want to become a software engineer, it’s worth taking at least some of these steps. You will be happier and less stressed out when applying for academic jobs if you have a good exit plan ready.
Why software engineering? Because there’s huge demand for software engineers, you don’t need a relevant degree to get a job, you can teach yourself the necessary skills, it’s intellectually interesting, the pay is good, and philosophers make good software engineers.
How to prepare
Self-study
If you have never coded before, pick a language and learn the the basics of coding. “The basics” includes things like variables, arrays, loops, functions, and conditionals. These will be common to most languages you use. Python, JavaScript, and Ruby are good languages for beginners.
Once you know the basics, practice by writing simple algorithms. Project Euler has coding challenges that you can practice with. LeetCode, HackerRank, and Codewars are other poplar coding challenge websites.
At some point you should start building actual applications. The Odin Project is a useful guide if you’re interested in web development.
You should spend most of your study time writing code. But there are a couple of books that you should read. One is Cracking the Coding Interview. It’s marketed as a job prep guide, but it’s also useful as a computer science reference. Another is Clean Code, especially chapters 2-4.
Courses at your university
As a Ph.D. student at Cornell, I was allowed to take any course, at no extra cost to me, including undergraduate courses outside my area of study. I took advantage of this opportunity to take computer science courses. Check whether your university gives you the same opportunity.
Online courses
MIT OpenCourseWare and edX have computer science courses freely available. I haven’t tried them, but if you are unable to take computer science courses at your university, this might be a good alternative.
Udemy and Udacity also offer coding-related courses, though when I tried Udacity I found it to be frustratingly slow paced. My sense is that you should rely on sites like Udemy and Udacity only if you find it impossible to make progress on your own.
Coding bootcamps
What: A coding bootcamp is an intensive course in software engineering. Most bootcamps run for around three months and involve 60 to 70 hours of work a week. If you graduate from a good bootcamp, you can expect to get a software engineering job within a few months of graduation.
To be clear, you attend a bootcamp for the skills it gives you, not the credential. In a job interview, you would generally downplay the fact that you attended a bootcamp.
Cost: Most bootcamps cost around $10,000 to $20,000. Some give you the option of signing an income sharing agreement. That means you pay nothing upfront, but pay a certain percentage of your salary for a certain amount of time after you get a job. 17% for two years is a common rate I’ve seen. If you can afford it, paying upfront is probably the better option.
Picking a bootcamp: Many bootcamps are bad. You should attend a good one, not a bad one. How can you tell whether a bootcamp is good? Online reviews of bootcamps (for example, on Switchup or Course Report), including bad bootcamps, are generally extremely positive. Ignore them.
Instead, carefully study the outcome reports of the bootcamps that interest you. An outcome report should include the bootcamp’s graduation rate, the six-month employment rate of its graduates, the average starting salary of its employed graduates, and a breakdown of the positions of its employed graduates (for example, permanent vs. temporary). Do not attend a bootcamp that refuses to provide this information.
Beware that many bootcamps present this information in a misleading way. For example, the reported employment rate is often calculated in a way that excludes certain graduates who failed to find jobs. If a bootcamp claims to have a 95% employment rate, it’s probably lying. (For a good bootcamp, something in the ballpark of 85% is more realistic.) CIRR has good, non-misleading outcome reports for many bootcamps.
The application process: A good bootcamp will require you to pass a technical interview before admitting you. The best bootcamps have admissions rates below 10%, though most allow re-applications from those not initially offered admission. Plan to spend a few weeks studying before the interview. If you are completely new to coding, budget more study time. The bootcamp will likely provide a study guide to give you a sense of what they expect you to know before the interview.
A note on getting a Master’s in Computer Science
This is probably a bad idea. See Jeff Kaufman’s thoughts:
[E]mployers don’t consider one to be a strong signal and most of what you learn isn’t relevant to working as a programmer. In most places I’ve worked, someone with N years of work experience is more valuable than someone with a Masters and N-2 years of experience. Financially these differ enormously in a way that makes a Masters clearly not worth it: not only do you pay tuition but you ‘pay’ the opportunity cost of two fewer years of employment (~$200k).
The job search process
Where to find job postings
- All the usual places (Glassdoor, LinkedIn, etc.)
- AngelList, which caters to startups
- Hacker News’s monthly “Who’s Hiring” threads
- The job postings from these are helpfully collected at HNHIRING
- Stack Overflow Jobs
- The “careers” page on a company’s website
How to write a resume
Model it on this template.
Limit yourself to one page. Focus on your technical skills and the software applications you’ve built. Resist the temptation to put your Ph.D. or academic work front and center: you want to look like a software engineer, not a philosopher.
Typical application stages
- You apply to a company
- You do a non-technical phone screen interview with a recruiter
- You do a technical phone screen interview with a software engineer
- You do a take-home coding project
- You do an onsite (the equivalent of a flyout in academia)
The exact stages vary by company. For example, some don’t bother with non-technical phone screens, and many don’t give take-home coding projects.
The only required application materials are a resume and cover letter. Unlike in academia, references are requested mostly as a formality and only after the company intends to make you an offer.
During interviews you’ll get questions that range from behavioral (“Tell me about yourself”) to technical (“How are variables scoped in JavaScript?"). Be prepared to talk about software applications that you’ve built.
Most onsites involve a whiteboarding interview, in which you’ll be asked to work out the solution to a coding challenge on a whiteboard. The coding challenge websites from section 2.1 will help you prepare for this.
Reasons for optimism
- Even if you currently have no coding experience, you have probably taken at least one or two logic courses. This will make it easier for you to pick up coding.
- Soft skills matter. Writing “good communicator” on your resume won’t help you get a job, but demonstrating good communication skills in an interview will.
- The odds are good. Unlike in philosophy, if you work hard and are even competent, then you will probably get a job within months of starting your job search.
Other resources
- More advice on transitioning to tech from Jeff Kaufman
- Cracking the Tech Career, by Gayle Laakmann McDowell, the author of Cracking the Coding Interview
- discusses networking, resume and cover letter writing, interviewing, and offer negotiation
- Job search advice from Felix Feng, a bootcamp grad
- Salary negotiation advice from Patrick McKenzie
- General advice for academics who are seeking non-academic jobs from Nate Meyvis, a philosophy Ph.D. and software engineer