A Linguist Helped Me Understand C

3rly1 pts0 comments

How a Linguist Helped Me Understand C - by Bruno Jenkins

Logos & Light

SubscribeSign in

How a Linguist Helped Me Understand C

Bruno Jenkins<br>Nov 23, 2025

Share

There is a small and quiet truth in computer science that I did not grasp until I stepped away from C: my understanding of pointers. Grokking C pointers and its control flow did not come from K&R or from any formal Computer Science text. It came from a linguist.

Larry Wall’s Camel Book is famously chaotic, but there is a strange beauty inside it, since Wall approaches code as language. He treats syntax like grammar, symbols like prepositions. And once you see it, you cannot unsee it. Code becomes readable the way a sentence becomes readable. It stops being a puzzle and becomes speech.<br>That shift changed everything for me. It turned C from a language I fought with into a language I could speak. This essay is the result of that shift. It is the pointer grammar and control flow vocabulary I now use every day. It is how I read C in my head. It is how I avoid mental knots and subtle bugs. And it is the closest I have ever come to a consistent, human way to think inside the language.<br>Take what is useful.<br>Leave what is not.<br>But try reading C this way for a day or two.<br>You might never go back.

Pointers as Grammar

A pointer is nothing more than a word that refers to a place. Once you accept that, the syntax follows simple rules of English.

Read it as<br>“p holds an address.”

*p

Read it as<br>“the value of p.”<br>Meaning<br>“the value stored at the address p contains.”

p[i]

Read it as<br>“the value of p at index i.”

This works because p[i] is defined as *(p + i).<br>You do not need to say that out loud. You just read it as a simple phrase.<br>p->field

Read it as<br>“the field of the value of p.”<br>Which you can shorten to<br>“the field of p.”

&x

Read it as<br>“the address of x.”

Everything in pointer land is just composition of those five phrases.<br>Control Flow as Narrative

C control flow often looks cryptic on the page, yet it reads very cleanly in natural language.<br>if (!p)

Read it as<br>“if p is null.”<br>Or<br>“if p has no value.”

if (p)

Read it as<br>“if p holds a valid address.”

for (i = 0; i

Read it as<br>“start i at zero.<br>While i is less than n.<br>Increment i each time.”

The pattern is always:<br>start

continue while

step

for (p = buf; p; p++)

This is the idiom for walking a string.<br>Read it as<br>“start p at buf.<br>While the value of p is not zero.<br>Move p to the next element.”

lines[n++]

This is one of the most important idioms in C.<br>Read it as<br>“the value of lines at index n, then increment n.”

It is exactly how you build arrays of dynamic length. It is also the idiom that makes C feel like C.<br>The Tight Loop Idioms

These are the moments where C becomes minimal and elegant.<br>while (p++)

Read it as<br>“while the value of p, then advance p.”

It feels strange the first time, but once the grammar settles in, it is almost musical. It is how classic C copies strings, tokenizes input, and scans buffers.<br>if (flags & MASK)

Read it as<br>“if the mask flag is set in flags.”

Bitwise operations are easiest to understand as a question of presence.<br>Is this bit present or not present.

That is all.<br>Why This Works

The human mind is not built to carry abstract syntax trees around in its head:<br>It is built for language.

It is built for rhythm.

It is built for short meaningful phrases that map to real actions.

Larry Wall understood this better than most programmers. He approached code as text and treated symbols as grammar. Once you borrow that mindset, C stops feeling like a low-level battle and starts feeling like a readable document. You stop seeing stars and ampersands, char arrays and pointers. You start seeing phrases, values and addresses. You stop being afraid of expressions like *++p.<br>You start reading expressions and statements as little sentences.

This shift does not simplify C. It simply makes you fluent.<br>Closing

I hope these small reading rules help you as much as they helped me. I once thought pointers were a rite of suffering in systems programming. Now I see them as grammar.<br>Once you read them with the right phrases, they become almost gentle.

Share

PreviousNext

Discussion about this post<br>CommentsRestacks

TopLatestDiscussions

No posts

Ready for more?

Subscribe

© 2026 Bruno Jenkins · Privacy ∙ Terms ∙ Collection notice<br>Start your SubstackGet the app<br>Substack is the home for great culture

This site requires JavaScript to run correctly. Please turn on JavaScript or unblock scripts

read value language like grammar start

Related Articles