

Ask HN: Specialize or generalize? - enrmarc

Who I am? Developer, twenty-something, about 3 years of experience. I&#x27;ve worked with Ruby (plain and Sinatra), Python (scripts), PHP (and CakePHP and Slim), Java (plain Java and Android), JavaScript (and CoffeeScript and AngularJS), HTML (and Jade), CSS (and Sass), relational db modeling and querying, SQLite (Android related), MongoDB (via mongoose), Express (AngularJS related). I know about REST, API design, MVC,design patterns, etc. And more theoretical things like data structures, algorithms, discrete maths and all those things one should know after getting a BCompSc. I like reading books and I&#x27;m trying to read some of the ones listed here: http:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;1713&#x2F;434171<p>I worked as an Android developer, as a fullstack developer and now as a FE developer. I feel myself confident if someone ask me to implement something (build X from scratch using Y and Z, even if I don&#x27;t know Y or Z) but the thing is I feel like I don&#x27;t know anything concrete about the technologies above. I mean, if someone ask me about &quot;what is a block in Ruby?&quot; or &quot;how controllers should share things in AngularJS&quot;, or &quot;what are array comprehensions in Python&quot; or &quot;GET or POST to update something?&quot;... I think I know the answers (because I have deal with that in practice) but I&#x27;m sure my answers will be very vague; like if I just know the surface of them.<p>I enjoy knowing a little bit of everything but a) I don&#x27;t have enough time and b) I guess I&#x27;ll have to, at least, master one or two technologies in order to &quot;make more money?&quot;. The dilemma is which one? The most I like? The most I already have experience with? The one I think it&#x27;s gonna be there for at least 10 years? Or perhaps I just can continue being a &quot;jack of all trades&quot;?<p>Thanks(and sorry for my English).
======
Arcana
I think for building things, especially in a small team, a Jack of all trades
is preferable.

I think it depends on what you want to do. As you said, you feel confident in
implementing something. I think that's the key thing, getting the
implementation done or getting the project built.

There is certainly room for the specialists, take security for example,
implementing certain types of security take a specific set of knowledge and
experience. If that's what you love to do, then that's a fine path. If you'd
rather build things or like to experiment, a more general approach is good.
You can always team up with other people later on if you need more
specialisation in a certain area.

I think as well that Jack of all trades doesn't apply as much to technology as
it does to building for example. A builder may specialise in bricklaying for
example. That's great, building a modern building on your own is going to take
a team anyway. Besides, bricklaying probably isn't going anywhere any time
soon.

Technology on the other hand is constantly changing. You could be a specialist
in a programming language that five years down the line is mostly irrelevant
with weak support.

I think in a way, you're both. You seem to specialise mostly in programming,
while generalising within programming. I think that's a good mix to allow you
to develop a strong and useful skill set while remaining lean and adaptable.

------
akhilgupta82
My recommendation would be to master one thing and for the rest you can be a
jack of all trades. This is because, while you are only 20-something right
now, when you do come into your 30s, and want to get higher up the ladder in
responsibility, people will look up to you for your 'expert' advice. You can
only put yourself in this position if you decide to specialize on one thing at
a minimum. Maybe the question should be given your very diverse and incredible
skillset, what should you specialize in?

------
ruraljuror
One way of thinking about this is as the T-shaped skillset. You have
familiarity and experience with a breadth of tools (in this case I would think
web technologies) but go deep in one or two. Sorry, but I can't help you
choose which one.

On that list of books you mentioned, you might want to skip to _The Passionate
Programmer._ It discusses some of the questions you're raising here.

And FYI your English is excellent. No need to feel self conscious about that.

