This week's book giveaway is in the OCAJP 8 forum. We're giving away four copies of OCA Java SE 8 Programmer I Study Guide and have Edward Finegan & Robert Liguori on-line! See this thread for details.
A lot of you claimed in a previous post that your are learning new languages in your free time in order to become great programmers , and thus have your pay check secured in spite of the ever increasing number of programmers in the world.
So , how and what do you study , where do you find time for that and how does this fit in you general lifestyle ?
And secondly, what do you mean by great programmers ?
recommends learning one language every year. Admittedly, in the last 5 years, that does seem a bit high to me (I probably target half that). I probably lost count of the number of languages that I learned and forgot, so unless a language comes ridiculously highly recommended, I don't learn languages for fun anymore. All the languages that I learn, I actually use in my day job.
On the other hand, when I was younger, I loved learning languages for fun. I probably went at twice the recommendation. My favorite language that I learned and never used professionally is probably prolog. My favorite language of all time (probably due to nostalgia) is probably Turbo Pascal. I still have a fondness for assembly, specifically 8088/8087 -- but these days, due to how instructions pipeline and stuff, an assembly language programmer probably wouldn't be as good as an optimizing C compiler.
As for the second part of your question... I learned languages because I needed them for work. I learned languages because it was fun. I never learned languages because of "increasing competition for jobs" or securing a paycheck, so I don't have an opinion regarding that.
No idea about "great programmers" as I'm certainly not one! But I'm trying to become a better - and more marketable - programmer, and it's getting much easier to do this now we have resources like Coursera and Udacity. Both these organisations offer you excellent tuition from expert teachers in a wide range of subjects related to computer science, from algorithms and compilers to introductory programming in Python or HTML5, many of which are directly relevant to current trends in the industry or can simply help you to become a better developer. And it's all for free, so all it costs is time. I've done a few Coursera courses and they have definitely opened my eyes to new possibilities and given me the basic foundations to start pursuing new career goals.
My interests are around alternative JVM languages, functional programming and "big data", all of which feel like they will see healthy growth in the next few years (*), so I'm trying to construct a plausible set of skills around that area. In the last year I've also done some Python courses with O'Reilly School of Technology, which I had to pay for, but the courses were much better and cheaper than most commercial training courses I've seen. I'm now using Python occasionally at work for ad hoc scripting, and it's also been very useful in exploring statistics and "big data". But as an experienced OO developer you could easily learn Python from a book if you wanted.
But you seem to have lots more Java experience, so you already have a massive head start on me, and there should be lots of interesting and potentially lucrative areas available for you to explore if you want to. And of course there are lots more options if you want to move beyond hands-on developer roles e.g. business analysis, architecture, training etc.
All you need is to put aside a few hours a week, and you can start learning something new to extend your skills and prepare you to take advantage of new opportunities in future. And it's fun too.
Finally, "The Pragmatic Programmer" is a fine book for any professional developer, but I can also recommend Chris Duncan's "The Career Programmer" for a useful and entertaining perspective on how to stay in work as a programmer.
Most "great programmers" went into programming because they find it fun. Which means there is a natural affinity to want to play with things in one's free time. It's not just learning new languages. It's trying out new things, reading and for us here - interacting with others. There is a big difference between the programming you get paid to do and what you pursue just for fun.
Personally, I read a lot (books and websites), blog, participates in forums, code for this website, code for no purpose at all and lately take MOOC classes. Some of this happens while I'm commuting. And some is done "whenever."
"increasing competition for jobs"
I don't think about this. Once you've worked a certain number of years, you HAVE to work for an employer who values skills over the illusion that a new programmer is cheaper. Yes, I earn more per hour than someone right out of college. But I'm an order of magnitude more productive. A good employer recognizes this. (I'm not old enough to have to deal with age discrimination, but I recognize it exists.)
And this is true even when the language changes. As an example, we are often asked to solve problems that nobody has done before. Even within the same language. Having other experiences and skills is what provides value there.