Programmer Career Change Illustrated: From Writing Code to Selling Skewers
A late-night message in a group chat saying "if it doesn't work out, I'll go back home and sell skewers" can get a whole row of "take me with you." Unfold this career change guide, and what lies behind each option—is it longing for another kind of life, or escaping the current situation?
709 words
|
4 minutes
Explaining Your Job to Your Parents: Why Your Mum Still Thinks You Fix Computers
"Where do you work?" "You fix computers, right?" "Can you look at my phone?" — The hard part of explaining a programmer's job to your parents is not the jargon; it is that what you deliver is invisible to them. A tapping experiment and one translation function, on turning invisible work into plain language.
1349 words
|
7 minutes
Programmers and Caffeine: A Hundred Ways to Drink Your Lifeblood
"A programmer is a machine that turns coffee into code" — behind this joke lies a string of verifiable numbers: 400 milligrams, a half-life of 5 to 6 hours, and a teaspoon of powder roughly equal to 28 cups. Here we explain both the dosage and the science of your lifeblood drink.
1404 words
|
7 minutes
Identifying and Managing Technical Debt: Stop Using "Bad Code" as an Excuse
Technical debt originally meant "principal plus interest," not "bad code." This post clarifies the concept using Cunningham's original words and Fowler's four quadrants, provides a ready-to-run Git hotspot analysis script to find the most frequently changed and most convoluted files in a real repository, and discusses how to price debt and when to pay it down versus accept it.
2849 words
|
14 minutes
Multimodal Models in Practice: Getting LLMs to Understand Images and Documents
Breaking "getting a model to see images" into three controllable engineering problems: how images become tokens, why the same image has two different prices, and why PDFs can skip OCR. Includes complete TypeScript code and a list of pitfalls.
1860 words
|
9 minutes
Redis Cache Design and Common Pitfalls: Penetration, Breakdown, Avalanche, and Consistency
Treating the cache as a disposable copy is the first principle of design. This article uses runnable Node.js code to break down the root-cause differences between cache penetration, breakdown, and avalanche, explains why "update the database first, then delete the cache" beats "update the cache," why volatile-* eviction policies can kill writes, and which INFO fields to check when hit rate looks abnormal.
2610 words
|
13 minutes
WebAssembly in 2026: Which Languages Compile to Wasm, and When You Really Shouldn't Use It
A year after Wasm 3.0 was finalized, the language landscape has been redrawn by WasmGC. This article uses a hand-written 104-byte Wasm module to reveal its binary structure, then answers the most practical question with real benchmark data: under what circumstances is Wasm actually faster than JavaScript?
2651 words
|
13 minutes
Frontend Internationalization (i18n) in Practice: Intl Formatting, Plural Rules, and Language Routing
A reproducible, hands-on walkthrough of the three layers of frontend internationalization: Intl handles formatting (numbers, currency, time zones, sorting, segmentation), PluralRules handles pluralization, and message catalogs handle translation. From the classic 0/1/2 plural bug to Accept-Language negotiation, hydration mismatches, and catching hardcoded strings in CI.
5583 words
|
28 minutes