His name was Kolya. He was seventeen and had good posture.
He found a tutorial online. It was called "Learn JavaScript in One Weekend" and the thumbnail showed a man in a hoodie surrounded by floating dollar signs. Kolya thought: reasonable. He opened his laptop. He typed console.log("hello"). Something printed. He felt a small, clean joy — the kind that does not last.
By Saturday afternoon he had built a to-do list. It had no database. The items vanished on refresh. He added localStorage. The items survived. He was, briefly, a god.
His mother called him for dinner. He did not go. There was a bug. There is always a bug.
The stack grew. First it was npm install. Then webpack. Then something called Babel which transformed his perfectly legible code into something a demon had transcribed from a fever dream. Kolya accepted this. Everyone accepted this. That was the deal.
He learned about callbacks. Then about callback hell. Then about promises, which were invented to escape callback hell and created promise hell. Then about async/await, which was invented to escape promise hell and looked fine until it didn't.
"It's JavaScript all the way down," an older developer told him on a forum.
The post was from 2014. The thread was marked [SOLVED]. Nothing was solved.
He installed React. React required him to think differently about state. He thought differently about state. His old understanding of state was destroyed. The new understanding lasted until he installed Redux, which required him to think differently about everything.
He googled the error. Stack Overflow showed him eleven answers. The accepted answer used a library that no longer existed. The second answer used a syntax deprecated in 2019. The third answer was correct but assumed he already understood what was wrong, which he did not, which was why he had googled.
He began to mutter. Small things. "Why is this undefined." "Why is this an array." "Why." His mother heard him through the door and thought he was on the phone.
In the fourth month he learned about TypeScript, which promised to end uncertainty. It did not end uncertainty. It annotated it. Now his uncertainty had types. His errors had colors. Everything was precisely, rigorously wrong.
He discovered that undefined and null were different. He discovered that == and === were different. He discovered that 0 == false was true, that '' == false was true, that 0 == '' was true, but that 0 === false was false. He sat with this. He sat with this for a long time.
He tried to explain this to his friend Dima, who studied accounting. Dima listened patiently. "So the language lies," Dima said. Kolya thought about it. "No," Kolya said. "It just has a unique relationship with truth." Dima nodded slowly and never called again.
By winter Kolya had good posture no more. He had three monitors, a mechanical keyboard, and opinions about bundlers. He had begun sentences with "actually" at the dinner table. He had strong views on tabs versus spaces, and his views were correct, which made them worse.
The last anyone saw of the old Kolya was a photograph from that first Saturday — a boy squinting at a screen, surprised by hello, clean-handed and unencumbered, before the node_modules folder arrived, before the framework wars, before he learned what a closure was and lay awake thinking about closures.
He had wanted to make things. He made things. The things worked, mostly.
It was not what he had imagined. It was also not not what he had imagined.
He kept going. There was nothing else to do.