Vibe code like a linguist
A Linguist’s Guide to Vibe-Coding
When people talk about “prompt engineering,” they usually mean fiddling with keywords until the machine spits out something usable. But if you’ve ever studied linguistics, you know that human communication isn’t about keywords. It’s about meaning, context, and cooperation.
And that’s exactly what vibe-coding is: applied linguistics for AI.
Let me walk you through the principles. You’ll see they come straight out of Pragmatics 101, just with JSON schemas instead of blackboards.
Hello, I’m Julia Díez — I work at the crossroads of AI, localization, and global content strategy. Here I share practical insights on internationalization (i18n), multilingual content, and how AI is reshaping the way companies build global products that feel local.
💌 If this resonates, consider subscribing to get my latest posts straight to your inbox.
Pragmatics: Meaning Depends on Context
Linguistics 101: the same sentence can mean wildly different things depending on context.
“Can you open the window?” → literal ability vs polite request.
In coding with AI, the same is true:
“Generate user profiles” → might give you random JSON blobs.
“Generate 10 user profiles for a wellness app, with consistent schema, realistic Irish names, and ages 20–35” → precise, useful output.
Application to vibe-coding: Always embed the intended use case in your instructions. Don’t just describe the task — describe the situation.
Imaginary app: A Language Exchange App where users swap languages.
Bad vibe-code: “Generate UI strings.”
Good vibe-code: “Generate UI strings for a playful language exchange app targeting university students, tone: friendly but not childish.”
Semantics: Ontologies as Your Grammar of Meaning
Semantics gives us the structures that ensure words consistently refer to the same things. Without them, ambiguity kills communication.
In linguistics: bank (financial) vs bank (river).
In AI coding: user could be a database record, a UI persona, or a test case.
Application to vibe-coding: Define your ontology early. Even if it’s just a JSON schema, treat it as the grammar of your app’s world.
Imaginary app: For the language exchange app, we define:
Concept: User → properties: id, native_language, learning_language.
Concept: Match → relation: User ↔ User.
Now every time we prompt the AI, we anchor it in this semantic frame:
“Generate 5 sample Matches where native/learning languages are complementary. Output JSON matching schema.”
Grice’s Maxims: Cooperative Principles for AI
Grice taught us conversation runs on four principles: Quantity, Quality, Relation, Manner. Break them, and meaning collapses.
Quantity: Say enough, but not too much.
Quality: Be truthful.
Relation: Be relevant.
Manner: Be clear.
Application to vibe-coding: Treat your prompt like a cooperative dialogue with the AI.
Bad: “Make some onboarding screens.” → too little info.
Better: “Generate 3 onboarding screens for a mobile app, each with 1 sentence of text (≤50 characters), 1 call-to-action, and 1 simple illustration description.” → clear, scoped, cooperative.
Speech Acts: Code as Action
J.L. Austin: “To say something is to do something.”
Saying “I promise” performs an act.
Prompting “Generate onboarding JSON” isn’t a description — it’s a speech act with consequences in your repo.
Application to vibe-coding: Be explicit about the act you want. Are you commanding (imperative), requesting (optative), or exploring (interrogative)?
Imaginary app:
Imperative: “Generate JSON schema for Matches.”
Exploratory: “Suggest 3 alternative schemas for Matches, with pros and cons.”
Collaborative: “Generate schema, then propose 2 variations optimized for search performance.”
Discourse & Coherence: Keep the Conversation Threaded
Human conversation is coherent because each utterance builds on the previous. AI coding works the same. Lose the thread, and the agent drifts.
Application to vibe-coding: Maintain discourse markers and references.
Instead of: “Generate translations.”
Say: “Using the onboarding texts from step 2, generate Spanish and Japanese translations. Keep same JSON keys, and ensure button labels fit within 15 characters.”
That’s discourse coherence: every instruction ties back to what’s been said before.
Register & Tone: Style Is Meaning
Linguists know register (formal vs informal, professional vs playful) changes reception as much as raw meaning.
Application to vibe-coding: Always specify register and tone in app copy generation.
Imaginary app:
Formal register → “Please confirm your language partner request.”
Informal register → “You’ve got a new language buddy! 🎉 Wanna chat?”
Both are “correct,” but only one fits your app’s vibe.
Iterative Negotiation: Onboarding AI Like a Junior Linguist
When you onboard a new translator, you don’t expect perfection. You give them context, correct errors, and iteratively build alignment.
Application to vibe-coding: Think of the AI as a trainee:
Round 1: “Draft onboarding copy.”
Round 2: “Good start, but too long. Limit to 40 chars.”
Round 3: “Tone’s too corporate. Make it playful, Gen Z friendly.”
That’s communicative negotiation.
Vibe-coding is applied linguistics. It’s about:
Pragmatics: anchoring in context
Semantics: defining ontologies
Grice’s maxims: being cooperative
Speech acts: coding as action
Discourse: keeping coherence
Register: controlling style
Negotiation: iterating meaning
We’re engineering meaning into executable form.



Very good tips Julia, I really like the ones about "Keep the Conversation Threaded" and "Ontologies as Your Grammar of Meaning". I will apply your advice!
Many of the points here are extra validation for what many folks in the space have talked about in regards to deprecating concepts like "prompt engineering" and "vibe coding" for more accurate ones like "context engineering" and the related "agentic coding"