For this blog, I try not to repost popular links from high traffic
aggregation sites - odds are you've already seen them. But Mike Taylor's comments in this post so resonated with me that I felt
compelled to discuss it despite the attention it has received.
While reviewing a classic Commodore64 book, Mike segues into a
follow-up discussion to his What Ever Happened to Programming post
in which he says:
So I think this is part of what I was bemoaning in Whatever happened
…: the loss of the total control that we had over our computers back
when they were small enough that everything you needed to know would
fit inside your head. It’s left me with a taste for grokking systems
deeply and intimately, and that tendency is probably not a good fit
for most modern programming, where you really don’t have time to go in
an learn, say, Hibernate or Rails in detail: you just have to have the
knack of skimming through a tutorial or two and picking up enough to
get the current job done, more or less. I don’t mean to denigrate
that: it’s an important and valuable skill. But it’s not one that
moves my soul as Deep Knowing does.
I found this comment insightful as it made me realize that I have been
possibly struggling with the same thing.
For as long as I can remember, I've felt compelled to Deeply
Know the systems that I work on. Starting with my own adolescent
experiments programming 8bit computers, I've enjoyed diving deep into
the machine to understand its fundamental operation and then using
that knowledge to grok whole-system behaviors. As Mike states in the
post, this was possible to do in the 8bit days due to the simple
machines and books providing all of the necessary information (my tome
was Your Atari Computer which still sits on my bookshelf as a reminder
of those happy times).
Unfortunately, two things have happened since then - machines have
gotten more complicated and having a deep understanding seems to be
less valued.
The first point is obvious, computers have gotten more complicated on
every level - hardware architectures, operating systems, applications,
and networking. Although the fundamentals can be learned, obtaining
deep expertise in any of these areas requires specialization.
Having spent most of my career working on large-scale, enterprise
computing and storage systems, I've experienced the leading edge of
this expanding complexity first hand. In my first job, I think I did
pretty well at understanding large portions of that machine but it's
been a losing battle since then. The systems that I now work with are
now so numerous and complex that it's impossible to deeply understand
them all - but I try.
Lately, I've been trying to do more hobby projects to have fun, and
expose myself to domains outside of work. But in doing so I find that
I quickly run into the second point that Mike's What Ever Happened to Programming post captures well - the hero of modern programming is the
person that can stitch together libraries in the shortest amount of
time in the fewest lines of code. The greatest heroes are those that
can create and launch a startup in less than 24 hours while on a bus. That's great but it's not for me - I just don't find this form of
programming satisfying.
I've been overly nostalgic lately, hence recent posts on clicky keyboards, old computer books, and old computer commercials. At first,
I thought a looming birthday was to blame but Mike's post has me
thinking that it's really a reaction to the shift in programming. The
kind of work I like to do doesn't seem to be where all the "action" (read
capital investment) is.
It's unreasonable to expect the world to revert back to the way things
were. Therefore, there are two possible reactions:
-
Deal with it and change with the times
-
Pick a niche were it is possible to "grok" the system and
specialize. This doesn't mean building everything from scratch but
rather picking a stable domain that allows an accumulated
understanding of as much of the system as I care to know.
Traditionally I've been a generalist but I must admit that option 2
seems much more attractive than 1. I guess this is something to
reflect on while planning out my future career.