https://medium.com/@_betterversion/two-approaches-to-learning-programming-top-down-and-bottom-up-909afbbc7953