Computational Thinking teaches the use of abstraction and decomposition when solving complex problems; it presents a framework for understanding algorithms; and it describes essential concepts in dealing with data and code and in expressing the limits of modern computing machinery .