11 — Tools Setup: The Environment You Ship In¶
Your tools are as much a part of your competence as your code. A C engineer who cannot pull up gdb, run -fsanitize=address, and read Compiler Explorer output is not a C engineer yet. This folder is the exhaustive setup: what to install Day 1, what to defer, and honest opinions on every tool where the community is divided.
Total time to complete Day 1 setup: 30 minutes on macOS or Ubuntu 26.04. File 09_day_one_setup_script.md is the actual shell script; the rest is context so you know what you just installed and why.
Files in this folder¶
# |
File |
What it gives you |
|---|---|---|
00 |
This overview + Day-1 checklist |
|
01 |
macOS vs Ubuntu vs WSL2 tradeoffs |
|
02 |
gcc 15, clang 20, ccache, mold |
|
03 |
VS Code + clangd or Neovim + clangd |
|
04 |
gdb, lldb, rr, ASan/UBSan/TSan/MSan, valgrind |
|
05 |
Make, CMake, Meson, pkg-config |
|
06 |
perf, Instruments, hotspot, bpftrace, Tracy |
|
07 |
OrbStack/Colima, QEMU, multipass/lima |
|
08 |
Honest AI-for-C policy |
|
09 |
Actual bash script to run |
|
10 |
Apple Silicon vs Linux box, cloud specs |
The 30-minute Day-1 checklist¶
Print this. Cross items off as you install.
Base OS (choose one):
macOS 15+ with Homebrew installed
Ubuntu 26.04 LTS “Resolute Raccoon” (native, VM, or WSL2)
Compilers & core toolchain:
gcc 15.x (
brew install gccorapt install gcc)clang 20.x (bundled with Xcode CLT on Mac;
apt install clang lldbon Linux)make + cmake + ninja + pkg-config
ccache (
brew install ccache/apt install ccache)mold linker on Linux (
apt install mold); on Mac stay withld64— mold’s Mac port is not ready
Debug & sanitizers:
gdb (Linux) / lldb (Mac, comes with Xcode)
valgrind (Linux only; not on Apple Silicon)
ASan/UBSan already built into gcc + clang — verify with a test build
Editor:
VS Code +
llvm-vs-code-extensions.vscode-clangdextension, and disable the Microsoft C/C++ extension (they conflict). Or:Neovim with
nvim-lspconfig+mason.nvim+ clangd
Terminal / shell:
zsh(default on Mac) orbash— leave the shell alone at firsttmuxoptional but recommendedripgrep(rg),fd,bat,fzf— quality-of-life
Version control:
git 2.40+ configured with your name/email
GitHub SSH key set up
References open in browser tabs:
Once every box is checked, run hello.c:
#include <stdio.h>
int main(void) { printf("day 1.\n"); return 0; }
Build with gcc -std=c17 -Wall -Wextra -Wpedantic -O2 -g -fsanitize=address,undefined hello.c -o hello && ./hello. If it prints day 1. you are ready for month one.
What most people get wrong about tool setup¶
They spend Day 1 through Day 30 tweaking dotfiles and neovim configs and never write C. Rule: 30 minutes of setup, then 6 months of C code, then permit yourself another 30 minutes of tool tweaking. Every hour spent on your editor colorscheme is an hour not spent on K.N. King’s exercises.
Return to ../README.md · Next: 01_os_and_shell.md