I faced this dilemma in my career, I decided to go out on my own and start my own company. I'm speaking of a time when there was less technology around. As a small business owner I had to repair computers, neighbor's and the like), I had to install networks, and networked devices, at that time Novell was the mainstay network software. My background education was software and software design with the focus on data-bases, the product Ii used was Dataflex. It has it's own embedded database and was, at that time, the only multi-user software. I digress, well, during that time I had to know a 'bit of everything', hardware, printers and printer setup, networking, internet access, cabling the network, installing network software, MS Office, Windows etc.
Well it got to a point that I could not keep up with the advance of technology. Being a one man business this was impossible. I had to make a decision, hardware or software? With hardware I would have to still know and learn far too much, with software I could write software and build database systems for whomever. I chose software. But in the country where I lived, this was not all that easy, to specialize in software alone. Also, since the software I was using, was not that well known there and I was in constant debates as to "which software was the best, and since there was a plethora o dbase developers (it was the easiest to learn, you see) and every Joe, Bob and his/her uncle could develop some sort of ad-hoc database.
Then, came my, next very big decision, do I stay in the country or do I leave? Purely for survival. I decided to emigrate to the USA, where this software had a stronger foot hold and also, in the USA one can specialize in one field of work and make a good living.
So, this is what I did, I emigrated and I now only do one thing, that I know well, and if I need hardware or network stuff done, someone else can do it. I have ben doing this for the past 15 years and am in a better place know, less stress on in my life, and I make a comfortable living. And during this time the product I use to develop in has become a powerful tool, with an excellent studio, that is fully object-oriented and I can build GUI's that have full access to any database on the market today, be it MS-SQL, Oracle, DB2, MySQL, PostgreSQL etc.
Remember I'm not saying forget about anything else and only concentrate on one thing, I'm saying learn one thing and do it well. I have many "other" interests, of which Ubuntu is one, with Python/Django the other, together with Open Software and all that entails. My passion is my database work (which pays my bills) and then I have these other outlets that I am learning.
So, what have I learned from all of this?
1. Follow your passion, what you love doing, day to day to day. I learned from a mentor, early on in life, he said "if you wake up on a morning, you get up, and, you say to yourself, shit I have to go to work" that day start looking for another job". You have to love what you are doing, and no matter what problem come by the way, it is solvable, and one needs to know the passion is there to solve it.
2. Do a job function that one is very competent at.
3. learn that field of work very well, and become an expert at it.
4. attend user-groups and mix/talk with other developers, remember being an island to oneself never works.
5. Remember there is always someone one can learn from, so forget the ego.
Hendrik van Niekerk
Dataflex developer and this is my passion.