0% found this document useful (0 votes)
137 views

Software Engineering Roadmap

Uploaded by

prashmitha gnana
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
137 views

Software Engineering Roadmap

Uploaded by

prashmitha gnana
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 12

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.

Email Service to Use

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.

Stay Focused, Learn and Grow

 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.

Frontend Developer + Mobile Developer

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:

 Website: UI/Frontend Developer


 Mobile Apps: Android Developer, iOS Developer

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.

Full Stack Developer/Software Development Engineer (SDE)

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.

DevOps Engineer/Site Reliability Engineer (SRE)

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

 Maintaining a decent CGPA is required (7.5+ at least. Preferred: 8+). Most


companies keep a minimum GPA requirement of something between 7 and 8.
 Branch does matter. You can always learn the CS basics if you want to. It is not a
big deal. Branch matters as most tech companies do not allow students from
other branches during on-campus placements. Though you can always get an off-
campus placement if you work hard.

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.

Things you should try apart from coding

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.

Follow your passion

 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.

Become a learned person

 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.

Programming Languages to learn

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.

 First Language (for concepts)


o C and C++
 Object-Oriented Programming Language (for backend)
o Java
 Command Line Language (for being a power terminal user)
o Bash
 Markup Language (for building websites)
o HTML
 Style Sheet Language (for styling websites)
o CSS
 Language of the web
o JavaScript

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.

Languages that you might learn while building projects:

 TypeScript (JS with types)


 React (JS library for building UI components)
 Python (for basic scripting and trying out ML/DS stuff)
 Kotlin (for Android)
 Swift (for iOS)
 Flutter/React Native (for cross-platform native apps)
 Go/Scala (for highly scalable systems)

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

 Good at most of the things in software engineering


 Yet to build expertise in any field
 Projects for learning and resume
 Set for good placements
 Irrespective of college or branch

Expectations

These three things are most important to do well in any field:

 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.

Assumption: Avg. 2.4 hours/day (2 hrs/day on weekdays; 3.5 hrs/day on weekends)

Total Commitment:

 44 weeks/734 hours (~1 year) for Foundations and Intermediate


 After 1 year: Avg. 2.4 hours/day for Learning, Interview Prep, and Side-Projects

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.

Foundations (22 weeks; 366 hours)

Learn to code (6 weeks; 100 hours)

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 programming concepts through C (4 weeks; 70 hours)

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.

Learn about object-orientation (3 days; 6 hours)

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.

Transition to Java (12 days; 24 hours)

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.

Become a power computer user (3 weeks; 50 hours)

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.

Learn regular expression (4 days; 10 hours)


This is an extremely useful skill that you should have at your fingertips. Learn the basics
of regular expression (language-agnostic). Practice the learned concepts in Java (or any
language that you know).

Learn the basics of command-line (2 weeks; 35 hours)

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:

 Basics of bash: echo, read, variables.


 Interact with the filesystem: ls, cd, pwd, cat, touch, head, tail, cp, rm, mv, mkdir,
find, etc.
 Input/output redirectors.
 Regular expression in bash.
 grep, sed, and awk.
 file permissions in general and how to work with them using bash.
 Programming concepts in bash: decision making, loops, arrays, strings,
operators, functions, etc.

Learn how to use (and exit from) vim. :p

Make sure to practice using these regularly after learning.

Learn about VCS, Git, and GitHub (2 days; 5 hours)

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.

Internet 101 (1 week; 16 hours)

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.

Frontend Development 101 (9 weeks; 150 hours)

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 to code in JavaScript (1.5 weeks; 25 hours)

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)

Learn about HTML which is the building block of a website.

Things to learn and use:

 adding headings, paragraphs, images, links, lists, tables


 creating a form, adding text fields, and button
 adding other input fields like radio button, dropdown, checkbox, etc
 div, span, head, body, doctype

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.

Design websites using CSS (1.5-2 weeks; 30 hours)

Learn how to add CSS to websites. This will help you design your websites and make
them beautiful.

Things to learn and use:

 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.

Add interactivity and logic through JavaScript (3.5 weeks; 60 hours)

Learn how to add JS to webpages to bring interactivity and logic to your website.

Things to learn and use:

 Basic DOM manipulation


 AJAX
 Events & Event Listeners
 Chrome DevTools & Debugging
Add interactivity and logic to webpages that you created using HTML and CSS.

Start building better projects after learning HTML, CSS, JS

Learn Object-Oriented Programming (3 weeks; 50 hours)

Learn Object-Oriented Programming concepts (Encapsulation, Inheritance,


Polymorphism, Abstraction, and Composition) using Java.

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.

Intermediate (22 weeks; 368 hours)

Backend Development 101 (5 weeks; 84 hours)

Learn about DBMS and SQL (2 weeks; 34 hours)

Learn the basics of DBMS and relational databases. Become a power user of SQL with
some practice.

Build RESTful web services (3 weeks; 50 hours)

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.

Topics to learn and practice:

 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)

Practice and Build Expertise (at least until getting a job)

You must continue doing the following until your interviews and potentially after that
as well if you like doing it.

This will help you:

 prepare a solid resume


 prepare for interviews
 build expertise

DSA Interview Preparation [Very Important]

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

 Be consistent: Keep building side projects regularly. Preferably end-to-end.


 Start small: Start with smaller projects and move to bigger projects with time.
 Create a team: Involve multiple people to work as a team. Try to get a designer as
well on the team.
 Build clones: Try to build specific features from commonly-used apps/websites.
 Build a startup: Think of business ideas and try to build them.
 Open-Source: Publish the projects on GitHub (if the side-project is not a potential
startup).
Peer-to-peer mock interviews

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.

Please reach out to me on WhatsApp at 9732130450 if you have any questions.

You might also like