Software Engineering Roadmap
Software Engineering Roadmap
Laptop Setup++
If you've not bought a laptop yet, buy a DOS laptop (with SSD and at least 8 GB RAM).
DOS/Ubuntu laptops are generally cheaper than a Windows Laptop. It is time to stop
using Windows now.
You need to start using a UNIX-based OS. If you have a MacBook then you already have a
UNIX-based OS. If you have a Windows or DOS laptop, install Ubuntu.
Move to Gmail if you use any other email service. Set it up on your phone as well.
Softwares to Install
After getting the laptop setup, install the following software on your laptop:
Google Chrome
Sublime Text
VSCode
Postman
Slack (on phone as well)
Zoom (on phone as well)
Discord (on phone as well)
Accounts to create
Create accounts on the following websites with your Google account/Gmail address:
LinkedIn
GitHub
CodeChef
workat.tech
HackerRank
Codeforces
Notion
Make sure to use the same (or similar) username everywhere. Prefer something
professional. Cool, funky usernames might not be a good idea in the long-term.
Use apps like Forest on your phone as well as on Chrome to keep yourself
focused and to avoid social media distractions.
Install Grammarly on Chrome and do all your writing on Google Docs with
Grammarly enabled. Try to learn from your mistakes and improve with time.
Compounding will make you a rockstar writer.
Subscribe to workattech's free WhatsApp newsletter to regularly receive
awesome programming and interview prep resources.
Connect with me on LinkedIn, Twitter, and Instagram.
Software Engineering
Every software that we use either through a mobile app, a website, or through a desktop
application has certain components. Let's talk about them and the roles associated with
those components.
What you interact with as a user is known as the frontend or the client-side application.
It involves the interactivity and the look & feel of the website/app.
Most companies have separate frontend roles for different types of applications:
Backend Developer
If the website/app requires internet connectivity then it is most likely interacting with
code running on the company's servers. Backend is the code/service running on the
servers. This is why these services are also known as server-side applications.
This code generally transmits data between one or more databases and the clients
(website/app) with a lot of processing and logic in between. Companies hire backend
for this work.
Many companies hire for generalist software engineer roles where you need to work on
both backend and frontend. Almost all of the top product-based companies hire SDEs
only.
Backend + Frontend = Full Stack. You need to be good at both backend and frontend to
become a full stack developer. Generally, you can be an expert in one and novice in the
other as well.
To get hired as a SDE or a backend developer, you need to focus a lot on Problem-
Solving and Data Structures and Algorithms as well.
Companies also hire DevOps Engineers or Site Reliability Engineers (SREs) who ensure
that you have a smooth experience and that the servers and other systems are robust
and stable.
They make sure that the backend systems is always up and running.
Other specialized roles
There are certain other specialized roles as well like ML/AI Engineer, Data Scientist,
Blockchain Engineer, Game Developer, etc. These are the ones that get the most hype
and in most cases with decent pay as well.
But there are not many jobs for these kinds of roles. You should not obsess about it
unless you have a good backup. Pick it up only after having strong foundations.
Mythbusters
Academics
Learning
You do not need to obsess over learning multiples languages. You can always
learn one when you need it. No one cares about how many languages you know.
Doing what is hot right now will not get you the job with the highest package.
Software Engineering is a fast-moving industry. What is hot right now may not
be 3-4 years from now.
Only Competitive Programming or only development might not get you an
awesome job. A mix of both is required.
Talent is not sufficient. Hard work is important as well. Hard work is also not
sufficient unless put in the correct direction. Follow the right people and the
right resources. Do not go behind the crowd.
Do active learning instead of passively consuming content or you will end up in
tutorial hell. Hands-on learning and Learning-by-doing is the key.
Placements
Do not focus on "cracking" the interview. Focus on your skills and learnings. Do
the right things and companies would be more than happy to hire you.
Doing well in academics will not be sufficient for getting a good job. Most of the
things that are expected of a software engineer are not taught inside the
classroom in any Indian engineering college.
Not everyone gets a high-paying job as advertised. No one gets a 1 crore job. The
package that you hear is stuffed with a lot of components that one gets spread
across 4-5 years.
Do not obsess over FAANG companies. Facebook, Apple and Google hires very
few freshers in/from India. Netflix does not hire freshers anywhere. Amazon
hires a lot of freshers but it is mostly on-campus. It is easier to get into Amazon
after college. A lot of companies in India pay more to a fresher than Amazon
does.
Upskill
Get out of your comfort zone. That is how you will learn. Challenge yourself all the time.
Being good in English is a huge advantage. If you are not good at it then you have 3
years to work on it. With consistent effort in the correct direction, you can do it in a few
months. Use Grammarly for improvement as mentioned in the setup section.
Personality Development
Try to be a part of at least one club/society. It might help you in your overall
development.
If possible, try to create a community based on your interest and find like-
minded people to collaborate with.
Participate in events and contests. Not for the certificates but for fun and
learning. Companies don't give a shit about certificates.
Warning: Avoid wasting most of your time in these things.
This is the best time to explore and do things you might never get a chance to do
otherwise. Just make sure to keep a backup though.
Try building a startup. After college, the opportunity cost of starting up can be
very high. College is the best time to start up. It does not matter if it succeeds or
fails. The learning would be enormous.
Spend time reading: books, blogs, documentation, etc. Some of the best content
in the world is in written format. Supplement it with videos, podcasts and
audiobooks.
Share your learnings. Become a creator.
o Writing is a great skill. Create a blog and start writing. You can learn stuff
during the process.
o Create a YouTube channel and try creating videos. This is something that
you should explore. I never did this myself. I wish I did.
There are certain languages that we recommend you learn. You do not need to learn all
of these at once. Do not obsess over multiple languages. You can always learn one when
you need it. No one cares about how many languages you know.
Highly recommended
These are the languages that we highly suggest you learn over the next two years. If you
build expertise over these you can learn any other language easily as and when required
within a few days.
I do not recommend you to learn one language after another. Start with the first
language. Learn the next one only when it is required. The roadmap will help you
determine that.
Optional
There are certain optional languages that you might learn when you want to specialize
in a field or while making projects. These can be learned very easily if you know
JavaScript and a strongly-typed object-oriented language like Java/C++/C#.
We recommend trying these out only when you are doing a project which requires
them. You won't be able to retain the syntax unless you use it for some time.
Anything else not mentioned here is generally not required. You can learn any other
language pretty fast on the job if required.
Now that you are ready, let's go through the second part of the software engineering
roadmap. If you follow it, it will help us become an awesome software engineer.
This article will cover the entire roadmap that you need to follow to get from a beginner
level in programming/software development to being an expert in it.
Expected Outcome
Expectations
Consistency
Hard Work
Right Direction
This roadmap will help you provide the right direction but you need to put in hard work
consistently to achieve what you want to.
Total Commitment:
We will try to become good at everything within 1 year with a consistent effort of
around 2.5 hours/day. After that, we will try to become experts in at least one field. If
you want, you can adjust the daily time commitment based on your preference.
If you follow this well then irrespective of your college and your branch, you will be able
to get a job in any company that you want.
Learn to code in any language of your choice with a strong focus on foundations. You
should aim to become extremely comfortable in coding. If you’re told the high-level
logic, you should be able to code it without much thinking.
A good practice while learning to code is to think about everything logically rather than
in terms of code.
Suggested roadmap
We highly recommend learning C and C++ followed by learning about object-orientation
and then transitioning to Java. Starting with C will help cover all major programming
concepts. It will be very easy to move to any high-level language (like C++, Java, Python,
Javascript, etc) quite easily if you know C. Though you can directly learn Java or any
other high-level language as well if you want to.
Learn different programming concepts like input, output, variables and data types,
operators, decision making, loops, arrays, strings, and functions.
While learning the language, write a lot of code for whatever you are learning to retain
the syntax and the various concepts. Solve a good number of problems where you can
use these concepts. This will help you get a hold of the syntax.
You can enroll in our 'Learn to Code in C/C++' program for a hands-on learning
experience.
This will require you to code in C++ (which is just C with object-orientation). Learn
about classes and objects (including constructor), encapsulation (including public and
private access specifiers, this pointer and getters and setters), and the static keyword.
You do not need to learn any other OOP concept at this stage.
Once you know the common programming concepts and have an idea about classes and
objects, you can learn Java pretty easily. Learn exception handling as well.
You do not need to learn multithreading or any other advanced concepts at this stage.
You just need to learn to write code in Java.
Convert your previously created solutions from C/C++ to Java. This will help you get a
hold of Java syntax.
Google is your friend. Learn how to get answers (keep improving forever)
One of the most important skills that you need to have. Try to become a power google
user. Most of the issues that you face will not be new or unique. Your friend Google
already knows how to fix it.
Whenever you are learning something and have a doubt, Google for the specific
doubt/error. Do not search for anything that is very broad. Try to get to the specifics.
Use Linux/Mac: If you have a Windows Laptop, install Linux. If you have a Macbook then
you are good to go. Start using the terminal.
Things to learn:
Learn the basics of Git and GitHub. Create a repository on GitHub and upload your codes
from the 'Learn to Code' section to that repository using the terminal.
Learn how the internet works. Learn about related concepts like HTTP, Browser, DNS,
Domain Name, Hosting, Client-Server Model, HTTPS. Visualize these concepts through
the terminal using commands like ping, whois, dig, wget, curl.
Learn to create basic frontend-only webpages using HTML, CSS, JS. Learn-by-doing and
build multiple projects using the learned concepts.
Suggested roadmap
Learn programming concepts through JS. If you already know another language, you
just need to learn JS syntax. Solve the problems that you solved in the 'Learn to Code'
section using JS. Learn error handling as well. No need to learn any other
concept/syntax at this stage.
Build a basic website using only HTML (2 weeks; 35 hours)
Build a few small webpages. These can be pretty basic and should use only HTML. Try to
create at least 5 webpages using a combination of the abovementioned things.
Learn how to add CSS to websites. This will help you design your websites and make
them beautiful.
color, background
height/width
typography (fonts, text, icons)
Learn about box model: content, padding, border, margin
Layout
o Display
o Flex, Grid
o Positioning, Float
o Overflow
o Alignment
Start by learning how to modify CSS properties directly in the browser. Then start
styling your webpages (built while learning HTML) with inline styling. After that,
migrate a few styles by using classes. Finally, move all the CSS to a separate CSS file
Once you have learned how to do these things, properly design all the webpages that
you previously created using only HTML.
Learn how to add JS to webpages to bring interactivity and logic to your website.
Once you have learned OOP and created a few implementations, learn Design Principles
to make your code designs better. Design Principles: DRY, KISS, YAGNI, SOLID,
Separation of Concern.
After this, solve a few design problems using these concepts. Try to write structured and
well-designed solutions.
Learn the basics of DBMS and relational databases. Become a power user of SQL with
some practice.
Start with basics of the language: how to add dependencies/external libraries. Then
learn about the basics of APIs, JSON, REST including HTTP methods.
Once you know the concepts, start building RESTful web services using Spring Boot. You
can learn more concepts as and when required.
Learn how to connect to the filesystem. Learn how to connect to the database.
Create multiple web services and connect to existing frontend projects or create basic
frontend projects to make your web services demoeable.
Become an expert in Data Structures & Algorithms (17 weeks; 284 hours)
Data Structures & Algorithms (DSA) is one of the most foundational topics in Computer
Science and is the most important topic for interviews. Job interviews require you to
solve problems in the best possible manner by applying your DSA knowledge. For
interview prep, the number of problems you solve does not matter a lot. Being a good
problem-solver matter.
There are many topics in DSA. Implement everything covered in these topics and in
parallel, try to solve a few questions related to the topics that you are learning. If you
understand DSA well, you can easily become an expert with some practice. You should
start by learning how to calculate the time and space complexity of a solution. Many
people avoid this step and face difficulty in optimizing their solutions.
DSA Foundations (Time & Space Complexity Analysis, Recursion, Divide &
Conquer) (1.5 weeks; 25 hours)
Basic DSA (Arrays, Linked List, Stack, Queue, Searching, Sorting) (3 weeks; 51
hours)
Basic Algorithms (Hashing, 2 pointers, Backtracking) (2 weeks; 33 hours)
Basic Maths for Programming (1.5 weeks; 25 hours)
Intermediate Algorithms (String Manipulation & Bit Manipulation) (1.5 weeks;
25 hours)
Intermediate Data Structures (Trees, Set, Map, Heap) (3 weeks; 50 hours)
Advanced Algorithms (Greedy, DP) (2.5 weeks; 42 hours)
Graph DSA (2 weeks; 33 hours)
You must continue doing the following until your interviews and potentially after that
as well if you like doing it.
Once you have a good understanding of DSA, regularly solve problems on LeetCode or
InterviewBit. Try to do this regularly until you get a job.
You may start with a low frequency (7 hours/week). Increase the frequency as you get
closer to interviews (30+ hours/week) depending on your comfort and preparation.
You should aim to master applying DSA concepts to almost any medium to hard
problems on the above platforms.
Build side-projects
Do peer-to-peer mock interviews with your friends or with other job-seekers on Pramp.
Start by doing a mock interview every 2 months, increase the frequency to more than
once a week closer to your interviews.
Build expertise
If you do all the things well mentioned till now, you can get a job/internship quite
comfortably. But why stop at this when we can be an expert in one or more fields.
Everything that we do beyond this will help us become sought-after engineers in the
long term.