Guidance for working in this repo. Read this first.
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.
| 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 |
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.
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.
# 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.
paths-ignore: '**/*.md'). Useful for docs PRs..md changes for tests too in practice, because the Maven modules don’t touch markdown — but the pre-commit always runs mvn test regardless; expect a ~minute on docs-only commits.code/fun-with-golang/go.mod). Don’t bump without a reason.code/fun-with-golang/intro/{basic,medium,hard}/ — wire into intro/intro.go if it dispatches. Check GOLANG_EXAMPLE.md for the topic checklist.dsa-kotlin/src/main/kotlin/ + matching test in src/test/kotlin/.agile/tdd/src/{main,test}/ under auth/, checkout/, or generic/.system-design/topics/, Go utility in system-design/utils/.code/fun-with-python/src/genai/; bring up Jupyter via code/fun-with-python/setup/jupyter_notebook/init.sh.mvn test from the repo root — there is no root POM.--no-verify to skip the test gate..gitignore / .idea/codeStyles already.