https://medium.com/@whdpwls63/mastering-programming-a-guide-to-becoming-a-proficient-coder-26e29559c09