Over the past several years, I’ve been blessed by gracious companies to take on projects in languages that were not my expertise to say the least. Amazingly, some of these projects were the most rewarding projects in my career. I can honestly say that in the past 5 years, I’ve tackled Objective-C, Java, and Swift. Along with the core languages comes an array of frameworks that slip into your knowledge base such as AFNetworking, Spring, Mockito, Alamofire, Camel, etc., etc. The most interesting thing to me about the above statements is that while I believe they are true statements, I could not pinpoint a single time, task, or mindset that helped me become fluent in any of those languages.
For Objective-C, I attended an iOS 5 Bootcamp hosted by Big Nerd Ranch. I felt outclassed the entire week and spent basically every minute I was awake furiously working through exercises. Sometime between that camp and the next year with that company, I became fairly well-versed in the world of iOS. I knew how things worked. I could troubleshoot an application. Outline a design. And interview for a mobile solutions consultant position fairly well.
The latter statement is of some importance, as I took that job. My first project in that position would end up submerging me in a world of SOAP web-services built in Java using a myriad of, sometimes outdated, frameworks. Once again, I felt out of my league. Everyone around me seemed to have this built in understanding of Java, dependency injection, unit testing, continuous integration, Eclipse, SOAP, and Tomcat. The people around me were all about my age, how did I fall so far behind? Within a few months, I would be recognized as a great trainer for new team members coming into Java projects for the first time. I was helping people understand how web-services worked, how Tomcat responded to request and loaded Java applications, and how Spring worked it’s magic in pulling all of your Java classes together.
How did this happen? What steps did I take? What training course did I follow? The answer is much more simple than I would have originally thought. Basically, I just submerged myself in the language (sometimes unwillingly). By having a job that required me to work on the project, I was somewhat forced to learn the language. By sitting in a room full of knowledgable developers and spending 8 hours a day writing Java code, I became a fairly decent Java developer.
I would follow this project up with two Swift-based iOS applications and come out feeling well versed and fully capable in the Swift development space. All of those past experiences have taught me something, if you want to learn a new language, you need to be immersed in the language. If you want to learn Spanish, move to a Spanish speaking community. If you want to learn Afrikaans, move to South Africa. If you want to learn German, move to Germany. You’ll be a natural in no time, because you’ll be completely submerged in the language. The sheer amount of time spent in the language will push you to adapt at amazing speeds. The same is true for programming languages.
Throughout the past few years, in between projects, and even during projects, I have attempted to use my spare time to continue learning. I’ve taken courses in Node.js, MongoDB, and Scala. I can honestly say, none of those things stuck.
So what am I getting at here?
What is the point of all of this?
The point is this: I’ve decided I want to keep learning. I want to look forward everyday and push myself to always be something better tomorrow. When you finish a project, you should be able to look back at that project and see 10 ways to do it better next time. I am not one of the brightest and best developers out there. I have just been lucky enough to find myself in opportunities that pushed me to learn, many of which including learning alongside my peers who were also driven to be better tomorrow than they are today. This has been a tremendous blessing.
For now, I would like to learn Node.js at a level that I would feel comfortable bringing an idea to conception in the Node language for professional, production use. To do this, I’ve decided to immerse myself in the language. And I’m going to use this mostly useless website to help hold me accountable.
I’m going to try and do a NodeSchool.io workshopper at least once a week during my downtime. At least for a few months. As I do this, I’ll try to post the solutions here on this site for anyone who might need help. I hope by immersing myself in several different tutorials, topics, and categories related to Node. That the switch in my brain will flip and I’ll come out with the ability to think about Node projects with the same level of comfort I approach mobile applications and Java projects.
Have a question or comment? Reach out to me via GitHub or twitter @kwandrews7.
And if you have some downtime, why not go learn a new language? All the cool kids are doing it. 😉