Building a Career in Software Development Without a Computer Science Degree
- Do you want to get a job as a Software Engineer at FAANG Companies but do not have a computer science degree?
- Could you not get CS in your dream college because you ended up screwing JEE but want to build a career in tech?
- Did you join your non-core (!CS, !Electrical, !ECE, !MSM) branch just because you could not get the desired branch/college due to not so great JEE Rank, and now you are stuck because it's boring?
- Do you just want to get a job in coding with a handsome salary to support your family but do not know where to start?
- Are you from a Tier2 or Tier 3 college and do not have a mentor to guide you for building a career in Software Development?
If the answer to any of these questions is Yes!, Then you have come to the right place. :)
Before we start, I’d like to introduce myself and give a little background information. I am a graduate from IIT Roorkee from the Metallurgical and Materials Engineering Department without a decent CGPA. But currently, I am working for Amazon as an SDE-1 (Software Development Engineer) and I interned with the Google Summer of Code Program twice (2020 & 2019). If I can do this, so can you!
Let me introduce you to three friends Aayush, Bhaskar, and Chirag (names may or may not changed). They got JEE ranks of 2500, 7000, and 13000 respectively. They had several choices of colleges and branches. They could have a CS major at one of the new IITs or a noncore branch at one of the old IITs or CS branch at Tier 2 or Tier 3 college. They took the following choices:
- Aayush took Civil Engineering in IIT Delhi.
- Bhaskar took Electrical at one of the new IITs.
- Chirag joined a Tier 2 college with CS major.
Each one of them has his own grievances. Aayush is worried that not many companies would recruit software developers from his branch as it’s not related to Computer Science. Bhaskar is worried that since his IIT is a new one, so many companies may not visit it for campus recruitments and he may have to apply off-campus. Chirag has a CSE degree but is worried that he may not get recognition because his college is not Tier 1 and his peer group is not competitive. A grievance common to all three of them is that each one of them does not know how to build a career in Software Development and get a job at their dream company.
Can you relate to any of these three guys? Did you also choose a non-core branch in a reputed college because of brand value? Could you not get your department changed to CSE because you got a 7 pointer in your first year and the cut-off for CSE is 9.8? Do you find your department not interesting enough and now you are stuck with a low CGPA? Are you worried about the internship and placement season? Does your friend keep boasting about his Codeforces rank and you don’t know where to start? Are you confused about whether you should start Web Development or Machine Learning? Are you afraid that you won’t be able to build a career in tech because you screwed up your programming course in the first year?
If the answer to any of the questions above is Yes, then you’ll be happy to know that you can build a successful career in software development by following a simple strategy or path. All you need is a laptop and an internet connection and you’ll be good to go. In this post, I’ll be targeting the individuals who want to build a career in software development but do not have a CS major or proper mentorship from seniors for whatsoever reasons. We’ll be going through a road map that you can follow to cover all major topics of CS without feeling lost. I’ve seen people jump into Android Development without knowing Java/Kotlin or basics of Data Structures and Algorithms and therefore losing interest afterward. Don’t do this.
This post is relevant for all people out there irrespective of their year of study or branch. Even if you are enrolled in a CS degree or even if you are a graduate who’s looking to switch career or if you are looking for a quick guide to get a coding job in a small period of time, the post would be helpful.I’ll be only mentioning the essentials.
Here we begin:
I’ve divided the road map into three phases. After the first phase, you should be able to solve basic CP problems. After the second phase, you should be employable by major Tech firms like FAANG. The third phase teaches you web development to increase your chances of placement. The fourth phase will teach you about hotshot topics of CS like ML, DL, and other topics that may be of help while preparing for interviews and would be discussed in Part 2 of this article.
The most basic thing you need to get your hands dirty with programming is the knowledge of a programming language. C, C++, Java, Python are the commonly used ones. I’d suggest you go with C++. Why? Because it’s fast and it comes with STL. STL is the standard template library that comes with implementations of several commonly used data structures like vectors, maps, stack, queues. This way, you won’t be reinventing the wheel. Make notice here that in the interviews you won’t probably be able to use the STL as some interviewers are a pain in the ass and they may ask you to the implementation of algorithms without the use of containers from STL. Apart from them, STL containers come handy while solving online coding round problems and competitive coding. Where to learn it from? This playlist from thenewboston channel on Youtube is a good resource. The guide from the Tutorial Point and w3schools should serve as a good resource for documentation. Learn STL from this blog on HackerEarth, It has everything you need.
Next, you need to learn Data Structures and Algorithms. I’ll suggest a hybrid approach to learn DS/Algo for better results. Data Structures will serve as containers to store data in whatever hierarchy or form you need. Learn arrays from GeeksforGeeks and HackerEarth. Next, you need Linked List. Make sure you revise pointers and references before you hit Linked List or you may face troubles. Learn Stacks and Queues. Note that even though you can simply use “ stack<int>s;” to declare a stack 0(STL for the win), you still need to know how it is implemented using basic data structures like arrays and linked lists. Some interviewers will bug you over this. When I ask you to learn this or learn that, I mean read the theory from the given links and practice problems from that topic until you get comfortable and understand the functionality. For practice problems, you can use GeeksforGeeks for structured questions (Topicwise) or you can go to problems section of Hackearth for the same. I’m assuming you are smart enough to edit the link to get problems from different topics. Next, you need to learn Strings. Strings and arrays form an important topic and are favorite topics of interviewers apart from DP and Graphs.
Once, you are done with Strings, using your skills you can easily grasp questions from the matrix. Once you are done with this, you really would have come a long way and you deserve a pat on your back if you made it until here. Once you reach this point, you can start solving A and B level problems on Online Competitive Coding sites. Once you’re done with this, you’d have covered the following:
- Linked List
- Stacks and Queue
- Strings and Matrix
Online coding sites like Codechef and Codeforces hold regular contests for competitive programming(CP). CP refers to solving a problem in a time-bound format and you get points for solving each problem. The quicker you solve, the more points you get. Each contest has 5–8 problems with an increasing difficulty level. Try to solve A and B problems from these contests. Meanwhile to keep up with practice and to stay in touch with whatever you just learned I’d recommend that you go to this link. Solve problems in order. Solving 70–80 problems would give you the hang of it.
It’s time to head over to phase 2 now. You need to learn Hashing. This blog post on hashing should be more than enough to grasp the basics. Now, it’s time to learn the Analysis of Algorithms. You should know how to calculate the time complexity and space complexity of a random algorithm. Knowledge of T.C and S.C will help you to decide which algorithm will pass the test cases without giving memory Limit Exceeded or Time Limit Error. Usually, we can expect the server to execute about 10⁸ instructions in a second.
So, for a 1sec time limit: (Here N is the sum of input over all test cases.)
- N=10⁶-10⁷ : O(n) solution is required.
- N=10⁵ : O(nlogn) solution.
- N=10⁴ : O(n¹.5 or n(logn)²) solution.
- N=10³ : O(n²) solution.
Next, you need to learn ‘Searching’. Spend some time in solving Binary Search problems. The applications of binary search in problems may not be evident from the problem itself. Solve a number of problems to get used to this algorithm. Next head over to this link to learn Sorting. There are 9 algorithms given with different approaches. try to understand the working behind them. You won’t have to implement them in coding contests but some interviewers may ask you to write down their implementation or sometimes there can be a problem that requires the technique used in merge sort or insertion sort.
Next, you need to learn Recursion. It’s a technique by which a function calls itself. This blog post on GeeksforGeeks will be enough to give you a basic understanding of how recursion works and how to apply it. We are doing recursion because this will be greatly used in the forthcoming topics i.e B.T., BST, Graphs, etc.
Next, you need to learn Binary trees (B.T.), Binary Search Trees (BST), and Heaps (Priority queue). Binary trees, BST, and heaps are one the most favorite topics of interviewers. Know how to calculate depth, diameter, breadth-first search, depth-first search, in-order, pre-order, and post-order traversal. Other questions like side views of a tree and level order traversal are also common. Understand them well and get comfortable because these will form the basics which you’ll later use to understand graphs. After doing this you should start solving C level problems on the Codeforces problem set. Keep up practicing questions from Codeforces and Codechef. The major difference between Codeforces and Codechef is that Codechef is DS/AGO centric and Codeforces generally is maths centric. Most of the contests on CF can be renamed to Mathforces.
The third phase will begin by learning to solve questions through the Greedy Technique. Basically, you just need to choose the locally most optimal solution in a stepwise manner until you end up with the final solution. After this, the only major topics left would be Graphs and Dynamic Programming. these topics are hard, so bear with me a little. Learn Graphs from GeeksforGeeks and HackerEarth. You will begin by understanding graph representation through matrix form and adjacency list. Continue to Breadth-first Traversal and Depth-first Traversal. Solve problems from Dfs and Bfs. Know how they are implemented with and without recursion. Then move on to the Minimum Spanning tree. Learn Prims’s algorithm and Kruskal’s algorithm. Then Move on to Shortest Path Finding algorithms i.e. Dijkstra’s Algorithm, Floyd Warshall algorithm, and Bellman Ford Algorithm. Things may get a little bumpy here but the practice is the key. The more you practice, the more you’ll get hang of them. Then learn connected components and their working and Strongly connected components. Learn the working of Kosaraju’s Algorithm. If you learn the algorithms that I explicitly mentioned in this paragraph, you should be good to go.
Next, you need to learn Dynamic Programming. In Dynamic Programming, we trade space for time. By memorizing the values of different states, we save time by not calculating certain things again and again. Check out how Michal Danilak (mimino) explains DP in his Quora answers here and here. For a quick revision and understanding of the basics of DP and how it works, check this blog on HackerEarth. The more you practice DP problems, the more you’ll get comfortable in finding the DP state. Once you find the DP state, memorizing is the easy part.
After the third phase, you should continue solving problems on Coding platforms and should start applying for internships or placements. LinkedIn is the best place to find such opportunities. Increase your connections. Look out for openings. Internshala and Indeed are good platforms for applying to such openings.
The knowledge of DS/Algo and your CP skills should be able to fetch you offers from top MNCs. However, if not, you need to further enhance your development skills. The next important task you need to complete is to learn some actual software development.
If you are using Python or are more comfortable with it, you can learn Django for the backend framework. Python does not have any front end framework(not that I know of). For Java, you can learn Spring.
- Learn Git. GitHub is where everyone stores their project either o host/deploy it or to showcase them.
- Use Google and Stackoverflow efficiently. Stackoverflow is the go-to man for all your errors and problems. Just copy the error on Google and tada!!!
- Learn Docker. Docker is a set of “platform as a service” products that use OS-level virtualization to deliver software in packages called containers.
With this, we come to the end of Part 1 of “Building a career in Software Development without a Computer Science degree”. If this post is received well by people, then I’d be writing Part 2 where we will dig deeper into the development aspects of this field, Operating Systems, DBMS, Computer Networks, etc.
I’ll also be writing more about “How to get into GSoC Program without any Open source contribution experience and my Amazon story” and “how to prepare for FAANG interviews”. It would be helpful if you could follow me on Medium. You’ll get notified of new articles and I’ll stay motivated to keep writing more.
This post is inspired by Aman Goel’s post on a similar topic. You can check that out too.
At “theSWEshow”, we discuss the latest trends in software development, tips, and tricks to do stuff, do’s and not-to-do's while building your career in software development and much more.