software-engineering-lessons

CLAUDE.md

Guidance for working in this repo. Read this first.

What this repo is

A polyglot mono-repo of software-engineering lessons — each top-level directory is an independent learning module with its own toolchain. There is no shared root build; you cd into a module and use its native tools.

Layout at a glance

Path Module Toolchain Tests
agile/tdd/ TDD with JUnit/Mockito/AssertJ examples (auth, checkout, generic) Java + Maven mvn test
dsa-kotlin/ Data structures & algorithms in Kotlin Kotlin + Maven mvn test
code/fun-with-golang/ Go-by-example walkthrough; app/, config/, helper/, intro/{basic,medium,hard} Go 1.17 + Viper/Zerolog none yet
code/fun-with-kotlin/ Functional-style Kotlin Kotlin + Maven mvn test
code/fun-with-python/ Jupyter setup, GenAI labs (src/genai/), LLM playgrounds (src/llms/), CLI (src/cli/) Python + Docker (Jupyter) none
code/fun-with-typescript/ TS basics & pre-requisites TS none
code/fun-with-shell-script/ adb-bulk-export.sh, adb-bulk-delete.sh for Android backups sh n/a
system-design/topics/ System-design topic implementations Java + Maven mvn test
system-design/utils/ Go utilities — hash_func/, redirect_router/ Go none
devops/{linux,ci-cd}/ Cheatsheets (markdown only) n/a n/a
hooks/ pre-commit (runs tests), pre-push (branch-name check) sh n/a
scripts/ install-hooks.sh, run-tests.sh, run-branch-name-check.sh sh n/a
.github/workflows/build-ci.yml Path-filtered CI: runs mvn test only for changed Maven modules GitHub Actions n/a

First-time setup

sh scripts/install-hooks.sh   # points git core.hooksPath at ./hooks

After this, every commit runs scripts/run-tests.sh (executes mvn test in agile/tdd and dsa-kotlin) and every push validates the branch name.

Branch-name rule (enforced by pre-push)

Regex in scripts/run-branch-name-check.sh:

^((HEAD|feature|hotfix|conflict|bumpversion|revert|bug|fix|release|doc)(/|-)[A-Za-z0-9._-]+|^main$)

Examples: feature-go, feature/go-channels, fix-build-ci, doc/readme. Anything else fails git push.

Running tests by module

# Java/Kotlin Maven modules — from the module dir
mvn test --file agile/tdd/pom.xml
mvn test --file dsa-kotlin/pom.xml
mvn test --file code/fun-with-kotlin/pom.xml
mvn test --file system-design/topics/pom.xml

# Go modules — from the module dir
cd code/fun-with-golang && go test ./...
cd system-design/utils && go test ./...

# Aggregate (only tdd + dsa, as CI/hook does)
sh scripts/run-tests.sh

CI in build-ci.yml is path-filtered — it only runs mvn test for the modules whose files changed in the PR. If you add a new testable module, wire it in there too.

Conventions to follow

Quick orientation when asked to add something

What not to do