It's All Boring in the End
I don’t know if it happens with you, but for me, once the core ideas of something are figured out, my interest is more or less lost. Now, dont’t take me wrong; I’m not saying that I’m not excited about software anymore – quite the opposite, in fact! But my point is, once I know how something is done, it ceases to be the shining star of mesmerization that it once was for me.
- Concurrency in Golang: Golang’s concurrency is mind-blowing. Hundreds of thousands of Goroutines are possible in a single machine. WOW! Except … you learn that multiple Goroutines are multiplexed on to a single OS thread. And if a Goroutine is blocking, that thread is blocked and another one gets used for orchestrating the remaining Goroutines. When you step back and think about it, it makes sense. Processes and threads are the only possible constructs at the OS level, and everything has to be done around them. That’s what Node does (thread pool, that is) for achieving its high concurrency, and perhaps that’s what Erlang does as well (thought I don’t know for sure). But all in all, quite meh.
- Relational databases: A database sounds like a magical blackbox that does everything you want in your life, until you dive into the basics and learn that it’s just one big damn file and the index is nothing but a B+ Tree with pointers to sections of this giant-ass file. Meh.
- SQS: When accessed from something like EC2, SQS read/writes are done over HTTP, and in order to prevent too much polling, we need to maintain a long-lived connection. That flies in the face of a giant-clockwork-like conception I had of distributed systems, where streams of information are continuously flowing and blending into each other. All in all, pretty meh.
- Interpreters: What could be more magical and mythical than an interpreter (or compiler, though this note isn’t about compilers)?! Except once you learn that it’s just a fancy program that reads a file character-by-character and is constantly checking whether the sequence of characters read so far represents a token, a value, or something else. Meh.
Hopefully, I’ll add more to this list as I collect more “disappointments” in my career.
Are you still reading?