Software Engineering and Architecture
Designing Maintainable Software

Covers the basics of software engineering, with a focus on the software development lifecycle. Includes topics such as requirements gathering, system design, testing, and industry best practices.

A deep dive into designing and building maintainable software systems. Covers topics such as the managing complexity, properties of good software design, and common software architecture patterns.