ruby => rails
python => nltk,django,opencv,scipy
c++ => opengl,opencv
java => opencv
js => node,angular,ember
clojure => overtone
That way you learn the language and some specific good use cases of it.
"Programming language is just a syntax, the core logic of getting things done is already available in your brain."
Here is what i'd do
A) Remember what you already learnt from your favorite language
1] Syntax
2] Libraries
3] Reference Documentation
4] Organizing your code
5] Building / Running Programs
6] Deploying code to farms of servers (if you are interested in sysops, explore this as well)
B) Once you get a hang of basic syntax, start with Examples and keep making progress.C) Pick a simple task, from what you have already solved before. Program it in the new language by expanding your skills towards 2-5 points and you are done !
Is this actually true, though, when jumping between programming paradigms?
Do you mean learning or mastering a language. It is kind of different. Looking for "ideomatic python" will help getting pythonic Python code done.
Not going against the spirit of the language helps.
When I first took a gander at Erlang, I poked at it, got a bit bored because reading the language wasn't a bit harder. I took some time off, revisited a couple of books and looked at some code and it made more sense.
But, overwhelmingly the way to learn is to find a small project that you are interested in implementing and star there.
There really are two parts to learning a language -- the syntax and the ecosystem/standard libraries. Often, becoming accustomed to the syntax is the easy part, understanding the ecosystem can take more time.
Across, I don't know, 20-25 languages at this point? Although I only actively use 3-5, depending on how you want to define actively.
Learning something new in your field of study is not different, it is just easier because you have some context.
Once you have a basis of data structures, object-oriented programming, and an understanding of libraries in one area (say web programming with Java Servlets) then learning another language is just a matter of building something and reading the API docs as you go.
Try re-writing something not trivial but not overly huge to learn the differences between old and new. After a while they all look the same, regardless of how trendy or hip something might be.
I've read folks who have some game such as tetris or some other as an example.
Also since I know various language commands and methods, I'll read through the language reference from ! to z and see how it compares to what I know and probably take notes along the way.
Perhaps most important is to not settle for code that you know is not ideal. If you recognize that a piece of code you've written isn't good, then improve it. If it's still not idea, improve it again. Keep iterating on it. This will necessarily involve focused learning. In fact I think this is the key to picking up a language quickly. But it does require that you not be mentally lazy.
Tutorials and canned examples are ok, but if it's not something I actually want then I'm not really learning much.
And if you can't do anything useful in the language you want to learn, then ask yourself why you want to learn it?
Or take something relatively simple, and code it in whatever language. I did this a while back, and wrote a port scanner in c, java, perl, and python.
might help: http://rosettacode.org/wiki/Rosetta_Code
reading about the language or read code. Writing code...