Foundations of Computational Thinking