https://medium.com/@smk11500/programming-for-beginners-a-step-by-step-guide-to-learning-the-fundamentals-of-computer-science-24422dcb85a1