Skip to content
wannacode

Welcome

In short: The Software Engineering course teaches how to write code that survives change: design patterns, clean code, algorithms, concurrency, security and software architecture.

Problem

You know the language. It still isn't enough

The program runs. Then the orders become a million and it waits a minute. A colleague adds a new payment method and breaks three other places. The visit counter is sometimes a few short, and nobody touched the code. Someone gets into an account that isn't theirs with one quote in the name field.

None of these is a syntax error. The compiler won't catch them. They come from how the program is arranged and what it does with the data, and they are the same in Java, C#, Python and JavaScript.

The idea

What you learn

  • Design patterns. Solutions to problems that come back in every project: how to add a new payment method without touching the old ones. And when a pattern is too much.
  • Clean code and refactoring. How to read someone else's code, see why it is hard to change, and improve it in small steps without breaking it.
  • Algorithms and complexity. The biggest module, with submodules: complexity, searching, sorting, recursion, data structures, graphs, dynamic programming, greedy algorithms, techniques and a project at the end.
  • Concurrency and race conditions. Why two threads lose increments of a counter, and how to protect the data.
  • Security for developers. Untrusted input, passwords, sessions and CSRF, tokens, secrets, dependencies and random numbers.
  • Software architecture. How a whole system is arranged: layers, modules and services, events, APIs, caching, scaling, and how to record why one option was chosen over another.
  • The architect at work. An add-on for solution and enterprise architects: from a business need to measurable requirements, options with their cost, a decision and a migration without downtime.

The idea

How you learn here

Every lesson starts from a problem in real code, like the one on the first card. 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. Then come small tasks and a test.

The text is the same for the four languages. The code is in the language you choose with "Code in:" above the lesson, and you can change it at any time. Every program in the course has been run and checked.

The idea

What you need to know

From the language you need at least the modules "Classes and objects" and "Collections". For concurrency, also "Real-world programs". Every module says at its start which lessons of the language it uses.

If something is missing, the course map is in C#. The module "Real-world programs" (tests, threads) is still being written for C#. Until then, the concurrency module here will have C# code, but for now you'll need the basics of threads from the lesson in another language.

Test

Check yourself

1. The program gives the right answer, but with ten times more data it waits a hundred times longer. Which module is about this?
2. Why is the course separate from the languages?

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