Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I worked in a lot of different environments since I finished University. I worked as software analyst in optics, numeric control, military and networking environments and learned using a lot of different tools.

My main skill is software design (and C++ programming) but I learned Python, Qt, MFC (still used, I couldn't believe...), Bash and Perl. I also learned to configure VPNs, MySQL and tons of other tools and programming libraries. I also developed Linux realtime modules. Since I like a lot to learn new stuff and working on project not for long times (2 years top) I become a consultant: the best way to ensure horizontal growth.

I chose this way because of personal preferences but also because my greatest fear was to end working on a sub-sub-sub problem of a sub application domain for 30-40 years of my life. I've met people like that. They have huge vertical skills in the application domain. For example a colleague of mine has been programming automation of machine tools in C++ for 20 years. He knows every single little thing he needs to know for machine tools but polymorphism is the most advanced C++ feature he knows and C++ it's his main language!

My fear is basically that the job market could punish me in the long run. Of course my colleague could have the same problem: if his company goes bankrupt I wish him luck finding another job in the same niche.

There is a trade off between vertical growth and horizontal growth. How do you cope with that? Do you think that vertical growth has more advantages in the long run? Please think in terms of job market and in terms of personal growth.

Is there a way to balance the two kinds of growth?

share|improve this question
    
Related/possible duplicate of programmers.stackexchange.com/questions/20653/… –  Anna Lear Dec 2 '11 at 5:17
    
Vertical growth is the time period before programming. Horizontal growth begins at the onset of programming... ;-q –  Juha Untinen May 3 '13 at 11:59

3 Answers 3

up vote 7 down vote accepted

The demands for "horizontal" specialists are very high in small companies, because the few employees there needs to cope with a lot of different tasks. Diversity is a real bonus here. But the larger the company the more it needs "vertical" specialists, because the division of labor doesn't require horizontal knowledge any more.

The question then is whether you are targeting the big employers or whether you prefer to work in smaller companies (each having their different pros and cons). Having additional knowledge like knowing business domains and their problems will always be helpful, just like gaining additional skills in communication etc., but I take it your are more interested to know if it's helpful to know a fifth programming language and a third OS and a sixth tool. So my short answer is: Examine your employer wishlist and you know how to specialize.

share|improve this answer

My strategy to cope with that problem (you are not alone) is to have a mixed strategy: I've good knowledge in one domain (warehouse management), but I also work in other domains to get a broad technical skillset and become less dependend on that one domain, since there have been extended periods with few new warehouse projects, when everyone was trying to save money by not investing in intralogistics.

Generalizing this idea, you could try a stairway strategy: Alternating vertical steps and horizontal steps. E.g. You start with Java skills (right after college, no domain knowledge at all). First you use your Java knowledge to get a java job in the healthcare domain, then you use your healthcare knowledge to get a C# job in that domain. Then you use your C# knowledge to get a C# job in the banking domain, and after that, you use your banking knowledge to get a, dunno, C++ job in banking. Your C++ knowledge could get you a job in engineering, etc. Of course you can't become an expert in everything, but having a good portfolio makes it easier to survive through tough times.

share|improve this answer

I find that programmers who simply solve the problem without providing any feedback to the person who needed the problem solved tend to become "guru"-like. They become the expert for that aspect. That comes at an advantage and a disadvantage. It's good job security, but it also means that any future problems you're likely to see will be that since that's what you're known for.

Inversely, if you provide feedback, you're sort of putting yourself in the opposite role of a guru. You assist others on how to do things and they learn as well. Generally speaking, it's better for the company's interest, though you don't have that same job security that you'd have being a guru. However it also means you can grow. A guru is the last person they'd look to to promote since they need you to be an expert in what you know (a smart guru masters two such technologies so that if the company doesn't need one anymore, at least he still has a job).

I'd expect what you're looking for is something in between. Explain roughly how something works, but leave out the details so that you're still an important aspect when it comes to that, but at the same time, you're perceived as a team player and even a leader if you can demonstrate that you're also capable of making smart decisions.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.