https://medium.com/@mathavankrishnan27/how-can-you-sharpen-your-problem-solving-skills-in-programming-4fb39ac3de4f