Learning a new programming language
Tags: learn, learning, agile
Published: 2021-11-05 08:03:40

---
title: Learning a new programming language
published: true
description: how to learn a new programming language
tags: learn, learning, agile
cover_image: https://miro.medium.com/max/300/1*dtkMwR4AvquKXVUYpQcijw.jpeg
canonical_url: https://minompi.medium.com/learning-a-new-programming-language-1adbc508c54d
---

In this period every day, a new programming language could be released and can become one of the most interesting in a few months.
So it’s difficult for a developer to learn every day a new different programming language because you need the time to explore it.
Many times other developers ask me: 
“How can I learn a new programming language?”

Well in my opinion there isn’t the perfect recipe to learn a new programming language because it depends principally on how the developer can learn new things.
Some people need to learn from books or others that prefer coding directly etc.

## SHU HA RI

Before going deep into the argument, I would like to share the concept of SHU-HA-RI, because I think that it’s important to know when you start to learn something:

Shu-ha-ri is a concept of Japanese martial arts and describes the stages from learning to mastery, therefore a path that involves the presence of a teacher accompanying a student.
This concept was taken into Toyota to indicate the skills development model.

![](https://cdn-images-1.medium.com/max/2000/1*dtkMwR4AvquKXVUYpQcijw.jpeg)

(image from:[ https://leadagilesolutions.com.au/a-mental-model-for-the-phases-of-mastery/](https://leadagilesolutions.com.au/a-mental-model-for-the-phases-of-mastery/))

Shu-Ha-Ri is a way of thinking about how you learn a technique and can be divided into three steps:

* Step one: **Shu**. The Sensei (the coach) protects the student by showing how to do it, without leaving room for errors and distortions. The practice must be performed as per the manual.
* Step Two: **Ha**. The student, independently, applies the practices respecting the standard. Here the student will be wrong, but he will understand even more.
* Step Three: **Ri**. The student applies the practice in complete autonomy, with strong creativity. He has understood the spirit and no longer feels “bound” by the rules. He might even revise the rules themselves.

This approach can be used in many different scopes: music, martial art, coding…

Usually, when I would like to learn a new programming language I try to follow the Shu-ha-ri approach trying to divide my learning time into **different steps**:

* Read the documentation
* Watch videos 
* Follow people on Twitter that shares context about that language
* Find a mentor
* Learning by Doing (kata)
* Contributing to open-source projects
* Teach What You Learn
* Be Curious

## Read the documentation

Sometimes it’s very annoying to read the documentation of something but don’t under evaluate this step because reading the documentation is the first approach to a new language, to understand how it works, how you can start, what you need in terms of software, tools, libraries.
Reading the “Get started” chapter, usually, helps you to enter into a new world and for me, it’s fantastic to see new things and how their work.

**You don’t have to read all the documentation**, my advice it’s to read the first parts, to understand how can you start to write something and step by step learn new things.
Sometimes the documentation is not updated or is superficial, feel free to open a pull request or contact the support to improve that part.
This is another good step to participate in something and learn new things.

## Watch videos

Nowadays there are a lot of videos about all things.
So it’s very common to find developers that share videos about the language that you would like to learn.
I usually search for many videos or playlists and watch the first minutes to understand if the level of the video is correct or not for me at that moment.
For example, six months ago I studied for a new language and I found an amazing video by an advocate of that language and I stopped that after 3 minutes because the level was too high for me at that moment.
I marked the video as “**Watch later**” and after two months I saw all the videos understanding all the things.
It depends on your level and skills to find the best videos for that moment for you but believe me, you have a lot of options on the web nowadays to find the best video for you!

## Follow people on Twitter that shares context about that language

Twitter is a social network where you can find a lot of developers that share powerful context about everything.
My advice is to search for some developers that frequently share interesting content, and follow them.
The next step is to interact with them to ask something to clarify your doubts.
I have found a lot of kind developers that help me a lot and vice versa.

## Find a mentor

Finding a mentor sometimes seems difficult and impossible, but I can guarantee that it could be very easy.
When I have to find a mentor, usually I am thinking of my colleagues or ex-colleagues first because I know already their skills.
If no one has the required skills I am searching on Twitter for example or LinkedIn or participating in community meetings.
When you will find your mentor it’s important to share with him your goals to set up your expectations.
With him, you can establish a study plan to archive your goals.
Once you have specified those things you need to schedule a meeting every one or two weeks with your mentor to check your progress.
Don’t forget to ask a lot of things and thoughts in your mind to understand well what you are doing.

## Learning by Doing

Learning by doing it’s one of my favorite steps because I love to touch directly the code and find problems, things not clear and interesting points of view about this new language.
It’s very important to practice a lot to become more confident with the new language.
I usually create **Kata projects** to make a lot of practice. 
Kata means “way of doing” and they are projects that you create yourself to learn something: new coding language, different approaches, architectures, etc.
You can create a new little project and experiment with what you would like to explore.
There are a lot of Kata projects and you can create your own, this is a list of possible kata:
[https://project-awesome.org/gamontal/awesome-katas](https://project-awesome.org/gamontal/awesome-katas)

For example. I did twenty times the Tic-tac-toe game because every time I tried new things and a new way of doing it.

![](https://cdn-images-1.medium.com/max/2000/1*wHIXPRtYgRXowiDj5CMZTg.jpeg)

## Contributing to open-source projects

Contributing to open-source projects could be another good solution to learn something about what you are studying, you can always ask questions creating issues or pull requests and you can try to create your first pull request starting from fixing some part of the documentation for example.
Open source projects can generate a lot of value and a new strategy to implement something.
You can write to contributors and maintainers to learn new things every day.
Don’t be scared to try something, open source can open to you a lot of doors.

## Teach What You Learn

After studying something it’s important to **share your knowledge** with other developers. Try to teach what you have learned through a little talk with a few people or you can find a local meetup to try your new skills.
When you try to explain something to others you can realize if you know the argument or not, you can realize what you can study and see things from another point of view by answering questions during your talk.
Every time that I did a talk, after that, there were a lot of questions and we discussed those, understanding new approaches.

## Be Curious

Every day you can learn something new, there are a lot of resources nowadays.
Now it’s up to you what you want to learn from today.
Be curious about new approaches, technologies, and all the things about your work.
Curiosity helps a developer with learning in two ways. First, it keeps you motivated during learning so you don’t get bored. Second, it highlights new learning opportunities that you would overlook.

**Curiosity is what makes great engineers stand out from regular ones.**