Introduction

How should we teach EECS1012, EECS1022, EECS20230, EECS20211. So that:

  • Students obtain skills in computational thinking, i.e. solving problems using basic algorithms and data structures with the ability to implement them correctly in programming languages).1
  • So that courses later in the sequence can rely on skills obtained in earlier ones, without too much overlap. Nevertheless, topics should be Introduced, Reinforced and Assessed to some reasonable depth.

Miscellaneous


  1. "Computational thinking (CT) is the thought processes involved in formulating problems and their solutions so that the solutions are represented in a form that can be effectively carried out by an information-processing agent" (Cuny, Snyder, and Wing, 2010). The problem with this definition is that it omits too much the role of a programming language for implementing the computation (the Wing definition of CT focusses on what we might call the formal cause of the skill, but the actual language chosen for implementation is the material cause; beginners need both). There is a [study: Learning to code is really learning to code something] in which researchers took expert software designers in various fields, and had them design systems in other fields. They also asked novice designers to do some of the same tasks. For example, take a software designer who has been building banking software, and another who has been designing real-time control systems. Now, let’s ask both designers to design an elevator control system. What they found was that the expert designers in the new domain struggled in some ways the same as novices. Experts in an unfamiliar domain looked much like novices. Now, experts in an unfamiliar domain were better than the novices at noticing constraints on the design, so something is transferred. This might also be related to the problem of changing languages in the first year sequence.