on
aka.love(programming)
Hey, it's aka. I suddenly thought, "Why do I love programming?" — so I decided to put it into words.
In this article, I'll look back on how I got hooked on programming, the evolution of my thinking along the way, and ultimately articulate "what programming means to me". If you've ever wondered "why do I love writing code?", you might find something relatable here.
aka.showHistoryAbout(programming)
It Started with Games 🎮
I'm an only child, and I was given all sorts of toys. I spent a lot of time playing alone.
When I was in nursery school, I happened to receive a game console from my cousin, and that's when I fell into the world of gaming. I was obsessed with Dragon Quest, and whenever text appeared on screen, I'd ask my parents "what does this kanji say?" every single time — I remember wearing them out 😅
Even in elementary school, I was deep into gaming. At some point, I discovered cheat devices like "PAR" and "Code Freak" and bought them. I'd set every value in Nobunaga's Ambition to 65535(FFFE), or enter impossible stats in Pokemon to steamroll everything and cause glitches 😃
Naturally, as a kid like that, I wanted to become a game programmer. But at the time, information on how to study was scarce, and I had no idea where to learn about game development. So until I graduated high school, I went to a regular school and just did whatever caught my interest — studying, club activities, gaming.
First Time Programming 💻
My first encounter with programming was when I entered university. The first language I learned was C. When I learned basic arithmetic, I thought "could I make a calculator app (CLI)?" — and I actually built one, crude as it was (a degraded version of the bc command, essentially).
After that, I discovered a game creation tool called "Unity" and self-taught my way through making several games. I even participated in a GameJam within my first month or two, though I had no idea what I was doing and barely managed with help from my seniors.
During university, I made about 4-5 games on my own, but I never published them and abandoned them all partway through. The thing is, I had zero interest in art, music, or 3D modeling, and couldn't motivate myself to study them. And I figured no one would care about games where those aspects were half-baked. But programming itself was incredibly fun — I'd put real effort into assignments, thinking "what if I tried it this way?"
At that point, I didn't find joy in making games — I found joy in figuring out how to write clean programs. I didn't know about architecture design back then, so looking back, it was anything but clean lol. I was doing cute things like creating random methods to split code and renaming variables to be more appropriate.
I also studied AI and blockchain. Forgot most of it though 😅
By the way, my research was on distributed algorithms. I studied and implemented Paxos. I wanted to implement Raft too.
A Fateful Encounter with Clean Architecture, TDD, and DDD
Reading seminal books introduced me to the field of architecture design, and it had a big impact on me.
Here are links to those books on Amazon (Japanese editions):
- Clean Architecture (ASCII Dwango)
- Growing Object-Oriented Software, Guided by Tests
- Domain-Driven Design by Eric Evans
For my first 5 years of programming, I didn't even know architecture design was a thing — I was coding entirely self-taught. Around year 2-3, I read Readable Code, but my impression at the time was "this all seems obvious" 😅 Now I think it would have a different flavor from an architecture design perspective, so I'd like to re-read it.
Reading these books taught me the fundamentals and challenges of OOP, TDD, and DDD, and the joy of architecture design. I'm nothing but grateful to the senior who recommended them.
I plan to write separate articles about OOP, TDD, and DDD.
By the way, DDD is hard to learn from books alone, so I frequently watched articles and YouTube videos by little hands' lab. The real-world examples made it much easier to learn.
Deepening Architecture Design
From there to now, I've been studying architecture design and putting it into practice through work and personal projects.
(As a fun read, FizzBuzzEnterprise was hilarious lol — as a joke)
https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
As I deepened my understanding of architecture design, I started to articulate why I find it and programming so fascinating. I'll get to that shortly.
Present
Currently, I'm working on infrastructure improvements for existing applications, building APIs for features, and improving/refactoring legacy code. Infrastructure and API design are important work too, but personally, I prefer working on architecture design and code improvement — legacy code refactoring is where my heart is.
aka.thoughtsAbout(programming)
When I try to articulate why I find architecture design and programming fascinating, it comes down to two points:
- The execution result of a program tells you whether you're right or wrong.
- The internals of a program — the code — can be freely expressed by the developer.
Point 1 is straightforward. As long as you know what you want to do (requirements/specs), you can tell whether it works by running the program.
Point 2 is where the real joy of architecture design and programming lies. Writing code for readability, writing for performance, or just writing whatever works... there are countless ways to express yourself, and that's where the fun is packed in.
When I was studying DDD, I felt like I found the answer to "why am I drawn to architecture design and programming?" Programming is the act of translating a "programming language" into code. Just as a novelist shares their imagination, stories, and opinions through words, programmers codify these things in programming languages and share them through code.
You can write something concise like this:
class aka {
public YesOrNo love(Person you){
return you.answer();
}
}
Or express it like this: (be crazy about person = passionately in love with person)
class aka {
public Ending isCrazyAbout(Person you){
if(you.answer().Yes) return Ending.Happy;
return Ending.Bad;
}
}
The fact that we can write these different expressions means that, like novelists, programmers can create words in the form of methods and classes, and define their meaning. Moreover, by executing code, we can freely operate a virtual world. Having concepts you imagined actually run — that's incredibly fun.
By the way, improving code readability is important work for us programmers. Because we spend far more time reading code than writing it. Simply put, you write code once, but improving existing code requires reading it over and over.
And since code is easy to copy, reading time multiplies at each copy destination. So maintaining and improving code readability matters. (From that perspective, aka#isCrazyAbout would be rejected 🤣 Though it might work if the subject matter were a yandere visual novel.)
That got long. To summarize: programming is one of my forms of expression. Just as painters, musicians, and novelists convey something through their work, I express my thoughts through programs and the code within them. And by running the program, I can verify that my definitions work correctly.
For someone like me — imaginative, prone to worrying, introverted, someone who loves thinking — programming is an incredibly enjoyable activity.
aka.isContinue(programming)
Through programming, I've been able to articulate that "verifying and expressing my ideas is fun". With that in mind, I'm still wondering whether I'll continue programming in the future.
What I enjoy is "verifying and expressing my ideas" — it's not necessarily limited to software development. And recently, AI has made verification and expression much easier.
I think the day is approaching when AI replaces programming as a means to turn imagination into reality. Eventually, AI might implement software in a way that fully satisfies my desires. If that day comes, I might step away from programming as a "tool" and try other means.
Well, until then, I'll keep enjoying programming as my familiar form of expression. See you next time.