09 — The Anti-Recommendation List

An anti-rec list is more useful than a rec list. Everyone will tell you what to read; almost no one will tell you what to not read. Below are the resources popular enough that a beginner will trip over them — and defective enough that you should route around them. Each has a specific reason, not a vague vibe.

Named. Explained. Avoided.

1. Learn C the Hard Way — Zed A. Shaw

Verdict: Do not use.

Reddit’s r/C_Programming has a standing consensus that LCTHW is riddled with technical errors. Notable critiques:

  • Tim Hentenaar — “Learn C the Wrong Way” — chapter-by-chapter takedown; search that title for the current mirror. It documents dozens of factual errors, non-idiomatic code, and outright bad advice.

  • Author has been publicly hostile to correction, unlike (say) Beej who accepts errata continuously.

Use instead: Beej’s Guide to C Programming, or K.N. King ch. 1-10.


2. GeeksForGeeks — C section

Verdict: Last-resort reference only. Cross-check everything.

  • Content is written by rotating student authors, uneven quality control.

  • Common bugs: incorrect malloc/free patterns, off-by-one loops in “reference” solutions, subtly wrong printf format specifiers.

  • SEO dominant, so it will appear top of every Google search — resist the reflex.

Use instead: cppreference.com for language/library semantics; man7.org for POSIX; K.N. King for pedagogy.


3. tutorialspoint.com — C tutorial

Verdict: Skip.

  • 2000s-era prose, K&R-style examples but with void main() (undefined behavior) and pre-ANSI idioms in places.

  • No community moderation.

Use instead: Beej’s Guide.


4. w3schools — C

Verdict: Skip.

w3schools has quietly added a C track. It is exactly what you would expect from w3schools: shallow, imprecise, missing the semantics that make C hard. Historically w3schools’ HTML/CSS content was community-flagged for years (see w3fools.com — old but the critique holds); the C content inherits the same quality bar.

Use instead: Anything else in this folder.


5. “Learn C in 10 Hours” / “Master C in 24 Hours” YouTube playlists

Verdict: Skip.

Almost always a transcription of K.N. King (or worse) without the exercises. You cannot learn C by watching — you learn by segfaulting your own code and reading the resulting gdb trace. If a video is longer than 30 minutes and doesn’t include real debugging, it is entertainment.

Signal check: if the thumbnail has ALL CAPS + red arrows + “🔥”, close the tab.

Use instead: Jacob Sorber’s short focused videos (see 04_youtube_channels.md).


6. Udemy “Complete C Bootcamp” (any instance)

Verdict: Skip unless your employer pays and it’s part of a mandatory training track.

  • Instructors are typically not shipping C in production.

  • Content is padded to justify the price. 30-hour courses that could be 3 hours.

  • No feedback loop; you can complete assignments incorrectly and still get “certified.”

Use instead: Duke Coursera specialization — actual grader, actual grading.


7. C Programming in Easy Steps / Head First C / “For Dummies”

Verdict: Skip if you can already program in any language.

These are for people who have never seen a for-loop. You are past that. Reading these will waste 30 hours you could spend on K.N. King.

Use instead: K.N. King, ch. 1-10. Or Beej.


8. Stack Overflow’s C questions circa 2015-2020, uncritically

Verdict: Verify every answer against cppreference before pasting.

  • Many highly-upvoted answers are correct for the questioner’s platform but not portable.

  • Post-2023 answers are increasingly LLM-generated and look authoritative but include subtle UB.

  • Comments beneath answers often contain the correction — read them.

Use instead: cppreference.com first, then SO for “how is this typically done” flavor.


9. AI-generated C without verification (Copilot, ChatGPT default, Cursor autocomplete)

Verdict: Explain-mode only. Never paste generated C without reading it line by line.

  • LLMs hallucinate size_t vs ssize_t, miss free()s, pick wrong printf specifiers, insert nonexistent function names that look like real libc.

  • The failure mode is the code compiles and mostly-runs, then segfaults on your production input.

See 11_tools_setup/08_ai_assist_for_c.md for the full policy. TL;DR: use AI to explain other people’s C; do not use AI to write your C while you are still learning.


10. “Modern C++ patterns applied to C”

Verdict: Reject the framing.

Blogs that try to bring RAII, smart-pointer semantics, or class-like structs into C are usually people who wish they were writing C++. C is a different language with different discipline. Learn C from C sources (Gustedt, K&R, Wellons).

Use instead: Chris Wellons’ arena-allocator posts on nullprogram.com.


The meta-rule

If a resource is optimizing for your click, it is not optimizing for your competence. The high-signal C resources — cppreference, man7, Beej, Gustedt’s HAL PDF, Wellons’ blog — do not have ads, do not have upsells, and do not have a “10 things you didn’t know about C!” homepage. Follow the money; follow the citations; follow the working engineers.

Return to README.md · Next: ../10_communities/README.md