The best way to become fluent in a foreign language is to live in a country where that language is used. Immersion forces one to become fluent by focusing on real-world language skills and by making use of the new language a mandatory survival skill.
Immersion is also a good way to learn a new technology (programming language, operating system, component technology, class library, network protocol, hardware gizmo, ...). You can't become competent by reading a few books, you have to use the technology to become an expert in all its details.
Some techniques for achieving the benefits of immersion:
- Use the technology. Don't just read the books and think about it. Develop some non-trivial applications that use the technology. When you hit roadblocks, solve the problems--don't just give up or fall back on other technologies. If possible, get yourself a paid job working with the technology, so you can do it full-time.
- Focus for long periods of time. Don't dabble. Don't just spend an hour or two every once in a while after work "playing around". Devote several hours at a time, for an extended period of time (weeks, months). Have specific goals for what you want to learn and what you want to accomplish.
I've heard someone say that spending more than an hour a day learning a particular new skill is a waste of time -- that's as much new information about a particular topic that you can assimilate into long-term memory in a day. (You can spend other hour-long periods learning other stuff, as long as that other stuff isn't "too similar"). Anyone have references one way or the other ? (I have a reference on learning to touch-type, but is it still true for
LearningForeignLanguages or
LearningProgrammingLanguages ?)
- Work with other people. You won't figure it all out by yourself. You'll always learn more by sharing your experiences with other people.
- Read the specs. Don't just rely upon high-level overviews and the "... for Dummies" books. Study the official specifications for the technology, cover-to-cover. Read them over and over again, until you develop encyclopedic knowledge of the specifications.
- Read books from multiple sources. Don't rely upon one author or one publisher to provide all your knowledge (especially when that publisher is the technology vendor). Different people will emphasize different aspects of the technology, and give you a broader view.
- Use the specialized tools. Use whatever tools are designed for use with the technology. (For example, if you are learning about .NET, then use Microsoft Visual Studio .NET.) This is the best way to determine the technology's capabilities, and to become "fluent" in its use. But, also use the technology apart from the specialized tools, so that you can get a feel for how you can integrate it with other technologies.
- Study certification guides. Even if you are not interested in taking an official certification test, studying as if you were can help ensure that you learn all the capabilities and important details of the technology, rather than just the few aspects that interest you.
- Maintain healthy skepticism. Don't fall for the marketing hype associated with the technology. Make note of any limitations or problems you discover. But, don't throw the whole thing away just because you've discovered that it isn't perfect or doesn't live up to the hype. Use your own judgment regarding its power, reliability, and general usefulness.
- Come up for air. Learning new things is always fun, but one can easily become obsessed with something new. Take breaks and try other things once in a while.
Yep, do all of the above and you can immerse yourself in a technology, and/or you can brainwash yourself with the rest of the herd. Given the current state of affairs the probability of brainwash far exceeds the potential benefits to such an approach. Beware.
See also ExtremeLearning, LearningProgrammingLanguages, LearningForeignLanguages.
CategoryEducation CategoryNaturalLanguage