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.
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.