Software Engineering Roadmap

By the end of the first phase, you would have certainly completed a basic programming course. For your second phase, you should aim for a course in Probability and Statistics. Almost all colleges offer such courses and you should enrol in the course offered by your institute. You can choose to sit through the course. But definitely take a probability class early in your curriculum. The course offered by MIT OCW is quite good.

Taking probability class will also help you reinforce some of your linear algebra concepts which are important for many CS courses. Some may argue about the need for a probability class. However, you should note that every good student takes at least 1 course in Probability and Statistics. The concepts taught in Probability and Statistics are extremely useful from both learning and application point of view. The concepts are widely applicable in Machine Learning - in case you want to build your career in the same.

Once you’ve completed the course on Probability and Statistics, you should aim to take the following 2 courses:

- • Data structures and algorithms
- • Discrete mathematics

Data structures and algorithms is a course without which you cannot proceed ahead in computer science. It is a fundamental course and every student must take one such course.

This course will be slightly difficult. It is highly technical and even the best students get bowled when challenging data structures and algorithms problems are thrown. This course will literally be a test of your patience and so, be patient. If you are able to complete this course, you will be 50% closer to your goal.

The crux of Computer Science lies in the ability to see problems from a technical angle and come up with solutions. This is exactly what you’d get to learn as a part of Data Structures and Algorithms course and therefore, it is extremely important that you take this course seriously in order to develop a successful career as a Software Engineer.

Maths lies at the heart of Computer Science and Discrete mathematics is a course that teaches you mathematics for computer science. You will be studying mathematical induction, combinatorics and other stuff. The course is one of the most fundamental and most important courses that you’d take.

Here are the resources we would strongly recommend:

- • Algorithms, Part I - Princeton University | Coursera. This is an excellent course. The course is taught in Java. If you don’t know Java, that’s okay. Spend considerable time in understanding what the professor is teaching and try to implement it in whichever programming language you know. Your focus should be on the core concepts of various data structures. Once you are through with these concepts, it would be easy for you to implement them in any programming language of your choice - be it C/C++ or Java or Python.
- • Mathematics for Computer Science. This course is offered by MIT and known to be quite good. Take this course to master Discrete Mathematics.

Recommended books:

- • For data structures and algorithms, the book suggested by Robert Sedgewick is quite good. The other recommended book is Cormen, but it is slightly more involved and contains rigorous mathematics which you may not appreciate. Cormen is usually the most recommended book for Data Structures and Algorithms. However, you should note that the book is quite mathematical and that level of deep mathematics may not be recommended for all. If, however, you love challenges, surely try the book - it is an amazing read.
- • For discrete mathematics, Kenneth Rosen is the recommended book - an excellent read. Kenneth Rosen contains excellent theory with detailed illustrations and sample problems for a deeper understanding of concepts. The book also boasts of thousands of challenging Discrete Mathematics problems. If you are fond of maths, you’d love this book.

Throughout your 2nd Phase of learning, keep in mind - write as much code as you can. Unless you write code, you won’t learn. Try to implement everything you learn in Data structures class. Knowing the concepts if good. Also knowing how to implement them is great.

For college students, the 2nd phase would usually last during the 2nd year of college. For working professionals, this phase should take a couple of months, typically 2 - 4 months, depending on your current level and the amount of time you can commit to learning new things.

Follow below phases to become a great software engineer