Ok, so I need some clarity from you good folk, please.

My lead developer is also my main mentor, as I am still very much a junior. He carved out most of his career in PHP, but due to his curious/hands-on personality, he has become proficient with Golang, Docker, Javascript, HTML/CSS.

We have had a number of chats about what I am best focusing on, both personally and related to work, and he makes quite a compelling case for the "learn as many things as possible; this is what makes you truly valuable" school of thought. Trouble is, this is in direct contrast to what I was taught by my previously esteemed mentor, Gordon Zhu from watchandcode.com. "Watch and Code is about the core skills that all great developers possess. These skills are incredibly important but sound boring and forgettable. They’re things like reading code, consistency and style, debugging, refactoring, and test-driven development. If I could distill Watch and Code to one skill, it would be the ability to take any codebase and rip it apart. And the most important component of that ability is being able to read code."

As you can see, Gordon always emphasised language neutrality, mastering the fundamentals, and going deep rather than wide. He has a ruthlessly high barrier of entry for learning new skills, which is basically "learn something when you have no other option but to learn it".

His approach served me well for my deep dive into Javascript, my first language. It is still the one I know the best and enjoy using the most, despite having written programs in PHP, Ruby, Golang and C# since then. I have picked up quite a lot about different build pipelines, development environments and general web development as a result of exposure to these other things, so it isn't a waste of time.

But I am starting to go a bit mad. I focus almost exclusively on quite data intensive UI development with Vue.js in my day job, although there is an expectation I will help with porting an app to .NET Core 3 in a few months. .NET is rather huge from what I have seen so far, and I am seriously craving a sense of focus. My intuition says I am happiest on the front end, and that focusing on becoming a skilled Javascript engineer is where I will get the biggest returns in mastery, pay and also LIFE BALANCE/WELLBEING...

Any thoughts, people? I would be interested to hear peoples experiences regarding depth vs breadth when it comes to the real world.

  • 3
    10 years ago I would have told you that you should focus on one language until you master it, then the next one until you master it etc.

    Nowadays I’d say you should master at least one big language like java , C or JS but have a good understanding of as many languages as possible..

    You should be able to switch languages and learn new ones fairly fast you don’t have to be an expert in all of them.
  • 2
    Learn one in depth, be open minded and proficient in many.
    As long you you understand the fundamentals, picking up additional languages isn't that hard, most things are transferable with some gotchas across languages.

    Companies these days will just about hire anyone to fill a role, but having multiple languages or stacks even, gives you the flexibility to do what ever role you like or become a greater asset to that company.
  • 1
    @just8littleBit I think there is real wisdom to this. All I would ask though, is what would be deemed mastery? How good should I be with Javascript before learning other things?

    I have been thinking of dropping most of my personal projects (which are now ALL over the place) and going back to focusing on open source contributions. I love Vue.js, and have been starting to read its source code. The level of complexity is orders of magnitude above tutorials and employers are very impressed by PRs, in my experience.

    Beyond that, I want to work on thinking recursively, and honing the SOLID principles. Fundamentals, not shiny things.
  • 1
    >porting my application to .NET
  • 0
    @arcsector XD

    What happened?
  • 0
  • 0
    The core thing is being curious. SE is vast and related to all the other sections of computer science. My background is in electronics so I have a deeper view than what would normally be expected but I can say it's worth it. Learn about the hardware, networking, algorithms, other languages, tools and how they use or impact SE. So you may go deep or wide, but what matters is to be knowledgeable and practical (Pragmatic too).
  • 0
    I don't think they're as conflicting as it sounds first. I think you can be both a master of abstract and critical thinking capable of taking apart any concept and still have joy and passion to learn everything you can get your hands on. It's actually quite a good combination. For your current mentor to be so efficient at learning he necessarily posseses the first skill, that of critical thinking, neutral mental language and capacity of disassembling concepts without being specific about them. He just probably did not go into it deeper.

    So my two cents: both approaches are valuable and they're not conflicting because they are related about different skills. One is about core mental skill that each good dev should have and the other is a personal approach to learning. If you are craving focus then perhaps focusing on a single thing is more of your style - without it being wrong in any way. Cheers!
Add Comment