https://blog.stackademic.com/the-best-way-to-learn-a-new-programming-language-from-scratch-how-i-approach-and-learn-ad100c100b26