Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Hacker: Jack of All Trades or Master of Some / None
10 points by orange5912 on Nov 6, 2007 | hide | past | favorite | 16 comments
Have any of you developers struggled with determining whether you'd rather be a well-rounded developer, or one that focuses on a few areas but becomes an expert on those areas?

I'd like to pose this question in the context of entrepreneurship and freelancing, since we know specialized developers would fit in a corporate system.

As a programmer with an entrepreneur mind, this is something I question while trying to self improve my skills. I consider myself in the category of "jack of all trades" and am currently picking up new areas of development.

I figured a jack of all trades developer would be more appropriate for startups bootstrapping, a really small team, freelancing, and getting version 1 up of a product without much dependency.

As for the specialized coder, with an entrepreneur mind, I see the specialized skills fitting perfectly with a team of other very specialized developers.

I sometimes get that feeling of "spreading myself too thin" when trying to pick up many new languages / frameworks in a short amount of time.

Currently I've picked up Rails for the past year, but have been wondering if its worth honing my front-end skills, or instead, contract it out, etc.



Marc Andreessen has talked about this and mentions a quote from Scott Adams (http://blog.pmarca.com/2007/10/the-pmarca-guid.html):

"If you want an average successful life, it doesn't take much planning. Just stay out of trouble, go to school, and apply for jobs you might like. But if you want something extraordinary, you have two paths:

Become the best at one specific thing.

Become very good (top 25%) at two or more things.

The first strategy is difficult to the point of near impossibility. Few people will ever play in the NBA or make a platinum album. I don't recommend anyone even try.

The second strategy is fairly easy. Everyone has at least a few areas in which they could be in the top 25% with some effort. In my case, I can draw better than most people, but I'm hardly an artist. And I'm not any funnier than the average standup comedian who never makes it big, but I'm funnier than most people. The magic is that few people can draw well and write jokes. It's the combination of the two that makes what I do so rare. And when you add in my business background, suddenly I had a topic that few cartoonists could hope to understand without living it."

This is general advice though and doesn't necessarily apply to the question of "what should I work on now that would help my start-up the most?"


I thought that was Scott Adams.

The advice is sound because it circumvents a hazard of trying to become a 'generalist' - Most make the mistake of thinking the formula for Renaissance Man is 'learn everything'. I think it's more accurately to spend 60-80% of your time going deep on 2-4 specializations (the more diverse the fewer) while spending 40-20% of the time getting a broad overview of anything else that interests you. Do for x years, choose new specializations, rinse & repeat.


Yeah the quote is by Adams, but I found it through pmarca so I linked to that article instead.


If you're in a startup, you're going to have to wear a lot of hats. Even the hats you aren't wearing, you're responsible for finding somebody else to wear. So to some degree, you're going to have to be a generalist.

But do it smart. Use mentors for stuff at the fringes that you don't think you're going to keep doing over and over again, like hiring a lawyer or finding a PR firm. Specialize, but only lightly, in a few areas that have important correlations to the field your in. For programming, that would be knowing a couple of OOP languages, a couple of Functional languages, a couple of relational databases, and a couple of large datastore systems. You don't need a PhD, but you do need some practical experience in various ways of doing those things you're going to be doing a lot of. Once you learn 2 or 3 ways of doing the same thing, you'll have enough of the pattern to keep you going for a good while. Then there's just being honest with yourself. For instance, I suck at UI. So either somebody else would have to do it, or I would have to farm it out.

In the technology field, approximately 80% of working knowledge changes every few years. That means that it's not a question of being a specialist or generalist, it's a question of constantly relearning. What are you relearning? Making that choice is the key to your future survival as a company. There are two types of innovation -- the knd that happens as part of being a super specialist at the forefront of some small subset of knowledge. And then there's the kind that happens when you mix various fields in an unpredictable manner. Guess which one is a better model for the types of startups we talk about on this board. Specialization is a great place to start, but you have to move from there to somewhere else to run a startup.


I don't know. "specializing" in a couple of OO languages and a couple of functional languages sounds like way more work then necessary. You might be familiar with a couple of languages and a master at 1, but to master 4 or more programming languages at the same time is going to be very time consuming.


Yeah this isn't something where a brute force attack is going to work. One of these a year, or one every six months, should be doable for most people. But definitely don't try the whole shebang at once.

And I wouldn't look at it as work. More like nerd-traveling: you get to see a lot of neat and unusual things, and when you're done, you appreciate home a lot better and have a better perspective on things. Having said that, I'd be sure you solve a few non-trivial problems. Traveling is no fun if you just take pictures and don't get out and participate.

In general, if you haven't tried a new way of making solutions in the last five years or more, you're sucking wind in this biz. That's advice just about _keeping up_, getting ahead is an even tougher game.


Well, a language a year is really far off from mastering 4 languages or so. I have used a handful of languages over the past 4 years and while I can say that I mastered them fairly well when I was using each one individually I can no longer claim mastery of all. The truth is that you get accustomed to a new language, a new way of thinking and you quickly forget how to even do basic things in the other languages you once mastered.


Ah yes, the time of pain -- the time when you're back in a language you did a while back and you just know it's going to hurt for a while until your brain gets re-tuned.

I think C++, for me, is the hardest to re-tune to. There's just so much stuff going on. And it's one of those languages where the code constructs themselves can lead to a lot of crazy complexity. Was that a multiple inheritance and a virtual base class, or just an interface? Do I have any friends? If not, do my parents have any friends? Are my operators overloaded? Is this a volatile method? If so, better stand back!

I'm not saying to code like this, but C++ stuff, even when written well, can just get gnarly as heck. You enter this entire zone and mindset when you're there, at least I do. Some other languages, like Java, are not that tough to come back to.


There are lots of generalists, but very few specialists in any particular area. On the other hand, most problems don't need a specialist in most areas.

Which approach is best depends largely on how much freedom you have to pick your area of work. If you're creating your own startup, being a specialist is great because you can make sure the problem you're working on is in your area of specialization -- myself, I'm working on online encrypted backups, and the areas of expertise needed (cryptography, security, data compression, concurrency) are precisely the areas which I'm most expert at. On the other hand, if you're joining your best friend from university to work on the startup idea which he picked, odds are that it's going to play to his areas of expertise, not yours, and you'd be better of being a generalist who can fill in the gaps after someone else does the heavy lifting of solving the "hard" problems.


Be a specialist in one area, and learn enough about the other areas to allow you to judge the quality of the cofounders you join or the contractors you hire.


I think ideally the founding team should have all the necessary skills to create whatever product the business is building, without relying on anyone external. For a web app company that means at first you're DBA, SysAdmin, Programmer, Designer, Customer Support, Sales, etc. As you grow you hand those roles off to others. Web design is the only thing I'd risk letting someone external handle, but even that can become a bottleneck if they're unavailable and you need to make changes quickly.

I also think you should work to become really good at something. If for no other reason then it's hard to build respect from others if everything you do is only mediocre.


Heinlein had it right. Specialization is for insects.


Bring out the Renaissance Man (or Woman): http://en.wikipedia.org/wiki/Renaissance_man


I think Huxley had it right.

Know something about everything and everything about something. -T.H. Huxley


I can't comment on the startup scene. I like the phd model: Become an expert in something. You'll find that on your way to expertise, you'll pick up a diverse set of skills.

Why is the phd model better than something else? Don't know. Intuitively seems to make sense. Makes me nervous to hear that people are picking new frame works left-and-right.


I wanted to also mention being a generalist helps when farming out pieces - at least you'll have a sense of the quality of work you're getting, and an idea of whats feasible




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: