05 — The Wrong First Project

Probability: 40%.

The portfolio has a specific rung ordering for a reason. The failure mode here is skipping the ordering because a later rung looks cooler, biting off more than can be chewed, and getting stuck for six weeks on something that should have been two weeks. This kills more motivated learners than pointer arithmetic ever will.

Description

Month 2 or 3. You are excited. You’ve done the basics. K&R is going well. You look at the portfolio list and see Rung 4 (a mini-shell) or Rung 5 (a small HTTP server) and think: I want to build THAT, not another strcpy clone. You skip Rung 2 and Rung 3 and dive into the shell.

Week 1 is fine. You get command parsing working. Week 2 you hit the fork/exec model and it makes sense on paper but your first attempt hangs. Week 3 you debug it for four hours a day and get further but it now leaks file descriptors and you don’t know why. Week 4 you introduce a signal handler for SIGCHLD and everything breaks in a new way. Week 5 you’re avoiding the repo. Week 6 you tell yourself you’ll “come back to it” and quietly start something else.

Rung 3 (the data-structures library) would have taught you the file-descriptor and error-path habits you needed for Rung 4. You skipped it because it looked boring. Now Rung 4 is hard for reasons that have nothing to do with shells and everything to do with the discipline you didn’t build in Rung 3.

This is not a rare failure. It is the modal failure for ambitious learners. Being ambitious is not the same as being ready.

Warning signals

  • The same file has been open in gdb for 3+ weeks with no meaningful progress.

  • You cannot articulate, in one sentence, what is currently blocking you. “It just doesn’t work” is the signal.

  • You are avoiding the editor on the days you had planned to work on this project.

  • You are opening tutorials on adjacent topics instead of debugging the actual problem. (“I’ll go learn more about signals first.”)

  • You have not committed to this project in 10+ days despite claiming to be working on it.

  • The bug you are chasing has changed shape three times — you fix one thing, another breaks. This is the tell for foundational-gap-being-papered-over.

  • You are asking the LLM for larger and larger snippets. You started asking about a function; now you’re asking for the whole file. That’s a distress signal.

Mitigation

Primary: the rung ordering is not decorative. It is designed. Rung 3 teaches you what Rung 4 requires. Do not skip. Every experienced C engineer who wrote this ordering into the roadmap did so because THEY once skipped and paid for it. Learn on their receipt, not on your own.

Secondary: the 2-sprint rule. If you are stuck on a rung for more than 2 sprints (4 weeks) with no meaningful forward motion, that is your signal. Options in order:

  1. Scope down radically. A mini-shell that supports only cd, ls, and exit — no pipes, no redirects, no job control — is a completely valid Rung 4. Ship that. The full-featured shell is Rung 4b, later, or never.

  2. Split the rung. Extract one sub-problem you can solve this week. Ship it as its own tiny artifact. Rebuild momentum, then return.

  3. Post the stuck code publicly. r/C_Programming, Discord, a mentor. Nothing breaks a stuck-week faster than a stranger asking “why did you do it this way?” and forcing you to explain.

Tertiary: the honest scope check. Before starting any rung, write in the notebook: “I estimate this takes N hours. If I hit 2N hours with no working prototype, I stop and scope down.” Precommit to the stop. That’s how you avoid the sunk-cost death march.

Escalation trigger

3 sprints (6 weeks) stuck on the same rung with no shippable = talk to a mentor or peer. Not another book. Not another YouTube tutorial. A human who has written C.

  • Post in r/C_Programming with the specific stuck problem. Format the post well; you’ll get real help.

  • Ask a senior at Zoho for 30 minutes. Bring the code, not vague questions. “Here is what I’ve tried, here is where I’m stuck, here is my hypothesis about what’s wrong.”

  • Discord communities: Handmade Network, various C server communities. Post the smallest reproducing case, ask for a fresh set of eyes.

What NOT to do at 3 sprints stuck: solo-death-march for another 3 sprints. That is how people quit permanently. C is not a solo language, no matter what the folklore says. Every senior C engineer has, at some point, had a bug solved for them in five minutes by a peer who saw what they couldn’t. Be the person who asks.


Return to README.md · Next: 06_the_llm_landscape_shift_or_c_obsolescence_panic.md