Today's entry will be a bit more esoteric than most others, it's basically an broad analogy between gambling a choosing a software language to learn/specialize in.
Basically as a programmer you have many choices in your career as to how which languages to learn and what level. The main 2 choices though are whether or not to become a specialist or a generalist.
Take a roulette table, it's possible to make sure you will have a better chance of winning by spreading your money around it (being a generalist) but if you win, your win will be offset by your losses. If you put all your money on one square, if you will you will win big but your chances of winning are lower.
The generalists may not make as much per hour, but the number of places they can work are much higher and if demand falls off in one of their languages then they can pick up another language and focus on that. They are also people who have the luxury of choosing which tool they want to use for a task as opposed to trying to make their only tool do the job (i.e. hammering in a nail with a wrench).
Roulette however is totally probability driven and not experience driven. Perhaps in that case a better analogy would be horse racing. Before one chooses a horse (or horses) one has to do a lot of research into how it's been doing as a predictor of how it will do in the future. The same applies to computer languages. Some will obviously be around for a while, some are on their way in, and some on their way out. If you learnt Java or C++ chances are you will be able to work in those languages for the rest of your career.
But as with horses, sometimes one chooses a language because one just instinctively likes it.
As for myself, I am an unabashed generalist. I will continue to back several horses and while I may not make as much, at least one of them will win.