views:

213

answers:

4

One of the things mentioned recently maybe in the SO podcast or Joel was that the best way to succeed at business when you start out is to start specialised and concentrate on one thing only.

If you say you're the jack of all trades; you're just another jack! If you say you're a specialist in - I think joels example was some type of faucets - then even though you think you've just removed most of your market; you've actually increased the odds of getting business in a specific marked as you'll stand out more against the rest; somebody somewhere will want what you more than if you just say you do everything.

So anyway, my question is; I'd like to specialise myself in something. I've been doing C/C++ for a long time but never really pegged myself as either win32, mfc, directx, wxWidgets, qt, boost, sdl, allegro, etc etc. I've tried everything and done different things in each; I've also started moving into actually writing for linux (and now osx) as apposed to just using it so my opportunities have grown even further.

My view was that the more I know the less likely I am to become stagnant and stuck; if I know bits of each I can get a job anywhere and then learn more as I need it.

Over the last couple years I also took on .NET and then PHP/LAMP; I feel quite comfortable in either but I guess in my heart I'm still a C++ guy (although I think I've learned more commercial things in PHP than I have done with c++).

The other issue I feel is that the world is becoming highly web-based, and technologies such as C++ are becoming less and less used (ignoring Google's new tool - can't remember the name) and other things like flash and flex are becoming more popular. I do agree that the tools we use to view the web are written in C++/like but in terms of market share I think all the bases are already covered.

I was wondering how people decide what peg to eventually pick and why; and is this for business reasons (i.e. it makes more money) or for selfish reasons (i.e. I feel complete by writing things in C++ as apposed to PHP).

Maybe i'm asking the wrong question; maybe I should by specialising in a specific product rather than a language as a service; Didn't think of that...

Cheers, Chris

+1  A: 

For people just starting out in the business it probably makes sense to specialize, cause they need something in order to compete.

For more experienced developers I agree with what The Pragmatic Programmer book suggests, namely that as a professional developer, you should always try to add more useful tools to your toolbox. E.g. they suggest picking up new programming languages on a regular basis etc.

If you do that, you will obviously not become a black belt in all of these areas, but you will broaden your horizon and learn to look at problems from different angels, which is very useful imo.

Brian Rasmussen
Yeah; I remember the "old" days when I first started out and C++ was all I knew; As time passed and I learned new things the choices got harder as so many tools overlap and there's so much about each that I don't know (and will probably never know) enough about to make the _best_ choice possible.
widgisoft
+4  A: 

I'd guess that most people choose a reason (interest, money) to head in a particular direction at the beginning of their careers, and the rest is largely serendipitous.

I still try to keep a broad general knowledge across the technologies related to my current and imminent responsibilities (and those of my friends and coworkers, so I can understand our conversations). But I've specialized in those that are necessary to stay "ahead of the curve" in my specific domain, or are unrelated but interesting to me, and I've dabbled in still others by osmosis.

You noted that "the world is becoming highly web-based, and technologies such as C++ are becoming less and less used." So you can either "follow the herd" and chase the new tools and methods, or you can find a niche in the areas that are creating them. I've chosen the latter because, although there may be fewer positions available, I find them more challenging and rewarding both intellectually and financially. Oh, and there's less competition!

As you advance through your career, you'll find that many technologies are very similar, with a lot of overlap. Once you've covered the basics, it becomes less important to know any specific platform or language, and more important to understand the techniques and processes that lead to effective, robust, high-quality products.

Good luck!

Adam Liss
Continuing from what I said about where the world is moving and leaving a "hole" behind; this is the exact specialised market I was describing so yeah, good point! Less competition. didn't think of that either :-p
widgisoft
+1  A: 

As someone who has to both hire and work with a variety of developers, I think that you need both breadth and depth. You need to know a wide range of technologies and platforms to show that you are flexible, can pick up new skills as needed, and are interested in broadening your knowledge. You also need one or two areas where you have deep knowledge, to show that you are capable of becoming an expert.

I'd much rather hire someone who has a range of skills, but not necessarily the exact set of skills that I need, instead of someone who is an exact match, but can't learn anything new. One of the few certainties in development is that whatever we are doing today won't be the same thing as we are doing 5 years from now.

As for C++, we are making heavy use of that in order to develop highly distributed agent based simulations. Think hundreds of millions of agents, tightly coupled across a couple of thousand machines. For this niche, we haven't found anything that beats C++.

KeithB
The thing that does get to me is that the longer I spend in one area the more it takes to move to back to another; As I commercially spend my time looking at PHP all day and reading web related articles I don't get chance and miss the more application/game/simulation based ones;
widgisoft
+2  A: 

Having been down this road myself, and currently owning and running a small software house, I'd say you're right to focus on a specific market for the reason that you will be able to out perform generalists in the same market area. Note that I recommend specialising in a given domain rather than a given technology, as technologies change quickly whereas domain knowledge tends to last longer.

It also depends on whether you intend to work as a contractor or FTE in someone elses business, or go it alone and set up your own software house. In the latter case, you will need a set of skills between you and your partners that includes analysis, development, testing, sales, marketting and finance. As such, once you have enough development skills to meet your needs, you may want to focus on bringing the complimentary skills up to speed. For example, over the last number of years, I have invested a large amount of time learning effective test automation techniques, rather than new development tools.

Shane MacLaughlin
Yeah, as an employee variety seems to win.Starting on your own as either a contractor or your own business seems to go the other way and favour speciality;
widgisoft
As a contractor I can see that. Starting your own business, unless you are going to hire from the start, it seems like you need to have even more skills, like marketing, finance, etc., as well as all of the skills it takes to write, build, and ship a product.
KeithB