At some point, I would like to write:
- a toy compiler
- a toy debugger
- a toy database, relational
- a toy filesystem
- my pet idea for a GraphQL resolution engine
- try at least one CTF
- put together a cyberdeck
and also I need to learn Erlang.
- π Getting Started with Erlang: User's Guide
- π OTP Design Principles User's Guide
- π Mnesia User's Guide
- π π Learn You Some Erlang
- π Programming Erlang. Software for a Concurrent World by Joe Armstrong
- π Erlang Programming. A Concurrent Approach to Software Development
- π Designing for Scalability with Erlang/OTP by Francesco Cesarini, Steve Vinoski
- π π Γtudes for Erlang
- π π The Erlang Runtime System
- π π Making reliable distributed systems in the presence of software errors, Joe Armstrong's 2003 PhD thesis
- π©βπ An Erlang Course from the official website
- π©βπ University of Kent Erlang master classes
- π Modern C, Jens Gustedt
- π 21st Century C, Ben Klemens
- π Linux kernel coding style
- π How to C in 2016
- π The Definitive C++ Book Guide and List
- π Learning C++, Sy Brand - article, includes links to good blogs
- ποΈ C++ 2003 - a public Anki deck based on C++ Primer, 4th edition
I have actually written more than one interpreter over the years, but never had to deal with a "...to assembly" part, or optimization.
- Let's Build a Compiler, Jack Crenshaw
- Writing a C Compiler, Nora Sadler (based on Ghuloumβs paper)
- Someone's nice summary on Stackoverflow
- Crafting Interpreters, Bob Nystrom
- Compilers: Principles, Techniques, and Tools, Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
- Modern Compiler Design, Dick Grune, Henri E. Bal, Ceriel J.H. Jacobs, Koen G. Langendoen
- Compiler Construction, Niklaus Wirth
- Practical Compiler Construction, Nils Holm
- A Retargetable C Compiler: Design and Implementation describes lcc - toc and lcc v. 4.2 code, not the same as the version described in the book
- Essentials of Compilation
- Modern Compiler Implementation in C, Andrew Appel, Maia Ginsburg
- Modern Compiler Implementation in ML, Andrew Appel
- Stanford University, Compilers, 2014 - Carnegie Mellon University, 15-411 Compiler Design
- Carnegie Mellon University, 15-417 HOT Compilation
- UC Berkeley, UCB CS294-113: Virtual Machines and Managed Runtimes
- University of Maryland, CMSC430: Introduction to Compilers
- UC San Diego, CSE131: Compiler Construction, 2018
- UC San Diego, CSE131: Compiler Design, 2016
- Swarthmore College, CS75: Principles of Compiler Design, 2016
- Swarthmore College, CS75: Compilers 2019
- University of Pennsylvania, CIS 341 - Compilers, 2020
- Northeastern University, CS 4410/6410: Compiler Design, 2020
- An Incremental Approach to Compiler Construction, Abdulaziz Ghuloum
- A Nanopass Framework for Compiler Education, Dipanwita Sarkar, Oscar Waddell, R. Kent Dybvig
And now I'm glad I included those C books up there!
- Writing a Linux Debugger, Sy Brand
- How debuggers work, Eli Bendersky (and also follow the linked references)
- How debuggers really work, Levente Kurusa, and the talk: slides and recording
- Loading and ptrace'ing a process on Linux, part of a series Writing a Debugger
- Let's build a simple database, someone did this already :)
- Readings in Database Systems aka "Red Book"
- CMU Advanced Database Systems course (incl. projects, course videos)
- Architecture of a Database System, Joseph M. Hellerstein, Michael Stonebraker and James Hamilton
As it happens "a toy filesystem" is something I've done previously (access to an e-mail inbox via POP, iirc). It was fun and I'd like to apply the same principle to something else. Really, I just want to play around with systems programming. And so:
- You can be a kernel hacker!
- Eudyptula challenge (someone else's repo, since the original challenge is defunct)
- https://wiki.osdev.org/Main_Page
- https://kernelnewbies.org/
- π "Modern Operating Systems", Andrew S. Tanenbaum
- π "Operating Systems: Three Easy Pieces", Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau
- π "Advanced Linux Programming", Alex Samuel, Jeffrey Oldham, Mark Mitchell
Turns out I messed up terminology: CTFs are competitions with specific dates, whereas online challenges are called wargames. Fine. I want to try solving at least one wargame.
- π How to Get Started in CTF with a list of books etc
- π What is CTF and how to get started! learning resources, links to challenges etc
- π π CTF Field Guide
- π π CTF Resources
- OverTheWire teaches some of the basic skills
- cryptopals, cryptography challenges
- Micro Corruption teaches assembly, low-level debugger use
- Smash the Stack
- a list of permanent CTF challenges / wargames
πππ·
- /r/cyberDeck
- /r/MechanicalKeyboards
- /r/MechanicalKeyboardsUK
- /r/AnnePro
- NXP i.MX7D Starter Kit for Android Things
- there exists a London Hackspace except, annoyingly, the whole of London is in the way
- https://learnawesome.org/
- Emoji that work in Github, a cheatsheet
Lots of biographies. Some of them I have, some of them I don't, may add / remove books over time.
- Hackers: Heroes of the Computer Revolution by Steven Levy
- Surely You're Joking, Mr. Feynman! by Richard Feynman
- What Do You Care What Other People Think? by Richard Feynman
- A Mind at Play, by Jimmy Soni and Rob Goodman
- GΓΆdel, Escher, Bach: an Eternal Golden Braid by Douglas Hofstadter
- A Brief History of Time by Stephen Hawking
- The Strangest Man: The hidden Life of Paul Dirac, Quantum Genius by Graham Farmelo
- American Prometheus: The Triumph and Tragedy of J. Robert Oppenheimer
- Where Wizards Stay Up Late: The Origins of the Internet by Katie Hafner
- The Idea Factory: Bell Labs and the Great Age of American Innovation by Jon Gertner
- Ghost In The Wires by Kevin Mitnick
- Programming Pearls by Jon Bentley
- Writing Efficient Programs by Jon Bentley