DEV Community

Discussion on: When do you become a Jack of all trades but a master of none?

Collapse
 
nitya profile image
Nitya Narasimhan, Ph.D

I chanced to read this thread and it resonated deeply. This has been an issue that has dogged my entire technical life (well over a decade) in the software industry.

When I first started in the space, I definitely felt that depth was better than breadth. Better to be really really good at one thing than to know a lot of things. So I got a PhD (in distributed systems & reliability engineering) and my first job in that domain. I worked in it for all of 10 months - then got an opportunity to work on a new project in mobile. I knew nothing about anything in that space, but I was younger and more fearless I guess because I jumped in without worrying about it.

It changed my life and I never worked in the area of my PhD expertise again.

Instead I have since worked on multiple projects (large and small), in different domains, with different stacks, languages and devices. And had to pick up new ideas, tools and technologies along the way constantly. And my takeaway was this. It was not the topic of my PhD that helped me -- it was the capacity it gave me to look at a problem, explore it from different angles and try to innovate solutions by using a wide variety of tools from analogies to trial-and-error to multi-disciplinary collaborations.

So my answer to you is: It depends on YOU. On how you approach the whole idea of learning and applying what you learn. And what your GOAL is when you pick up a new language to learn.

Don't learn for the sake of learning. And don't simply chase after every cool language or technology. Definitely spend an hour reading and absorbing the details but after that ask yourself what your goal is. Then set aside the right amount of time and plan the effort out so that the task itself goes from "just something I did for fun" to "this is what I learnt from doing X and now I can apply it to doing Y later"

In my case, I try to do one of three things for every new language/technology I learn

  1. I spend just an hour or two, understand it, then think about where I would apply it. Then file that away in my head and move on. It comes in handy when having discussions with others or in seeing patterns in other contexts.

    1. I spend a few weeks on it. I build something concrete with it (side project or hack) and see if it lives up to my expectations. If it does, then I try to do a talk on it. (I am trying to start blogging regularly but I do love interactive discussion better). At this point my goal is to share knowledge and learn something new in the process. It also solidifies my basic understanding and gets me out of "beginner" mode.
    2. I spend a few months on it. I build something for a client, or I build layers to a side project. And I get a real sense for how it could fit into some bigger project or platform. I look to collaborate with others who might need that piece or might be able to fill other pieces that I need to make that project come to life. And at that time, it has become a new tool in my coding tool-belt that I can pull out and use for future needs.

Hope that helped :-)

Collapse
 
humzakhan profile image
Humza K.

Perfect! Thanks for sharing :)