After graduating college I started working as a PHP developer at Coolblue. Half a year later I was working full-time on the iOS app. About 7 months later I started working on the Android app which is written entirely in Kotlin and uses RxJava/RxKotlin. Lots of new technologies and idea’s to learn. I like to believe I know a thing or two about picking up new programming languages.
This will be based on my experience learning two languages from scratch to being very proficient in about a years time. Keep in mind that although this works for me, this might not work for you.
While you are working on implementing a feature at work you are not really focused on actually learning the language. You spend your time on working on the feature, not actively thinking about why something works in the way that it does. What really worked for me is having a side project that you can work on at home or during your off-time. During this time you can think about how things work and work on learning about the language in-depth.
I found it really helpful to make a really ‘simple’ app using an API. While learning iOS and Android I wrote the same app. This helped a lot since while writing it the first time I still had to understand the API and the idea’s, that was no longer needed once I did it for a second time. Focusing on learning the language and the new concepts and not on the problem itself, in this case, really helped a lot.
This one comes back in every blog post about learning a new programming language, it’s actually very important in learning anything new.
During the time that I was learning Swift I was probably 80% of my time pairing with someone that was already programming in Swift full-time. A lot of time was spent on talking about the code that we wrote together and why. We also challenged each other on making the code as concise as possibly. This really helped to learn Swift in depth.
While you may not have someone that you write code with on a daily basis, someone that you can send your code too that has worked with the language a lot more than you have will already increase your speed of learning.
Learning from others that have already went through the same process themselves will boost your learning even more. One excellent way of doing this is to read open source libraries coded in the language that you want to learn. GitHub allows you to easily find all the open source repositories that use a specific language as their main language. Example: Open source repositories using Swift as their main language
I would suggest to start with a small repository and work your way up. Once you’re comfortable with the code I would suggest to look for open issues that are marked as beginner-friendly. Contributing code to open-source repositories will allow lots of people to look through your code and point out things that you could’ve done better or in a different way.
One thing that helped me a lot is to join an Slack channel. For Android, I joined Android United. This channel was full of people, like me, learning Android and figuring out why certain things work the way they do. Eventually you’ll go from asking a lot of questions to actually answering a couple of questions. You’ve probably heard the famous quote:
If you can’t explain it simply, you do not understand it well enough.
Since it was my job to write features in the language, I had no other option than to learn the language. There really isn’t any better motivation, if you ask me. If you are learning another programming language in your spare time it can be easy to not regularly practice. If you have a friend or a colleague with which you can share this common goal of learning something new, you will keep each other motivated.
Another option would be to find people in Slack communities or on Twitter that are learning the same thing as you. Every week you can give an update on what you achieved and compare this to them. Eventually this will start to feel like a game where you want to get ahead.