Fundamentals
The essential skills every software engineer must have.
If you're pursuing a career as a professional software engineer, you should dedicate the first three to six months to mastering the fundamentals.
Here are the courses I believe you should take, listed in order. Depending on your knowledge and experience level, you can take all the courses in order, or just pick the ones that are best for you.
Programming Languages
I have several courses on various programming languages such as Python, Java, JavaScript, and C#. Professional software engineers often know more than one language, but if you're starting out, just focus on one language. I recommend you learn Java first, even if you're not planning to use it in the future. Java is a classic programming language with amazing features. Once you learn Java, you can quickly and easily switch to similar languages like JavaScript, C#, C++, etc.
Ultimate Java Part 1: Fundamentals
Ultimate Java Part 2: Object-oriented Programming
Ultimate Java Part 3: Advanced Topics
Data Structures & Algorithms
Studying classic data structures and algorithms helps you improve your programming and problem-solving skills. These topics are frequently asked in coding interviews, and this course will help you master them.
Ultimate Data Structures & Algorithms: Part 1
Ultimate Data Structures & Algorithms: Part 2
Ultimate Data Structures & Algorithms: Part 3
Design Patterns
Design patterns are engineered solutions to common problems in software design, and are often asked about in coding interviews. There are 20 classic design patterns commonly known as GoF (Gang of Four) patterns. The following courses help you learn and understand these patterns and appreciate object-oriented programming techniques.
Mastering Design Patterns: Part 1
Mastering Design Patterns: Part 2
Mastering Design Patterns: Part 3
Version Control and Collaboration
Version control is like a time machine for software engineers. It allows you to go back in time and see the exact state of your code at any point. This is incredibly important because it means you can easily track changes, fix bugs, and collaborate with others without the fear of losing or messing up your code.