Before 2013: Mu Online fan sites and Counter-Strike cheats
My professional clock starts in 2013. My programming clock starts much earlier, with no users but me, no code review, and no idea any of it was a career. Everything below happened before that first job.
Mu Online fan sites in PHP
My first real projects were websites for Mu Online, the MMORPG I played as a kid. Nobody asked for them. I wanted rankings, guides, and guild pages to exist, so I built them in PHP. What it taught: a page that breaks at midnight teaches faster than any tutorial, and your first real users are friends who complain in chat. Software exists for people, not for the author.
C/C++, assembly, and Counter-Strike 1.6
The least respectable and most educational chapter came next: writing cheats for Counter-Strike 1.6 in C/C++ and assembly. To do it at all, you must learn how a program actually works: memory layout, calling conventions, registers, what the machine truly executes beneath every abstraction. Assembly strips away every comfortable lie and shows you machine code as it is.
What it taught, beyond the obvious: why you must never trust the client. Breaking client-server trust as a teenager is, ironically, how I first understood server authority as a professional. And to this day, when high-level debugging stalls, the low-level mental model is what gets me unstuck: I can reason about what the machine is really doing.
Freelancing: constraints are teachers
Small freelance gigs ran alongside all of this. Clients do not care about elegance; they care that the form sends the email and the page loads. What it taught: scope discipline. Ship what was agreed, in the time agreed, with the tools at hand.
Industrial automation: software with physical stakes
The last stop before going professional: automation work in big industries, still before 2013. When software moves machines, bugs stop being embarrassing and start being expensive. What it taught: respect for failure modes, interlocks, and testing things you cannot simply redeploy. Reliability stopped being a preference and became a requirement.
What the curiosity years gave me
No credentials, but instincts that never left: build for real users, understand the machine below your abstraction, respect constraints, expect failure, and distrust the client. The stacks changed many times since. The curiosity never needed to.