Each person has a unique learning style. There are several ways to learn a language. The question of language learning is always present in my life - sometimes I'm the one trying to learn a new language, sometimes someone is asking for tips on how to do it.
What works then? In my opinion the ideal situation for learning a language is to be in the country in question. Sheer presence is not enough. When in Rome, the language learner should do as the Romans do, as well as actively attempt to internalize all aspects of the language (and culture) being learnt.
It is also possible to learn a foreign language at home, far from the country where the language is being spoken.
There are two (and a half) methods that I've found especially useful in my own language-learning. These work best when combined.
Grammar translation method
Wikipedia tells us the following: "...is a foreign language teaching method derived from the classical (sometimes called traditional) method of teaching Greek and Latin. The method requires students to translate whole texts word-for-word and memorize numerous grammatical rules and exceptions as well as enormous vocabulary lists. The goal of this method is to be able to read and translate literary masterpieces and classics"
Yes. This method requires a lot of time and effort, and it also fails to take into account some very relevant aspects of language, such as speaking. The learner does not necessarily learn to use the new language in a flexible way. However, vocabulary, grammar and syntax will be learnt quckly. For this to work properly, the language learner has a teacher who has the knowledge to explain both grammar and vocabulary. The student should also translate from to the target language from an early stage in order to gain good writing skills. Here the teacher revises and explains, but also supports the language learner so that s/he learns to use the language as freely and flexibly as possible.
"Brainwashing"
Surely someone has created a better (and more official) name for this method, but the aim is really to brainwash oneself into learning a language. In short, the goal is to use the target language as much as possible in one's daily life. This includes watching films, listening to music, writing shopping lists, writing letters, reading newspapers, debating with native speakers etc. And when something new pops up, what shall the language learner do? Well - translate it, of course!!
Comparative language learning
This is something I'm trying now with Croatian*. My idea is that it's possible to learn a language quite easily if it bears some resemblence to one or several languages you already know. By comparing Croatian to Russian and Polish (you should see the vocabulary + grammar lists I've created), I'm quite convinced that the new language will make sense in a broader context. It will also be easier to see the differences between the languages and find a way to explain said differences.
*Croatian and I are currently at a very intial stage of flirting. I have done this before with Czech and Serbian, but didn't really manage to complete the project. Will see how this goes.