Skip to main content
Building with AI (Vibe Coding)

⏱ About 20 min20 XP

Intent Over Syntax

For the first six decades of software development, learning to program meant learning a formal language — a precise, unforgiving notation where a misplaced semicolon could break an entire system. Syntax was the gate. If you could not speak the machine's language fluently, you could not build. Vibe coding reorganizes this relationship: the gate is no longer syntax, it is intent. What you want to build must be specified precisely enough for an AI to act on it. That precision, it turns out, is its own demanding discipline.

What Syntax Is and Why It Mattered

Syntax is the formal grammar of a programming language — the exact rules governing how statements must be written for a compiler or interpreter to understand them. Python requires consistent indentation. JavaScript distinguishes between == (loose equality) and === (strict equality) in ways that trip up beginners for years. SQL has a mandatory clause ordering: SELECT before FROM before WHERE. These rules are arbitrary human conventions that exist because machines need unambiguous instructions. Before AI code generation, the only path from an idea to running software ran through syntax. A product manager who wanted a report could describe it in plain English all day; without the syntax knowledge to implement it — or the budget to hire someone who had it — nothing ran. Syntax was not just a technical detail; it was a gatekeeping mechanism that determined who could build. Mastering syntax took real time. A working knowledge of Python takes most learners 50-100 hours of deliberate practice before they can write small programs reliably. Full professional fluency — handling edge cases, understanding idiomatic patterns, knowing the standard library — took years. The investment was real, and it was the barrier to entry.

The Shift

In the vibe coding paradigm, syntax is the AI's responsibility. The human's responsibility is intent specification: describing what the software should do clearly enough, completely enough, and unambiguously enough that a correct implementation becomes possible. Precision of thought replaces precision of notation.

What does precise intent specification look like in practice? Compare these two prompts for the same task: Vague: 'Make a thing that handles user logins.' Precise: 'Build a login form that accepts an email address and a password. Validate that the email is properly formatted before submitting. Send a POST request to /api/auth/login with the credentials as JSON. If the response status is 200, store the returned JWT token in localStorage under the key auth_token and redirect to /dashboard. If the response status is 401, display the message Invalid credentials. Try again. under the form. For any other error status, display A server error occurred. Please try again later.' The first prompt will produce something — probably a generic placeholder. The second prompt specifies every decision point: inputs, validation rules, the API contract, the success path, the two distinct error cases, the storage mechanism, and the user-facing messages. An AI receiving the second prompt has almost everything it needs to produce a correct first draft. The skill of writing the second prompt is not a matter of knowing Python or JavaScript. It is a matter of thinking through a problem completely — anticipating edge cases, understanding data flows, making decisions about behavior before writing a single line of code. This is, in fact, what experienced software architects do before they write code anyway. Vibe coding surfaces that intellectual work as the primary task.

Match each term to its definition.

Terms

Syntax
Intent specification
Compiler
Edge case
API contract

Definitions

A program that translates source code written in a formal language into executable instructions
An input or situation at the boundary of normal operation that requires explicit handling
The formal grammatical rules that determine how code must be written to be parsed correctly
A description of what software should do, complete enough for an AI to generate a correct implementation
The agreed-upon rules for how two pieces of software communicate, including request format and expected responses

Drag terms onto their definitions, or click a term then click a definition to match.

The New Skill: Rigorous Ambiguity Elimination

Natural language is inherently ambiguous in ways programming languages are not. 'Sort the list' does not specify: ascending or descending? Alphabetically or numerically? What happens with ties? What if the list is empty? What if it contains mixed types? A programming language forces you to resolve every ambiguity — you cannot write Python that half-sorts a list. Natural language lets you slide past ambiguities without noticing. This is vibe coding's central intellectual demand: you must impose on your natural-language descriptions the same completeness that a programming language enforces by syntax. Practitioners develop a mental checklist for prompts: What are all the inputs? What are all the valid outputs? What are the error conditions and how should each be handled? What should the system do at its boundaries? What assumptions am I making that I have not stated? Running through this checklist before prompting — and iterating when the AI's response reveals an ambiguity you missed — is the core practice of skilled intent specification.

The Ambiguity Trap

The most common failure mode in vibe coding is not a syntax error — it is an intent specification that the human believed was clear but the AI interpreted differently. The AI will always produce something; it will not refuse because your description was ambiguous. It will make a choice. That choice may not be the one you intended. Review generated code with this in mind.

Why did programming language syntax function as a gatekeeping mechanism before AI code generation?

A student prompts an AI: 'Build a search feature.' The AI produces something, but it searches the wrong data and returns results in a confusing format. What is the most likely root cause?

Precision Escalation

  1. Step 1: Start with this vague prompt: 'Build a calculator.'
  2. Step 2: List every decision the AI would have to make on your behalf because the prompt does not specify it. Aim for at least 8 distinct decisions.
  3. Step 3: Rewrite the prompt to resolve every decision you listed. The rewritten prompt should leave the AI with no major choices to make on its own.
  4. Step 4: Compare your rewritten prompt with a classmate's. Did you make the same decisions? Where did you differ?
  5. Step 5: Discuss: what does the comparison reveal about how much of software design is implicit choice that builders make before they are even aware they are making them?