I've long realized that the best way to go about learning another (natural) language is by immersion - you can learn Spanish in a classroom, but you'll never be as fluent as someone living in Spain (over an extended period of time who is interested in actually learning Spanish).
I was curious if the same was true for people who are new to programming. Now, I know that not all of these are specific to programming, but the general public at least generally associates these things with "computer geeky". Would switching to Linux be a good choice? Would using Git (or some other type of VCS) be a good choice? What about joining online forums and IRC? What about writing unit tests or working on larger projects?
I know that in the past programming and computer science was introduced in a very sterile environment. You started in a university classroom with a well known curriculum and book (say, Structure and Interpretation of Computer Programs), say for a few "hackers" who started young (and often with BASIC or the like).
I've noticed that the actual experience of a software developer is more complicated than just knowing a language (and how to use it), there's a whole lot in between, and a whole lot to learn.
Do you think it's better to start programming by immersion? Not necessarily all at once, but rapidly introducing new "concepts" that professionals make use of? Or is it better to start slowly and academically?