Become a Software Engineer without a Computer Science degreeJimBlockedUnblockFollowFollowingMar 16This post is based on my own experience.
In the current economy (as of 2019), becoming a Software Engineer is financially rewarding.
Quite rewarding, as a matter of fact.
A couple example webpages below should demonstrate this point.
Software Engineer salaries in San Francisco Bay Area (source:LinkedIn)Software Engineer salaries in Facebook, Google, Microsoft, etc (source: levels.
fyi)In 2013, I was living in a room rented from a house shared with the landlord.
At the age of thirty, I was particularly upset about this fact.
I desperately wanted a job that could pay decently so that I could afford a decent life for myself, for my wife, and eventually for my children.
I had discovered that I had a passion about programming from five years of writing data analysis and plasma physics simulation code in grad school.
So I decided to become a Software Engineer, even though I didn’t have a degree in Computer Science.
Fortunately, it turns out it was the right choice.
And because of that, I have fulfilled my wish about having a decent living for myself and my family.
Now, allow me to share my views on what takes to become a Software Engineer without a Computer Science degree.
First, you need to be determined.
The reward is very high, but it is going to be a tough journey, especially when you have to juggle your time with your other full-time responsibilities, like a job or raising kids.
Second, be prepared.
I will explain below how to prepare, which is the meat of this post.
Set up a coding environmentYou will need a computer and some software to practice coding.
I recommend a MacBook Pro for the computer.
If you don’t have one already and cannot afford a brand new one, check out craigslist.
Usually you can find a deal there for an old model.
The reason why I prefer a Mac is because the Operating System, macOS, is a unix-like OS and offers a lot of convenient command-line tools (git, bash, vi, etc).
For software, I recommend you get familiar with these tools: iTerm2, bash, Homebrew, Intellij IDEA Community Edition (a Java IDE), and vi.
You can find a lot of good video-based and text-based tutorials online on those tools.
Just pick something relative short and go with it.
No need to do extensive research before you settle.
For starters, below are some text-based tutorials that I think of good length and basics.
Working effectively with iTerm2Bash Scripting Tutorials for Beginners (This is a little more than you need to know for job interviews, but it will pay off in the long run, should you become a Software Engineer.
)Homebrew Demystified: OS X’s Ultimate Package ManagerCreating, Runing, and Packaging your first Java application, by Jetbrains (Don’t worry if you don’t know Java just yet.
I will cover how to learn Java below.
)A very simple vi tutorialIn terms of timeline, I think it will probably take one week or two to get yourself familiar with the basics of all those tools.
Fundamental data structures and algorithmsYou don’t necessarily need to go over the full curriculum of Computer Science major to get a Software Engineer job, but you do need to prepare the fundamentals.
Specifically, you need to have a strong grasp of basic data structures and algorithms and some common concepts, noticeably the big-O (ie, time/space complexity of an algorithm).
I will not cover them in detail here, but I will include links for starters.
Of course, you will also need to learn programming languages, which I will talk about in detail below.
Data structuresStringArrayLinked List.
There are two basic types of linked list, singly and doubly.
More often than not you will be dealing with singly linked list for coding problems.
QueueStackTree, especially binary tree and binary search tree.
Also, it is good to understand B-tree (often used to implement databases).
One important property of hash tables is it has constant average access time (ie, time complexity of O(1)), which is often the key to solve some coding problems.
HeapThe above links are mostly from GeeksforGeeks.
For entry-level Software Engineer jobs, if you have a strong grasp of the above data structures, you are a strong candidate.
When it comes to coding interviews, usually you don’t need to implement those data structures, but rather assume they are available to use and you just need to use them correctly to solve the problems.
It pays to know other sorting algorithms, too, especially the differences between them in terms of time/space complexities.
Breadth-first search (BFS) and depth-first search (DFS).
These are the most common algorithms to traverse a graph.
Trees can be viewed as special graphs, so tree traversal algorithms often fall into these two buckets, too.
This is not a specific algorithm but rather a type of algorithms.
Also, it is an advanced topic, so be patient with yourself if you are taking more time than you expect to grasp the topic.
This is also an advanced topic.
Be patient with your learning.
Learning adviceThere are too many resources available for learning data structures and algorithms.
The key to progressing steadily is to focus on one resource and go through the topics persistently.
For that, I strongly recommend the GeeksforGeeks website.
All the data structures and algorithms above are covered there.
And a lot more.
If somehow you find some content in the website hard to understand, my recommendation for plan B is search the topic on Youtube and watch some tutorials there.
Another recommendation is to mix your reading with exercising.
There are two great websites for exercising coding problems: leetcode and lintcode.
Both provide filtering by topic, so you can choose the problems in line with your recent learning.
Now, here comes a much more important point: you will be using at least one of them many many times, before and after you become a Software Engineer, so use them well.
Eventually you will find yourself spend a lot of time in exercising on those two websites.
The reason is simple.
Learning the data structures and algorithms is by and large one-time effort.
But exercising coding problems never ends, even after you become a Software Engineer.
I used leetcode primarily myself, but lots of my friends strongly recommended lintcode, so I guess they may be equally valuable.
Another note about these two websites is you will likely need to subscribe to their paid services for features you want.
My experience is that the $99 subscription fee has been one of my best investments since.
When exercising on l(ee|in)tcode, you need a strategy.
And it is not to be original.
Namely, do not aim to solve every problems by your own ideas.
You will not go too far with that approach.
Instead, timebox your independent thinking.
My recommendation is to think of a solution for yourself for 15 minutes.
If you cannot come up with one, that’s OK.
Study the best solution and internalize it.
More important, make a note of it.
Here is an example of my own note.
BTW, you can generally find the best solution with Google, although I primarily searched the Discussion forum on leetcode for that.
Programming languagesAs a Software Engineer, eventually you will learn maybe a dozen of programming languages.
However, you only need one for cracking coding interviews.
My recommendation is Java.
This may not become your long-term language for work, but you can’t go wrong with it for interviews.
What’s important is to be good at it.
You will find tons of java tutorials online.
I only recommend one: the official Java Tutorial website from Oracle.
Now it’s important that you can successfully follow through the Jetbrains example mentioned above in the Set up a coding environment section, because it means you have a working playground to practice java programming.
The official Java Tutorial website covers an extensive list of topics.
However, I only recommend you go through these trails below in that order:Getting Started.
Note that since you have the Hello World example working in Intellij IDEA, you don’t have to follow along the hands-on Hello World example there, but please try to understand the text.
Learning the Java languageCollectionsEssential Java ClassesOnce you go through those trails, you should be able to express most coding problem solutions in java.
However, you will likely need to learn more languages for enriching your resume.
I will address this below.
ResumeThis part is hard if you don’t have any relevant experiences or a relevant degree.
I am not a resume expert, but I do know this: a successful resume should get you interviews.
There are three important sections of a resume: experiences, education, and skills.
Education is hard to change, but you can enrich the experiences and skills relatively quickly.
I assume you have little to none relevant experiences, otherwise you probably wouldn’t need to read this far.
So, in that case, I recommend you make a website, and share the code in Github.
Use gradle as the build tool for the server-side application.
(If you don’t know what this means, don’t worry.
Just ask Google.
The basics can be learned quickly, although you need to research.
) In terms of the functionality of the website, choose something simple and hopefully interests you.
For example, you can make a Todo list website, where people can log in and manage todo items (create, edit, mark done, etc).
In my experience, working on such a project is much more fun than exercising on l(ee|in)tcode.
Now, suppose you have worked on that project for a couple weeks.
Write down things you have accomplished in your resume, including the work you have carried out in the experiences section and the technologies you have used in the skills section.
Your resume shouldn’t be longer than one page, so pretty soon you will have a complete resume.
Visually, at least.
Finally, assume this: if you cannot get interviews, it’s because your resume is not good enough.
Keep at it.
Job hunting tipsYou will be doing a lot of work, applying to a lot of jobs, and sending out a lot of resumes.
No doubt about that.
However, there are things you can do that will leverage other people’s time and thus scale up your job hunting.
First, build a strong LinkedIn profile.
Many tech recruiters use LinkedIn to search for candidates.
A strong LinkedIn profile with detailed work and skills will boost your odds to show up in recruiters’ radar.
Second, try to find at least one staffing agency that will work with you for your job hunting.
A staffing agency will significantly boost your odds to get interviews.
Don’t play this card too soon, though.
If you continue failing interviews for too many times, the staffing agency will likely lose interest in you.
My recommendation is that, if you can comfortably solve a hundred problems of easy to medium level on l(ee|in)tcode, then you are ready, both for finding a staff agency and for taking coding interviews.
Final NotesLet me remind you again that becoming a Software Engineer without a Computer Science degree is a very tough undertaking.
So, be determined and take it seriously.
It’s hard to give a general timeline for how long the process will take.
In my case, it took about six months, although it could have been much shorter when I look back now, because no one shared this post to me and I took quite a few unnecessary detours.
When you finally land a Software Engineer job, be aware that people value a Computer Science degree for a reason, so learn Computer Sciences.
You already lack the degree.
Don’t miss the knowledge, either, if you want to excel as a Software Engineer rather than end up being a mediocre coding technician.
The CS curriculum for undergraduate students of Stanford University is a good place to start.
.. More details