Algorithmic thinking and problem solving strategies are essential principles of computer science. Programming education should reflect this and emphasize different aspects of these principles rather than syntactical details of a concrete programming language. In this paper, we identify three major aspects of algorithmic thinking as objectives of our curricula: the notion of a formal language to express algorithms, abstraction and automation to transfer proven strategies to new instances, and the limits of practical computability. The primary contribution of this paper are three examples that illustrate how general aspects of algorithmic thinking can be incorporated into programming classes. The examples are taken from our teaching materials for K-12 and university non-majors and have been extensively tested in the field.
[1]
Juraj Hromkovič.
Einführung in die Programmierung mit LOGO
,
2010
.
[2]
Dennis Komm,et al.
Combining the Power of Python with the Simplicity of Logo for a Sustainable Computer Science Education
,
2016,
ISSEP.
[3]
Lucia Keller,et al.
Einführung in die Kryptologie
,
2010
.
[4]
A. Turing.
On Computable Numbers, with an Application to the Entscheidungsproblem.
,
1937
.
[5]
Timothy C. Bell,et al.
Computer Science Unplugged and Related Projects in Math and Computer Science Popularization
,
2012,
The Multivariate Algorithmic Revolution and Beyond.