Skip to content
wannacode

Software engineering

You know the syntax, classes and collections. The program runs. Then the real questions come: why it waits a minute with a million orders, why every change breaks something else, why the counter is sometimes wrong, how someone gets into an account that isn't theirs. The answers are not in any one language, and they hold for all of them. This course is about them.

  • Design patterns: proven solutions to problems that come back in every project, and when not to use them.
  • Clean code and refactoring: code that another person (and you, a month later) can change without fear.
  • Algorithms and complexity: how fast the work grows with the data, searching, sorting, data structures, graphs, dynamic programming.
  • Concurrency and race conditions: how two threads spoil each other's data, and how to protect it.
  • Security for developers: untrusted input, passwords, sessions and CSRF, tokens, secrets, dependencies and random numbers.
  • Software architecture: layers, modules and services, events and queues, API design, caching, scaling and recorded decisions (ADR).
  • The architect at work: an add-on for solution and enterprise architects: measurable requirements, trade-offs, resilience, integration, migrating live systems, architecture review and a project.

Every lesson starts from a problem in real code. Then the idea is shown with a scene, synced to the code line by line: how the objects move, how the number of steps grows, how the threads interleave. The text is the same for the four languages, the code is in the language you choose, and every program has been run and checked. You can switch the language in any lesson.

One of the four languages, at least up to "Classes and objects" and "Collections". For concurrency, also "Real-world programs". Every module says at its start which lessons of the language it uses.

Made by Ivo Gergov as part of Evo Tech's campaign for accessible programming education ·