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?