How I Became a Software Engineer Without a CS Degree

Open macbookPro on desk next to coffee mug

Four years ago, I hit “apply” on a Software Engineering job posting despite my lack of a computer science degree. The demand for more developers is high, but the skills are tedious to learn. Yet out of all the engineering disciplines, software is the one most likely to open its doors to self-taught bootstrappers and entrepreneurial spirits. With the draw of high salaries and flexible work environments, plenty of people take on the challenge. This is my story of how I switched to development with little previous experience.

Note: there may be affiliate links in this post, which means I receive a commission if you click through to these sites at no extra cost to you.

My Catch-All Degree

It was time to decide a major, but I had yet to have a magical epiphany about what I should do with the rest of my life. Sophomore year I had to pick something. 

After a bit of wandering (I first declared a double major in Physics and Communications) I landed on something that would open up the most doors to me: mechanical engineering. When I googled what people do with mechanical engineering degrees, there were hundreds of results. I figured I could narrow it down later.

Equations and notes from my system dynamics class
Some fun throwback notes from my system dynamics class

My Summer Internships

I worked each summer during college (except for the summer we traveled across Europe)

After graduating, I interviewed with a biotech company for an internship. Two days following my interview, I got a call at the base of a ski run. I figured that it was my friend calling, as we had just taken different routes and were separated. I ripped off my gloves and quickly answered the phone, not to my friend but to a job offer!

ski run with sun glare and blue skies
Skiing was my favorite weekend activity during college

The engineers needed to know what issues customers were having with their product. My assignment was to create a dashboard with the information. Nobody else on the team had those skills– and to be honest, neither did I.

I learned SQL to get the information out of their database, taught myself enough Python to aggregate the data, and then used some third-party libraries to make graphs to display the data. This was my personal crash course with software engineering. I built up some rudimentary skills and nurtured a slowly budding confidence.

As autumn approached, the internship neared its end. I knew that I wanted to move to the West Coast once I wrapped it up, so I started looking for jobs.

Apply Anyway

Most jobs I came across wanted 5 years of experience, even for junior roles. Of course, I had a whopping two months of working experience. I applied left and right to jobs that sounded interesting, even if I didn’t hit all of their requirements.

coffee shop computer code
I studied a lot!

Now I laugh a bit at my chutzpa. Looking back, there’s no doubt that I applied to senior roles for which I was obviously unqualified. Even though I was punching above my weight, I knew that job descriptions are guidelines and not definitive.

Friends asked me why I would even bother applying for software jobs without the degree. One asked if I really thought I could hack it with no experience.

I took it as a personal challenge. One posting listed experience in Java and C++, two languages I hadn’t used yet, but they wanted a junior-level developer so I gave it a shot.

Prepare for the Interview

I studied up on specific computer science knowledge like data structures and algorithms. Just like in my actual work as a software engineer, Google came to the rescue for these sorts of questions.

These are some of the resources I used:

  1. Leetcode and Hackerrank — interactive platforms for practicing coding interview problems.
  2. Cracking the Coding Interview — a book packed full of example coding questions.
  3. Daily Coding Problem — a mailing list that sends a problem a day.

The job posting mentioned specific qualifications such as familiarity with “Test Driven Development,” so I practiced that style of programming until I had a good handle on it. If I had to do it again, I would throw in a personal project as well– the goal was to learn by doing.

The Interview

I was still working at my internship while applying for jobs across the country. I did all of the pre-interview screenings over the phone. The company told me that I could interview over the phone as well. I looked for flights anyway because I thought being there in person might increase my chances.

I found a roundtrip flight using Frontier for $58. Yes, $58 for a ROUNDTRIP flight. I booked it immediately.

flying over mountain range with some clouds

They were looking for an eager-to-learn junior engineer. They asked some technical questions, but most centered around team-fit type questions. I have been in much more difficult interviews since then, so I am thankful that the interview for my break into software engineering was more conversational.

They wanted to know about the languages I was familiar with, hobby Arduino projects I had worked on, and why I wanted to switch industries. I received the offer within the week, negotiated my pay, and set a start-date for three days after my move-in date.

For the record, I never had to use Java or C++ in that role, so whoever wrote that job description missed the mark.

The Work

You could say that my first project was baptism by fire; I was dropped into a high profile project with little direction. I learned about virtual environments, bash scripting, and automation, as well as the ins-and-outs of our product.

What is great (and terrible) about software development is that you are constantly learning what you don’t know. And you don’t know a lot. It opens up this great cavernous maw of books to read, articles to reference, and code shortcuts you scramble to write down.

closed macbook with plant and colorado sticker
My laptop at my first job repping Colorado

I didn’t know what to expect when I took the software job, to be quite honest. I know all the stereotypes, and I was not coding silently in a basement somewhere, hoodie over my noise-canceling headphones, grunting unintelligibly at the project managers. The socially-awkward but wickedly smart engineer still existed, but he was a minority.

Coding did not fit the stereotypes

Instead, I ran meetings, wrestled with workflows, argued over architecture, and spent most of my days collaborating AND coding.

After delivering the first project, I swapped teams.

One of my coworkers went rogue and wrote an entire application by himself, but quit the day before it launched. The next day, I was on-call to support users, despite not having any more of a clue of how it worked. I got several calls that day when they couldn’t figure it out and I guided them through it with a mask of confidence I did not feel.

A lot of software engineering for me has been this: working to solve complex issues I don't quite understand with a confidence I don't quite feel. But you stay for the challenge. Click To Tweet

Ultimately, I’m thankful for my entry-level job because although it all felt overwhelming at the time, it prepared me to launch into a new career.

My Career

Some people ask if I regret not doing mechanical engineering work. It’s hard to miss what you haven’t done, and I am sure that a job as a mechanical engineer would look very different than school. Besides, the skills from mechanical engineering easily translate into software development. In both industries, you design and build new things while solving different problems each day.

Open computer with code and woman's hand

Overall, I’m quite pleased with the switch, as coding provides flexibility and a ton of transferable skills. Certainly managing this blog has been much easier since I can change the code to make it work how I want!

There is also a great expanse of things to learn. I don’t think I could ever be bored at work. I learn something new daily, and I don’t see that stopping any time soon. Even software engineers that have been coding longer than I have been alive learn new tricks. I’m glad that I pursued software engineering even though I didn’t have the ‘right’ degree.

What about you?

Have you gotten a job without the ‘right’ degree? How do you approach applying to new jobs?

Get Posts Delivered Straight To Your Inbox!

17 Comments

  1. I too am a programmer without a CS degree (no college degree). It sounds like a mechanical engineering degree was still helpful with what you are doing now. My experience is quite a bit different than yours, but I think we both learned what we know now from trial by fire. I think the best skills a programmer (specifically web developer) can have are 1) problem solving 2) grit 3) communication 4) willingness to learn and be wrong.

    It is interesting because I’ve led interviews with people who have had CS college degrees and those without. It seems like there are quite a few programmers who feel their degree is more valuable than it is, and are very arrogant. I’m not saying a CS degree doesn’t have value, but IMO (at least with web development), it really only can make a good candidate stronger. If a programmer is depending on their college degree, I think that is a bad sign, or they should be looking for entry level positions.

    I will say that part of me thinks I would have learned some of the core programming concepts sooner if I got a CS degree, but then I realize that the 4-years of real world experience would still probably be much more valuable. This might be different in other programming fields though.

    1. Those four tenants for programming are on point. You’re right– the best candidates have more than a degree, they have projects they are passionate about or problems they are working through. I also wonder if I missed some serious fundamentals without the CS degree, but unfortunately I don’t think school always reflects real-world application. I’m interested to hear about your adventures into programming with no college degree!

      1. Yeah, I think college might cover high level concepts, but I also question how well they prepare programmers for the real world.

        I made a note for a possible future article to talk about my career path. I don’t look at myself as anyone extraordinary, but it does have me excited to think about my career journey.

  2. This mirrors some of my experience as well! I graduated with an IT degree and a bunch of programming experience outside of college from side projects, but without the serious math and theory side CS majors get.

    One thing I’ve seen a bunch too: filling in for a senior dev when they leave. Those were the times when I grew the most in my roles. At every job I’ve been in, more senior devs lefts and I took up some of the slack.

    Your mention of all the time NOT programming is on point too. So much time in meetings, communicating between the team, setting goals, making sure requirements are met, testing, deploying – it’s a lot!

    I think that’s one reason why some people leave to join smaller companies – they want more time actually programming and creating. Or they do their own thing (which I’m doing now and has been amazing).

    One thing that a lot of people do when learning programming (and I catch myself doing when I learn something) is trying to learn EVERYTHING. I think it’s much more efficient to pick a target project, or something you want to make, and learn what you need to know to make that a reality.

    1. Filling in for a senior dev was definitely a step up for me, as well as working on a 2-person dev team with a guy with >20 years of experience– I just tried to keep up! I wonder how much I learned on my own vs. from other people.

      Yes, meetings are the death of devs. Have you read Managing Humans? He has a nice diatribe about meetings, I felt very heard in that book! I’m excited to see what you accomplish as a rogue developer!

      There definitely has to be a balance with breadth versus depth in one’s career. I think going for breadth is good early on, then you pick a couple things to dive into and go deep mid-career, and at the architect level you go for breadth again. But it depends on each person and where they want to go in their career. Definitely trying to learn EVERYTHING is going to overwhelm you with anything when you first start. Better to try a small project (which will inevitably become a large project) and learn what it takes to get there, I completely agree.

  3. I became a developer by choice but the false assumption that you need a degree for that caused spending 7 years in higher education to bag a three year BSc. I learned a lot but what you can use depends on what kind of programmer do you become. I choose web application development and I have to admit that I use almost none of the knowledge the university gave me. Most of my knowledge comes from my high school programmer teacher, the later concepts are mostly so scientific that you almost never use them in simple web apps. If I’d have a chance to start over I would definitely join to a bootcamp (these wasn’t a thing back then) and go for a shortcut. I guess you need about two years to learn what you need for a web developer job and yes, you learn most by doing it. About these language requirements… if you are thinking the right way, you think logically and you have solid basic programming skills then it is just a matter of time to get used to any language. I have non programmer friends who has this mindset and they would excel in programming if one day the would decide to go that way. Same time I have programmer friend who are not the best in these things, still they are having a career as developers. Sometimes the fake it till you make it principle works 😉

  4. Great post! I’m also a software engineer without a CS degree although by way of bootcamp. I wish I knew that a degree wasn’t necessary sooner, but I try to remind myself that it’s not helpful to dwell on things like that.

    1. True, and bootcamps weren’t as big of a thing until recently either. What did you do before software engineering?

  5. Wow! What a tale (you have a way with words!) and thanks for sharing. I worked in my field (journalism) for a few years but then pivoted into marketing – which wasn’t hard really as so many of the skills transfer.

    1. It’s great to hear success stories of career pivots! Each industry and job has a ton of transferable skills, sometimes we don’t know it until we have already made the switch. I could definitely see the relationship between marketing and journalism– the critical thinking, research, and writing skills are certainly pros for both.

  6. With all the online resources for learning programming/etc we have nowadays, a degree is pretty much completely unnecessary. And with how insanely inflated the cost of attending college is… yeah.

  7. Hey financial mechanic!

    As a mechanical engineer trying to go into software engineering you have no idea how happy I was to find this blog (via the Fire Drill podcast!).

    I was wondering if you’ve encountered any obstacles in career progression because of the lack of a CS degree at all? Also you were pretty lucky to start your switch right away! I’m three years into my career and it seems like employers are less likely to consider me for “recent grad” entry level positions.

    1. Hi Angela!
      So far I haven’t encountered any obstacles in my progression, although during technical interviews I do get nervous that I will be asked some fundamental CS question that I never got around to learning. That’s frustrating that they are less likely to consider you. If you can get a few more languages on your resume from practicing and change your resume to highlight any coding you may have done in your jobs, that may help. I’m glad you got here from the Fire Drill podcast! I had a blast recording that with Gwen and J!

  8. Congrats! I’m an engineering manager at a Big N tech company and some of my best engineers are self-taught. The self-taught engineers tend to have different strengths and weaknesses viz-a-vis engineers from more traditional CS backgrounds, so they can help round out a team nicely if you manage them correctly.

  9. I graduated with a mechanical engineering degree but after a year I did not like it. After that, I was given an opportunity to earn my Master’s in teaching so now I teach engineering at the high school level for 2 years now and I still do not enjoy that! Lol. After, I complete 1 more year of teaching, I plan to transition in data science/software engineering through a bootcamp like Springboard. Hopefully, I can make the transition too!

Leave a Reply