B. Symbolic Systems
B.3 Computation and Information
Course description
Begin with Python, using Automate the Boring Stuff with Python alongside Harvard's free CS50x or Downey's free Think Python for a more structured route through the same fundamentals: conditionals, loops, functions, lists, and dictionaries. Write small programs as you go; the skill is breaking a task into steps you can specify exactly. Once the basics hold, move to data structures and algorithms: arrays, linked lists, stacks, trees, and graphs, then sorting, searching, and graph traversal, using Sedgewick's Algorithms or the free Problem Solving with Algorithms and Data Structures using Python. Learn enough Big O notation to say why one algorithm beats another. Ada Lovelace's 1843 notes on Babbage's Analytical Engine, especially Note G's procedure for computing Bernoulli numbers, are worth reading directly; whether she or Babbage deserves credit as "the first programmer" is itself a live historical argument, and following it is more instructive than repeating the label. Alan Turing's 1936 paper "On Computable Numbers", which defines the abstract Turing machine and the limits of what any computer can decide, is heavy going but is the paper that made "computation" a mathematical object.
For how computers actually run programs, build one from the bottom up: the Nand to Tetris project takes you from NAND gates through logic, a CPU, an assembler, and a compiler, with test scripts that check each stage automatically, and Petzold's Code is the readable companion for the same material. You do not need to become a hardware engineer, but you should come out understanding what a bit, a byte, and an instruction actually are. Learn enough SQL to query a table and enough HTML and CSS to make a page. For machine learning, Andrew Ng's Machine Learning Specialization (Coursera and DeepLearning.AI, 2022) is a reasonable entry point. Learn what the P versus NP question asks, without trying to prove anything about it.
Claude Shannon's 1948 "A Mathematical Theory of Communication" is readable in its opening sections and is where entropy gets defined as a measure of average surprise, alongside source coding and channel capacity, the two questions of how much a message can be compressed and how fast it can be sent reliably. MacKay's free Information Theory, Inference, and Learning Algorithms , chapters 1 through 6, gives the formal treatment once Shannon's paper has set the questions up. This connects forward to C.1's thermodynamic entropy and to E.3's use of information measures for complex systems.
Checkpoints
Each checkpoint is tagged with the stage of the cycle it tests.| Stage | Checkpoint | Attempts |
|---|---|---|
formalism | Without following a tutorial, write a program that simulates projectile motion with air resistance and plots the trajectory. | Post the first attempt |
formalism | Implement binary search and Dijkstra's algorithm from scratch and state their running times. | Post the first attempt |
formalism | Complete the Nand to Tetris CPU project with every supplied test passing. | Post the first attempt |
skepticism | Reproduce Turing's diagonal argument that no single program can decide whether every program halts. | Post the first attempt |
formalism | Compute the letter-frequency entropy of a large English text, compare it against the 4.14 bits per letter that Shannon estimated from letter frequencies alone[^shannon1951], then write a Huffman coder and check its compression ratio against that entropy. | Post the first attempt |
abstraction | Explain what Shannon entropy and thermodynamic entropy share formally, and where the analogy between them breaks down. | Post the first attempt |
Discussion
Proposed edits
Found an error, a missing idea, or a better source? Propose a change. A moderator reviews each proposal.Sources
- Harvard University. CS50x: Introduction to Computer Science (free, self-paced).
- Downey, Allen B. Think Python, 3rd ed. (Green Tea Press / O'Reilly, 2024; free online).
- Turing, A. M. "On Computable Numbers, with an Application to the Entscheidungsproblem." Proceedings of the London Mathematical Society s2-42(1), 230–265 (1936–37).
- Nisan, Noam & Schocken, Shimon. The Elements of Computing Systems and the Nand to Tetris course (free materials).
- Shannon, C. E. "A Mathematical Theory of Communication." Bell System Technical Journal 27 (1948): 379–423, 623–656.
- MacKay, David J. C. Information Theory, Inference, and Learning Algorithms (Cambridge University Press, 2003; free to read online).
- Shannon, C. E. "Prediction and Entropy of Printed English." Bell System Technical Journal 30 (1951): 50–64.