- Colin
- Reimplement a nontrivial text-processing tool from scratch. (grep, sed, diff)
- Reimplement a nontrivial process-related tool from scratch. (ps, top, lsof, kill)
- Reimplement a nontrivial filesystem-related tool from scratch. (mv, chmod, chown)
- Reimplement a nontrivial networking-related tool from scratch. (telnet, ftp, curl/wget)
- Write my own kernel module
- Write my own device driver
- Learn modern C (including tools and patterns for writing safe C).
- Learn a modern non-C systems programming language (Rust)
- Modify and install a kernel from scratch
- Contribute a change to the Linux kernel
- Understand basic assembly
- Learn to use gdb
- Read through K&R and a "modern C" companion
- Learn to use ptrace/strace/dtrace
- Give a talk/workshop on C for beginners
- Document everything in a blog/journal
- Start live streaming coding sessions
- Write a blog-over-telnet service
- Learn valgrind
- Write a nontrivial application that uses some other library (libcurl, libcurses)
- Do some of the stuff above in Rust
- Do some of the stuff above in Go
- Do some of the stuff above in a crazier language like OCaml or Haskell
- Replace lighttpd with my own implementation on personal.pizza
- Put together a talk on C for non-C programmers
- Learn modern C (including tools and patterns for writing safe C).
- Reimplement a nontrivial text-processing tool from scratch. (grep, sed, diff)
- Reimplement a nontrivial process-related tool from scratch. (ps, top, lsof, kill)
- Reimplement a nontrivial networking-related tool from scratch. (telnet, ftp, curl/wget)
- Contribute a change to the Linux (or BSD or whatever) kernel