https://medium.com/@funti009/struggling-with-programming-lessons-i-learnt-from-how-to-think-like-a-programmer-2-63b856f73b12