Jack of All Trades
I have been learning programming for almost 6 years now. Instead of writing a bullet list of every technology I learned in that time, I opened GIMP, threw in any technology logo that I could think of until the image was filled, and used it as the cover you’re seeing right now. If I spent enough time with it to learn its fundamentals, it is (most likely) shown above.
So, my learning journey has taken me from statistics to data visualization, web development, and a lot of in-between stuff. I was able to impress many colleagues and potential employers (and my current employer) with the amount of knowledge I accumulated over those years starting from absolutely nothing.
That’s such a great feat to achieve… or is it?
The Ideal Skillset
Let me start with what I think is the end goal. I heard this a long time ago, and it still resonates with me to this day, and that is the concept of a T-shaped skillset. The idea is to combine the depth of being an expert in one skill with the breadth of having some knowledge in other stuff. It makes a lot of sense to me. Specialists can be too narrow-minded, and generalists aren’t “good enough” in any single thing.
So, this T-shaped skillset is a great goal for you to strive for, and I do strive for it.
Specialists vs Generalists
Let me start this segment with a question… Does being a generalist mean you’re an impostor? A jack of all trades, master of none? Well, yes and no.
One of the other discussions I heard on this topic was that generalists might not be very good in whatever skills they learned, but that makes them excellent candidates for leadership positions. This makes sense to me. Knowing the basics of many things gives you some ability to be able to manage and communicate with a team where each member is an expert in a single thing.
In another way of looking at it, one could argue that good leaders have the skill depth in leadership and soft skills, so they are T-shaped after all. For the sake of this discussion, however, I am concerned about technical skills only. Soft skills are important but not my main point of discussion here.
In some situations, it might not need to be a situation of choosing between one or the other. Successful teams have both generalists and specialists, each complementing the other and contributing their part in the T shape. This is a great point to consider when hiring and putting together a team. However, this is not an option when working solo. It’s either taking the time to build that T or accepting the tradeoff of picking a side, and that takes us to my personal rant story in this context.
Reflecting on My Journey
Assuming the cover and the article intro did not give it away, I’ll say upfront that I consider myself a generalist at this point in my career (and it causes me more pain than pride, but more on that later). A huge chunk of my learning journey involved getting started with a new technology, learning until I became good enough to be dangerous, and then finding something else to learn. Rinse. Repeat.
Admittedly, a big reason for tech-hopping was my curiosity, especially in the first couple of years. I was getting started with programming in general, and I didn’t have a particular job market as a target, so anything was open for me to learn. Also, my first language was R, which is despised by many programmers because it isn’t a “real” programming language somehow. So, I was curious to explore other languages and see what else is there.
In the last couple of years, my job has become the reason why I’m pushed to try new things. Small companies favor people who are “good enough” at multiple skills rather than specialists because they usually want to ship products fast and don’t need to meet enterprise-level standards of quality. What I consider being a generalist was highly appreciated in my company on many occasions. In fact, my company was the reason my web dev journey was revived after being dead for a couple of years.
I think learning many different technologies is very effective in opening the mind in terms of knowing how to express ideas in code and grokking languages, paradigms, philosophies, etc. It helped me a lot that way, and I am grateful for it, but…
The Problem So Far
You see, after years of learning lots of new stuff both by myself and on the job, I never went beyond the “good enough” phase in any single language or stack. I’m still hacking my way through web dev, and I’m not a pro statistician by any means, and that’s a problem for me. If I were to choose between being a generalist and being a specialist, I would choose to be a specialist every single time.
Nothing against generalists, but that’s my personality. When I get into a language, say, I’m not looking to hack together a product, I am more interested in learning the language and its philosophy to make sure that it’s comfortable and/or enjoyable for me to “speak” that language. I am kind of an idealist this way (and I did contemplate idealism in a previous article), and the constant feeling of not being able to achieve any form of “mastery” is truly irritating to me.
I often imagine having poured those past years into only one or maybe two of the gajillion things I learned, and what I could’ve become if that happened. Maybe it doesn’t make sense to think that way, and I’m not really into regretting something in the past, but I do entertain the thought from time to time.
What’s Next?
At this point, I think I should be more organized and targeted in what I want to learn. I am too deep into data science and web dev to try something outside of those two. However, there are lots of decisions to take within those domains tech-wise. I might need to filter out some of the stuff I’m doing and focus on one or two things.
It’s not that I won’t try new things from now on, but I think it would help me to pick something to go deep and not spend my whole life in generalist-land.
T-shaped skillset image source: https://www.zerounoweb.it/cio-innovation/metodologie/agile-transformation-come-cambia-il-modo-di-lavorare-per-affrontare-la-trasformazione-digitale/