Ask HN: Being a generalist vs. being a specialist

23 points by aneelkkhatri ↗ HN
Getting excited about new thing and learning as much as you can until some other newer thing come your way exciting you to learn about the new stuff...; So many interesting stuffs, so little time! Life is short; why deprive yourself of so many exciting things? Or life is short; you can't do so many things so better speciallize! What do you have to say?

26 comments

[ 2.9 ms ] story [ 61.3 ms ] thread
As a generalist extreme, I offer this fair warning. Without specializing in something you may risk low cash flow.
Ha! That's exactly me. However I'd suggestion being jill of all trades and master of 1.

In my experience I find it more helpful to be really good at one thing but can do a lot of different things (full stack, design, product) to get the job done, you're more appreciated that way. In my case, iOS is my One.

If generalization is something you enjoy, that skill is hugely important in the DevOps / Sysadmin world.
In the start-up world especially.

I'm a front-end dev, but often I find my self writing back-end stuff, because the back-end dev just doesn't have the time.

I find the T-shaped approach workable: https://en.wikipedia.org/wiki/T-shaped_skills

The generalization enables learning new skills/technologies faster and helps with problem-solving; the specialization helps with being able to bill a higher rate.

Agreed, I've experienced this first hand.
I'm trying to do both by learning python really, really well. I only have to specialize in one language, but shit, the ecosystem allows me to work in all kinds of areas: ML, Web, big data, desktop and mobile apps...
It depends.

Hear me out. When people say they are a generalist, they actually mean they know a bit of JS and whatever the framework of the moment, a bit of rails (or Django or Play) and they can come up with a bash script. If this is you, better specialise otherwise you will be fucked.

Now, if you can do a full grown mobile app, a backend service for realtime data, do 3d for the latest console or write a CAD file viewer that is fast, write kernel drivers, hack up nginx to do your biding and write an ETL for oil company, pick an haskell AI/learning project and improve it. Keep at it. You will have so many doors open you don't know what to do with your time.

Can you please explain why you'd be screwed if you're in the first class of generalist?

Also, maybe I'm more junior than I think, but your second class of generalist actually seems more like being really good in a few verticals. Not an expert, but demerit not a generalist.

Sure, because 'you' aren't really a generalist. You are just a 'junior' developer that dabbles a bit in things.

Don't get me wrong, someone like that has a place in some companies, but it is the difference between being payed 20 bucks an hours vs 200.

All the stuff I've mentioned before, I've done. I've worked in more industries than some have jobs. Right now, I can pick and choose what I do and get payed way too much for it. I didn't specialise (but I admit there is a place for that) but I have enough breadth that I can go from games, to AI, to 'deep learning', to crud, to mobile apps without an issue, and with all that baggage, I can ask for the big money as well. Let me just put a quick list of language where I've worked professionally charging those values:

- C

- C++

- Ruby

- Objective C/Swift

- Haskell

- F#

- Java/Kotlin

- Python

- C# (and Visual Basic, both .net and not)

- Delphi

- Borland Builder C++ (I don't even remember the right name)

This isn't a brag, seriously, just to point out that what a lot of people consider to be generalist aren't even scratching the surface of it.

Fair enough, that is pretty impressive. That's how I want to be. I hate being restricted to the language I know. It's nice to be able to pick up whatever framework/language that would be best for the job at hand. For me, idk what it is, but I also hit metal blocks when learning because I don't know how everything connects in the bigger picture just yet. Learning other languages, even if it's only knowing the basics and syntax, tends to help me it greatly with understand and making everything click. Usually when that happens I see a huge busy of understanding as well until my next road block which will usually last a while again. I can definitely see myself being in your position in the future (only started programming a year ago).

Curious, do you have a background in something else besides/before programming?

Not really.

When I was 4-5, my father took me to the arcades. Playing games there I had the lightbulb moment where I said 'That is what I want to do'. At 11 I was reading the Turbo Pascal manual trying to figure out how things work (mind you, this was before Internet access was a thing and before I was playing with the ZX spectrum playground). From there to C/C++ (DJGPP anyone?) to VB when at 16 I started doing payed work. At 19 I wrote a book on C++ and games and from then on, games, insurance, banking, industrial processes, etc etc.

I did 1 year at university before I realised I preferred to be working. This didn't mean I didn't learn (I have a library that I'm sure some small schools envy).

But you know what my turning point in my career was?? Boxing! Boxing was what gave me the discipline and hardwork to go through whatever it was thrown at me. Not sure if that is relevant to 'background in something else' but hardwork, dedication is 80% of the path, the 20% left, well... that is just luck (this coming from someone that isn't really 'smart' by usual standard)

ps: I'm slightly tipsy so I apologise in advance for the lack of coherence.

Gahhh, can't wish enough that I got into this earlier. Graduated with a degree in mechanical engineering, worked for a year at a startup, took a year off to take the plunge into programming. Getting my feet wet with webdev right now. Plan is to get into C++ as it seems that's where the industry is heading with VR, AR, robotics, and web assembly.

I was actually wondering if you did something prior to programming thinking that it may have influenced your wife range of fields. I think coming from mech eng is probably the reason why I feel the need to understand how the whole system works.

Im very interested in being financially secure. What do you folks suggest would be something good to specialize in? I do rails now, bit of front end. Heavily interested in iOS.
Might be a good idea to start specializing in controlling your costs. :P

Half-joking, but remember that there are two sides to financial security: your earning and your expenses. If you are making $200k but living paycheque-to-paycheque, you aren't much better off than living frugally on $75k. And the magic of compound interest means you are better off staving while you are young.

Even if you aspire to learn many different skills, technologies, disciplines, etc, you should spend time becoming an expert in at least one thing. You'll learn and develop many meta-skills through mastery of that one thing that will be hugely beneficial across everything else.
Specialization gets you hired. Generalization gets you promoted.
Learn, explore and work on things that gets you excited every day. If you're no longer excited or learning how to be better then you have some catching up to do.

You don't need to write kernels, oil company etls, program mobile apps, or make a self driving car to be valued. You just need to solve real world problems, using smart tech that other businesses value too.

The biggest issue I've noticed is people aren't well connected to learn and read up on tech. Having knowledge of your industry and tools is required, some don't make a conscious effort to keep up.

I dont believe there is a 'right answer' and someone is best pursuing what suits them self personally.

For generalists, assuming intelligence and a reasonable affinity for learning there is a heap of benefit. A generalist can become a specialist relatively quickly, especially when doing something day-to-day on a job. And often a generalist has benefit in understanding the big picture which aids in getting the job done.

Specialists have that edge in knowledge and often stay up to date better and general skills can erode quickly in areas of moving technology. This is useful when you need something worked on at the highest level right now and don't have learning runway.

Personally I've avoided specialising as I like the work diversity, plus enjoy the employment opportunity of having a wider skill set. Also in my field of marketing I find specialists rarely amaze me with their topic knowledge, sometimes the opposite. For some of the specialists I wonder if they get limited to specific areas as they dont like learning new things vs actually enjoying taking their knowledge to as far reaches as possible.

>"A generalist can become a specialist relatively quickly, especially when doing something day-to-day on a job." Same feeling! Many things I learn seem to have similar patterns be it programming, graphics designing, music or photography; and every new thing learnt broadens my perspective on how things work.
You could be a technologist generalist, but specialise in an industry (or vice versa).

Bare in mind, if you've got expertise in an area that people value, people will pay you handsomely for it.

Hi, people generally go to a speciaist when they have a problem they can't solve on their own. They believe that a specialist has the requisite training and experience to help them solve their problem at the risk of making the barest of mistakes. Generalists on the other hand, are believed not to dominate any area of life as problem solvers. So, people don't trust them to solve their problems. http://ayietim.wordpress.com
I agree with T-shaped, but I will add: don't just expand the "breadth" part by learning new languages. Sure, learn a language or two a year, and experience a variety of paradigms. But more importantly, broaden yourself with skills that complement what you already have. So if you're doing Rails, get to know Postgres really well. Get to know one JS framework really well. Get to know Chef so you can deploy and manage your apps. Learn C and write a Postgres extension in it. Learn statistics and contribute to a Ruby-based stats gem. Pretty soon you are a "full-stack" developer. And broaden your non-tech skills too: Learn how to write well. Learn some public speaking. Learn how to read financial statements. Learn about marketing. Learn about managing people. Etc.