Programming
Programming is turning an idea into instructions a computer can follow. This section goes from what languages are to how real systems are built. Read it top to bottom, or jump to what you need.
A suggested path
flowchart LR
A[How languages work] --> B[Pick and learn a language]
B --> C[Algorithms and data structures]
C --> D[Frameworks and tools]
D --> E[Design bigger systems]
E --> F[Share and maintain: open source]
B -. practise .-> P[Projects]
C -. practise .-> P
E -. practise .-> P
1. Understand languages
| Note | What it gives you |
|---|---|
| Levels of Programming Languages | Machine code to high-level: how far a language is from the hardware |
| Programming Language Categories | Procedural, object-oriented, functional, logic and scripting, with examples |
| Language History and Contributions | Who made what, and why |
| Compilers, Interpreters, Hybrid | How source code becomes something that runs |
2. Learn languages
The individual language notes are in 06. Languages, for example Python, Java, JavaScript, Go, Rust, C, C++, C-Sharp, Bash and Powershell. Not sure which to pick? See Choosing a Language.
3. Think in algorithms
Sorting Algorithms, Heuristic Search, and the optimisation methods in Metaheuristics. Practice ideas with a "what you will learn" column are in What to Program.
4. Use frameworks and tools
- Frameworks: what they are and how to choose one.
- Django in practice: data modelling, multi-tenancy, payments, background jobs, async.
- Editors and IDEs: Text Editors.
5. Design systems
System Design covers scaling, caching, data stores, reliability patterns and worked designs, plus how to size a system (Capacity Estimation) and pick tools (Choosing Data Stores).
6. Share and maintain
Open Source: licences, good contributing manners, running a project, versioning and security hygiene.
7. Extras and research
- HTTP Server, Telnet, CGI Setup, SSH setup: small hands-on guides in
12. EXTRAS. - Research Notes: writing papers with LaTex and BibTeX.
Habits that matter in every language
- Read more code than you write, and read the error message first.
- Make it work, make it right, make it fast, in that order.
- Write small functions with clear names; comments explain why, not what.
- Use version control from day one and commit small, meaningful changes.
- Test the boring parts so you can change the exciting parts safely.
- Measure before optimising.