Skip to content

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

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

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.