“Specialization is for insects. A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly.”–Robert A. Heinlein
I’m often coming to realizations about myself, and I like to bring them to the forefront when they have the potential for self-improvement.
For me, it’s easy to mistake wanting to learn more about something with the treacherous borders of a trap leading to something I don’t really want.
What I’ve discovered is that – without my conscious awareness – there is a part of me that kicks the fight-or-flight switch whenever I find myself too close to something that might push me down the funnel of relentless focus. This isn’t to suggest that I’m wholly un-focused; I’ve spent a lifetime in IT and software development and I still love it and want to keep learning and creating. However, I don’t want to choose between PHP and Python and Go, nor forsake the option of playing with Drupal because I’m a WordPress guy. I don’t want to swear “till death do us part” to CakePHP (which I like) as long as Laravel exists. I’m fine sticking with Ansible over Terraform and Ubuntu over Fedora, but I’m not giving up infrastructure-as-code or Bash scripting for anyone.
On the other hand, while the idea of game development interests me, I don’t pursue it because I’d be watering myself down too much. I recently looked at the vast Java/Kotlin landscape and realized it would just be too much of a hard shift for me, considering not only re-learning Java but also picking up Kotlin and Ktor and Spring and the gods only know what else.
In my field, the term “full-stack developer” is often used, and that means someone who knows enough about a whole stack (such as what we use most, LEMP) to do all the things. What that means is that, without anyone else’s help, I can build, host, tune, and secure a database-backed website. It doesn’t mean that I know more about MySQL or PHP or Nginx than anyone else; it means that I can get stuff done.
When you consider life as we know it, it evolved, and evolution is about adaptation. A species can hyper-specialize, and as long as its environment doesn’t rapidly change beneath its feet, it will succeed. But if its environment does change faster than it can keep up, it will go extinct.
Few things change faster than the tech field. While many disciplines require the construction of hardware prototypes followed by a mechanism for manufacturing, in software, you just write some stuff and then do a
git push -u origin main and suddenly everything can change. With hundreds of thousands of people doing that every day, one needs to be fast on one’s feet.
Evolution aside, I’ve come to realize that, for me, over-specialization is just boring. I can be specialized enough to not ditch LEMP for Ruby/Rails or whatever is involved in the full stack of Java apps, but not so much that I want my head in the sand of one CMS, one framework, or one application.
Maybe I’ll never be “that guy” who can write three thousand lines of Go without once using Google, but you know what? I’m good with that.