Learning path
Software engineering
Practise the habits of building maintainable software: unit tests, safe refactoring, SOLID design, design patterns, version control, and clear contracts.
About this subject
Software engineering is about building programs that stay correct and understandable as they grow and as teams change them. It covers testing, design, maintenance, and the tools and processes teams use to work together.
This path covers unit testing with unittest, refactoring with tests as a safety net, SOLID design and dependency injection, the observer pattern, a model of how version control stores history, and design by contract with exceptions. Each lesson uses a small, complete program that runs on its own. Python has the full sequence. The other languages listed below add lessons that use that language's own idioms and standard library, such as Java threads, C++ smart pointers, C# LINQ, or Node.js streams, and appear only for the topics the language supports. The programs are simplified models chosen to make an idea visible, so they are a foundation for further study rather than a replacement for a full course or for production-grade software.
Before you start: Classes, functions, and exceptions.
- 1
Python
Readable code for automation, data, and first programs.
Unit testing with unittest
Write small automated tests that check normal behavior, boundaries, and error handling.
Refactoring safely with tests
Restructure code without changing its behavior, and prove that behavior is unchanged.
SOLID design: depend on abstractions
Pass behavior into a class so it can be extended without being edited.
The observer pattern and an event bus
Let a publisher notify many subscribers without knowing who they are.
How version control works: commits, history, and merge bases
Model a commit graph as hashes and parents, and find the common ancestor used to merge branches.
Contracts, invariants, and exceptions
State what a function requires and guarantees, and fail fast with clear errors.
- 2
C
Learn memory, pointers, and efficient systems programming.
- 3
- 4
Java
Understand object oriented programs and the JVM.
- 5
- 6
Kotlin
Write concise, typed code for JVM applications.
- 7
JavaScript
Add behavior to the web and build applications.
- 8
TypeScript
JavaScript with static types for dependable code.
- 9
PHP
Learn server-side web programming basics.