From time to time, a new work related problem emerges needing special attention. Sometimes these problems are at the core of how the past and present programming languages were made to solve.

As good software developers, we need to solve these problems with the best technologies that were made to solve these problems. So if I want to be called a good software developer, I need to be flexible enough to learn these technologies, among other things.

Over the years I had a lot of passages though PHP, Ruby, Python ... and ended up falling in love with JavaScript, both front-end and back-end. But, I know... JavaScript can't solve everything, so it's always good to have a variety of options on your technical career.

After some thinking, I came up with a check-list of how I should learn a new programming language (or software in general). Here's what I came up with:

  1. Learn the basics
    1.   What is it trying to solve?
    2.   What are the main features?
    3.   Background of how it was made (is it compiled? based on what language?)
    4.   Code syntax and code patterns
  2. Understand the community and resources around it
    1.   Sign up for newsletters
    2.   Search the most used libs and frameworks
    3.   Subscribe to Youtube channels about the subject
    4.   Case studies from other companies
  3. Practice
    1.   Setup my development environment (Code editor, terminal etc.)
    2.   Project Euler, Codility and HackerRank
    3.   Build real life examples
          -   Create an open source package
          -   Create an application (Blog engines are great!)
          -   Try to contribute to other open source projects
  4. Apply
    1.   At work (even if you have a specific role, ask to contribute to other team's projects)
    2.   With personal projects

Pretty neat, huh? I think so too.

As time goes by, I'm gonna be improving this check-list. If you reading this at the time I published this article, I will be applying this by next week, starting with Python. You can expect a few articles while I do it.

Also, leave a comment bellow and let me know how is your process of learning a new programming language.