Ever since I can remember, I’ve been fascinated by the world around me. I was always eager to ask the how and why of things; I was inquisitive about anything and everything, readily asking questions about this and that. I was that annoying kid who kept badgering their parents (or any adult within earshot) with questions.
My mother bought an encyclopedia set when I was younger, and I’d spend countless afternoons and evenings hopping from one article to the next; I was wiki-walking, in a way, before I ever was on the Internet.
I was also a bit of a loner, preferring to keep to my own company most of the time, and I had very few friends my age growing up. It always seemed my interests were never that interesting to my peers.
I often describe myself as a Jack of all Trades, a generalist with breadth but not necessarily depth. My career thus far has benefitted from this, and I used to lean heavily on it as freelance developer, as a consultant, and in my various roles in the small companies and startups I’ve been a part of. In those places, you can’t really afford to specialize; there’s no one else to do the job at hand, so everyone needs to contribute.
That said, my skills aren’t necessarily shallow or surface-level: I’d like to think I at least have depth in two or more areas. I’ve worked in a lot of projects involving building middleware and backend systems, and I’ve had a lot of experience with building server-side software. Even though I’m a polyglot developer, I do admit that I’ve spent a lot of my career writing code in Java and Python, and in a pinch I’d probably call those my core skills.
I am keenly aware, however, of what I lack as a generalist. I’ve traded off some deeper knowledge and specialization for knowing a little about a lot. There are some days at work where I am confronted by what I do not know deeply about – but then again, that just might be my own insecurities talking, so there’s that.
I’d also like to think that my being a generalist has its advantages, even in my current position. I do have a breadth of interests, and an omnidisciplinary approach to problem-solving often means being able to bring other tools to bear on the task at hand.
Sometimes it means, for example, using functional programming techniques in a way that might seem foreign in an OOP context. I remember solving a problem we had with doing database-level encryption with Hibernate: long story short, we needed a way so that the customer’s investment in Oracle’s Row-Level Security feature could work with our use of Hibernate. The solution there was to make use of an adapter of sorts, and in a way that was stateless: in other words, a function, in all but name.
I’ve yet to really put my skills as a generalist to bear on my current job, but it’s early yet. And I’m definitely optimistic that I can contribute; I just need to figure out how.
Previously: Soul of a New Machine