Skip to content

Instantly share code, notes, and snippets.

@joseph0x45
Created June 17, 2025 12:01
Show Gist options
  • Select an option

  • Save joseph0x45/999f0befb0e67f38520eb2dd08867d60 to your computer and use it in GitHub Desktop.

Select an option

Save joseph0x45/999f0befb0e67f38520eb2dd08867d60 to your computer and use it in GitHub Desktop.

C Programmer Competency Roadmap

A plan to become a somewhat competent C programmer through meaningful projects.


🌟 Overview

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)


🚀 Projects in Order of Difficulty


🟢 1️⃣ Text-based Terminal Game (Snake / Tetris / 2048)

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:


🟠 2️⃣ malloc/free Clone

Skills:

  • Pointer arithmetic
  • Linked lists (free list)
  • sbrk or mmap
  • Memory safety

Milestones:

  • Simple malloc with free list
  • Implement free (merge adjacent)
  • Write test programs
  • (Bonus) Add realloc

Resources:


🟣 3️⃣ Simple Shell

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:


🔵 4️⃣ TCP Chat Server

Skills:

  • Sockets
  • select / poll or threads
  • Simple protocol design

Milestones:

  • Accept single client + echo
  • Support multiple clients
  • Broadcast messages
  • (Bonus) Usernames

Resources:


⚫ 5️⃣ Emulator (e.g. CHIP-8)

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:


⚡ General Tips

✅ Use valgrind to check memory
✅ Use gdb to debug
✅ Structure code: headers + separate files
✅ Write a Makefile


🌱 Suggested Project Order

1️⃣ Text-based game  
2️⃣ Malloc clone  
3️⃣ Shell  
4️⃣ Chat server  
5️⃣ Emulator

🎁 Bonus Ideas

  • Add tests + README to each project
  • Package with Makefile / CMake
  • Document your code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment