I am a young Software Engineer. Although content with work and salary w.r.t any other field, I always wish to be able to do something in a niche area. The general software Engineer is something everyone around me does and does it well enough so that it gets impossibly hard to be or even judge the top 10%. I feel I should chase something which is not achievable by many. 10x Engineer can be one such thing. I want to develop/master a skill that very few can achieve, which would make me highly valued and sought after. Every now and then something new in CS pops up and a million people are chasing it already. In other words, among 100 people I would like to be the one guy who is always calm, cool and confident because he has a skill that no one else can easily learn/aquire. Is it even possible? What advice would you give?
The tricky part is that there is no guarantee that the hot skill of today will still be hot once you've developed expertise. When I was a young junior software engineer in 2005-07, for example, the hot skill that everybody wanted but few people had was Javascript (recall that this was before JQuery, let alone Node). It was great for a few years, and helped me get my foot in the door at a couple places where I could learn other skills. But now basically everybody knows Javascript, and it's looked down upon as the language of junior developers.<p>If I were you, I'd look for a sub-field that's <i>interesting</i>, something where you enjoy doing the work and learning the material itself. And then wait for the rest of the world to come around. When you look at people who are actually acknowledged as experts, it's usually because they got started on something before it was cool, and then had built up years of expertise when the world decided that this was suddenly the hot new thing. Note that there's plenty of risk in this: there's no guarantee that the world will actually come around, and you might end up working on something that the rest of the world thinks is a niche hobby. But at least you'll be working on something you enjoy, which is sorta the point of life after all.
It's an interesting question, specialization vs generalization.<p>It may be easier for a generalist to get a job (any job) because there will always be somebody who needs to get X done with Y technology and somebody who can learn Y technology quickly and get X done is in demand.<p>On some level you are not going to be all that productive doing that since you will spend your time learning how to get the length of of a String with technology Y and then having to learn it all over against with technology Z.<p>At that rate, however, you will be a "junior developer" when you are 45.<p>On the other hand if you develop some specialized skill it may well be that this skill is not in demand or that the jobs involving this skill may not be well paying, etc. (i.e. many of the best paying jobs give you hazard pay for working with toxic people, toxic code, toxic tooling, etc. -- even if you are objectively more productive taking a "path less followed" you are bucking the dominant paradigm)<p>There is "no silver bullet" for careers in software development.
Do ten times the amount of study and practice as the rest of the crowd.<p>Read the best and as many relevant books you can afford about current and next subjects you are working on. Keep reading. Don't stop reading.