Software Engineering 101

A comprehensive guide to software engineering fundamentals using Python as the primary language. This series covers essential practices, principles, and tools that every developer should master to write professional, maintainable code.

Series Overview

Through my experience building production systems and mentoring developers, I've learned that knowing a programming language is just the beginning. The difference between writing code and engineering software lies in the practices, principles, and discipline we apply to our work.

This series distills the core software engineering concepts I wish I had learned earlier in my career, presented with practical Python examples you can immediately apply to your projects.

Learning Path

spinner

Articles in This Series

Phase 1: Foundation (Articles 1-3)

Article
Title
Description

1

Git fundamentals, branching strategies, commit best practices, and collaborative workflows

2

Python tooling, virtual environments, IDE configuration, and project structure

3

Linting with Ruff, formatting with Black, type checking with mypy

Phase 2: Design & Structure (Articles 4-5)

Article
Title
Description

4

Writing readable, maintainable code with clear naming and structure

5

Object-oriented design principles with practical Python examples

Phase 3: Quality Assurance (Articles 6-8)

Article
Title
Description

6

Unit testing with pytest, test structure, and assertions

7

Mocking, fixtures, integration tests, and test-driven development

8

Docstrings, README standards, and maintaining documentation

Phase 4: Professional Practices (Articles 9-12)

Article
Title
Description

9

Exception handling, structured logging, and debugging strategies

10

GitHub Actions, automated testing, and deployment pipelines

11

Review best practices, PR workflows, and team collaboration

12

Containerization, configuration management, and observability basics

Prerequisites

  • Basic Python programming knowledge

  • Command line familiarity

  • A code editor (VS Code recommended)

  • Git installed on your system

What You'll Learn

By completing this series, you'll be able to:

  • Collaborate effectively using Git and modern version control workflows

  • Set up professional development environments with proper tooling

  • Write clean, readable code that follows industry best practices

  • Apply SOLID principles to design maintainable software

  • Test your code thoroughly with pytest and modern testing strategies

  • Document your projects clearly and effectively

  • Handle errors gracefully with proper logging and debugging

  • Automate quality checks with CI/CD pipelines

  • Conduct meaningful code reviews that improve team code quality

  • Prepare applications for production with containers and monitoring

Technology Stack

Throughout this series, we'll use:

Tool
Purpose

Python 3.11+

Primary programming language

Git

Version control

pytest

Testing framework

Ruff

Fast Python linter

Black

Code formatter

mypy

Static type checker

GitHub Actions

CI/CD platform

Docker

Containerization

VS Code

Recommended IDE

This series focuses on software engineering fundamentals. For deeper dives into specific areas, see:

How to Use This Series

  1. Sequential Learning: Articles build on each other - start from Article 1

  2. Hands-On Practice: Each article includes exercises - do them!

  3. Reference Guide: Use individual articles as quick references later

  4. Project Application: Apply concepts to a real project alongside reading

Sample Project

Throughout this series, we'll build a Task Management CLI application that demonstrates all concepts:

This project is intentionally simple but comprehensive enough to demonstrate professional practices.


Ready to begin? Start with Article 1: Version Control with Git


This series is part of my ongoing effort to document practical software engineering knowledge. For questions or feedback, feel free to open an issue in the repository.

Last updated