If you're going to vibe code, why not do it in C?
What “vibe coding” is and whether it works
- Thread distinguishes between:
- “Pure” vibe coding: user doesn’t understand the code at all, just prompts and ships.
- Assisted coding: user understands language and reviews/iterates.
- Some argue vibe coding can create “robust, complex systems” and report building full web apps or Rust/Python libraries largely via LLMs.
- Others say everything they’ve seen beyond small prototypes is “hot garbage”: brittle, unreadable, unreliable, and dangerous in production.
- Several note LLMs often hallucinate APIs, mis-handle edge cases, and struggle badly in large, existing codebases.
Why not C (or assembly)?
- Critics of C for vibe coding emphasize:
- Memory safety, UB, and threading bugs are still very real in LLM output.
- C has few guardrails; small mistakes can mean security issues or crashes.
- Debugging AI-written C or assembly is harder, especially if the human isn’t an expert.
- A few report success vibe-coding C for small utilities or numerical tasks, but generally only when they can personally review memory management.
- Some push idea to go further: LLMs could eventually emit machine code directly, bypassing languages—but others say that removes any human-auditable layer.
Languages seen as better for vibe coding
- Many argue for languages with:
- Strong static types and good tooling: Rust, Haskell, TypeScript, Ada, SPARK, Lean, Coq, etc.
- Memory safety via ownership or GC.
- Fast, rich compiler feedback that LLMs can use as a “self-check.”
- Rust is widely cited: ownership, lifetimes, sum types, and error messages help both humans and LLMs; but some note LLMs struggle with lifetimes and deadlocks.
- Others prefer high-level GC’d languages (Python, JS, C#, Go) as safer, terser, and better-covered in training data; C++ and C are seen as long-tail and more error-prone.
- A minority suggest languages explicitly designed for LLMs: extremely explicit, local context, verbose specs/contracts, heavy static checking.
Tests, specs, and formal methods
- Strong view that vibe coding must be paired with:
- Unit tests, fuzzing, property-based tests, invariants.
- Possibly formal verification or dependently typed languages (Lean, Idris, Coq).
- Idea: ask LLMs to write tests and specs first (TDD), then iterate until tests pass.
- Some envision “vibe-oriented” languages whose verbosity and proof obligations are hostile to humans but ideal for machines and verification.
Broader process & human role
- Many say biggest bottleneck isn’t typing code but:
- Vague or incorrect requirements.
- Cross-team communication and politics.
- Code review and long-term maintenance.
- LLMs help with scaffolding, refactors, boilerplate, and documentation, but:
- They weaken human understanding if overused.
- They risk alienating developers who enjoy problem-solving itself.
- There’s disagreement over net productivity: some report 2–5× speedups; others cite studies and experience suggesting far smaller or even negative gains without disciplined use.