Bauhaus System Architecture

Bauhaus System Architecture

Software design, like any design, is near impossible to teach — it's more of an experience, an intuition. Through a series of lectures and guided exercises, we'll cover important design patterns, learn to build platforms instead of solutions, and draw on industrial design, architecture and urbanism for inspiration.

Duration

4 weeks, 24 hours in total

Times

Two evening classes a week

Team size

Up to 10 people in a group

Price

3,500 ₪

Cool — I'll ping you when it's on!

Curriculum

The early 20th century saw a lot of anxiety about art's loss of social relevance and the soullessness of mass manufacturing. Bauhaus aimed to reunite fine art and functional design, creating practical objects with souls of artwork. This course aims to do the same for software: unite the theoretical computer science with practical software engineering, resulting in beautiful code and good, maintainable and extendable architecture.

This is easier said than done: how do you teach design? We try it all: from general abstractions for problem solving and managing complexity, through classical design patterns and best practices, to more novel ideas about building platforms, decoupling and disaggregation.

We'll talk about the usual suspects: dependencies, state, edge cases and compounding complexities. There are many ways to mitigate it — whether it's practical methods like dependency injection and Uncle Bob's Clean Architecture, or philosophical ideas like the Pareto principle, the Sapir-Whorf hypothesis, progressive disclosure, "worse is better" and many more.

Then, we'll try the old way, and go over design patterns such as strategy, abstract factory, singleton, factory method and template method. We'll see why they used to work, and why they're mostly irrelevant at this point, settling once and for all the immortal question of composition vs. inheritance.

Instead, we'll take a novel approach, and draw inspiration from industrial design, architecture and urbanism. We'll see how people tend to focus on short-lived solutions, rather than build platforms that enable the future (and how to do so from a project management perspective). We'll review real case studies from Unix and Python, as well as practical examples like plugins, middleware and aspect-oriented programming.

Finally, we'll talk about the bigger picture, and see how all the components fit within one architecture. Whether it's utilities like proper logging and configurations, or infrastructures like databases (both SQL and NoSQL) or message queues, we'll learn to disaggregate them intro microservices, spin everything using Docker and Kubernetes, and deploy it to the cloud, wrapping everything up in nice, RESTful and gRPC APIs.

The course is intended for experienced programmers who want to broaden their horizons and learn new ways to tackle the challenges of software engineering and design. You should be familiar with Python (ideally, having done my other course), and understand that there's no silver bullet: we won't learn one method to rule them all, but rather have a dialectical overview of different paradigms, and understand the philosophy behind each one.

Testimonials

First time in my life I that I give a full score. The teacher was excellent, well-versed in the material, answered questions in depth, and provided clear and concise examples.
RAD
The philosophical discussions were my favorite part. They gave me a different point of view on the world of programming, making it far less dull :)
Tel Aviv University
I really enjoyed how the course had so much personality! it's definitely a course I will remember later on in life.
Tel Aviv University
The course was great. The only one I actually came to all the classes of throughout the semester.
Tel Aviv University
Cool — I'll ping you when it's on!

Scholarship

Knowledge should be free — that's why I publish a lot of my materials online. But seeing as I can't scale my time, I have to charge money for it; and unfortunately, some people don't have the means to participate. So, every course iteration, one spot will be reserved for someone who couldn't have afforded it otherwise.

If you think you qualify, shoot me an email, tell me a bit about yourself, why you're interested in the course, and your situation — and we'll figure something out.