A plan to become a somewhat competent C programmer through meaningful projects.
These projects build your skills progressively:
✅ Write clean, modular C code
✅ Manage memory safely
✅ Use common C tools (Make, gdb, valgrind)
✅ Understand system-level APIs (processes, memory, network)
Skills:
- Structs, enums
- Real-time input (
ncurses/termios) - File I/O (save/load high scores)
- Modular code design
Milestones:
- Draw the board/grid
- Take input without Enter
- Update game state + redraw
- Detect win/lose
- Save/load high scores
Resources:
Skills:
- Pointer arithmetic
- Linked lists (free list)
sbrkormmap- Memory safety
Milestones:
- Simple malloc with free list
- Implement free (merge adjacent)
- Write test programs
- (Bonus) Add realloc
Resources:
Skills:
- String parsing
- Processes (
fork,exec,wait) - I/O redirection (
>,<) - Signals
Milestones:
- Read + parse command line
- Run external programs
- Built-ins:
cd,exit - Handle Ctrl+C
- (Bonus) Redirection + pipes
Resources:
Skills:
- Sockets
select/pollor threads- Simple protocol design
Milestones:
- Accept single client + echo
- Support multiple clients
- Broadcast messages
- (Bonus) Usernames
Resources:
Skills:
- State machine design
- Virtual memory/registers
- Instruction decoding
Milestones:
- Load ROM into memory
- Fetch-decode-execute loop
- Implement opcodes
- Render (SDL or terminal)
Resources:
✅ Use valgrind to check memory
✅ Use gdb to debug
✅ Structure code: headers + separate files
✅ Write a Makefile
1️⃣ Text-based game
2️⃣ Malloc clone
3️⃣ Shell
4️⃣ Chat server
5️⃣ Emulator
- Add tests + README to each project
- Package with Makefile / CMake
- Document your code