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
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
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
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)
Build a basic website using only HTML (2 weeks; 35 hours)
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)
Things to learn and use:
- color, background
- height/width
- typography (fonts, text, icons)
- Learn about box model: content, padding, border, margin
- Layout
- Display
- Flex, Grid
- Positioning, Float
- Overflow
- 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)
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. You can read about how to build expertise in the next part.
If you are at this stage, you should create a resume following the best practices.