I am a big fan of writing, and reading too for that matter. I have definitely spent more hours of my life reading than I have any other activity, including sleep. I also write a lot; I’ve written every day for 34 days in a row now, and kept a pretty consistent journal before I was blogging.
I’ve never considered myself a language expert. I took four years of Spanish in High school, and yet I can barely carry a conversation today in Spanish. I learned Spanish in a high school classroom in Northwest Indiana, which is incredibly removed from any Spanish-speaking communities. I was pretty horrible at Spanish and figured that I must just be bad at language acquisition. However, after some thought, I’ve come to rethink my beliefs about my language capabilities. I am starting to think that it was not my lack of innate language learning, it was the system in which I learned a foreign language. If I had been immersed in the language and forced to carefully perceive the way native speakers phrase parts of their speech, I could have picked up on much more of the nuances of the language.
Also, if I had been forced to speak the language out of necessity, I would have learned the language much more quickly. There are few other catalysts for learning that are as effective as basic necessities.
I’ve found that these two aspects of language acquisition, immersion and necessity, are the two things that have driven me to learn programming languages very well.
Computer Science degree
Many people argue that a degree is useless to a web developer. The technology in the tech community changes much too rapidly for any classroom syllabus to keep up with the latest trends or teach the most pertinent material.
I, however, think that attending a computer science program gives you at least one advantage over teaching yourself: you have to learn the language in order to pass the class. This necessity forces you to go outside of your comfort zone and code in a language that you are not accustomed to, like C++. I’ve found my time coding in C++ to be incredibly enriching, much more than I could ever get from just trying to teach myself in my spare time.
Also, just like learning grammar and reading good books can improve your writing, studying design patterns and algorithms can give you the tools to improve your coding no matter what language you are in. The fundamentals are the same across many languages, and in a world where things change so much so quickly, the fundamentals are often the only thing that you can stand on for long-term plans.
If you are not in a degree program, or have a language that you want to learn that is not offered by your school, there are ways to imitate that necessity. One tool that I’ve used quite often is Code Wars, which forces you to learn by doing, and only gives you the answer once you’ve figured out how to complete the problem. The best part about code wars is seeing the solutions that have been upvoted by the community as the best solutions. By examining these solutions, you can begin to absorb some of the industry best practices, just like reading classic novels or New York Times bestsellers. You are forced to write outside of your comfort zone, and at the same time taught the fundamentals through challenges. While there is a steep learning curve to doing Code Wars, I would recommend anyone who wants to start on a new programming language to start there and do it every day for as many days in a row as possible.
These are just my current ideas on how to become fluent. What are your ideas? How have you learned languages and fundamentals over the years?