ACM CC2013
Excerpted from chapter 5 Introductory Courses of
ACM CS Curricula 2013.
Emphases added to highlight lurking controversies!
In considering the changing landscape of introductory courses, we
look at the evolution of introductory courses from CC2001 to CS2013.
CC2001 classified introductory course sequences into six general
models:
- Imperative-first
- Objects-first
- Functional-first
- Breadth-first
- Algorithms-first
- Hardware-first
While introductory courses with these characteristic features
certainly still exist today, we believe that advances in the field
have led to an even more diverse set of approaches in introductory
courses than the models set out in CC2001. Moreover, the approaches
employed in introductory courses are in a greater state of flux.
An important challenge for introductory courses... : Choosing what
to cover in introductory courses results in a set of tradeoffs that
must be considered when trying to decide what should be covered early
in a curriculum.
A defining factor for many introductory courses is...
The choice of programming paradigm
The choice of programming paradigm which then drives the choice of programming
language. Indeed, half of the six introductory course models listed in
CC2001 were described by programming paradigm (Imperative-first,
Objects-first, Functional-first). Such paradigm-based introductory
courses still exist and their relative merits continue to be debated.
We note that rather than a particular paradigm or language coming to
be favored over time, the past decade has only broadened the list of
programming languages now successfully used in introductory courses.
My comments: So language/paradigm choice at CS101 level remain as contentious as ever. It's just that C++ vs Lisp is now Haskell vs Python
Platform
While many introductory programming courses make use of traditional
computing platforms (e.g., desktop/laptop computers) and are, as a
result, somewhat “hardware agnostic,”
(Yet) the past few years have seen a growing diversity in the set of
programmable devices such as (Summarizing)
- web development
- mobile device (e.g., smartphone, tablet) programming
- specialty platforms, such as robots or game consoles
- physically-small, feature-restricted e.g. raspberry-pi
In any of these cases, the use of a particular platform brings with it
attendant choices for programming paradigms, component libraries,
APIs, and security. Working within the software/hardware constraints
of a given platform is a useful software-engineering skill, but also
comes at the cost that the topics covered in the course may likewise
be limited by the choice of platform.
The IDE-Language divide
Its 20 years since Oliver Steele noted the IDE-Language divide
That the issue remains current can be seen right here!!
Closely related to the obvious ease + non-obvious disadvantages of using Blub Programming Languages in CS-education.
Note: When Paul Graham wrote that 20 years ago, the archetypal blub language was Java. Today I'd say it's python.
CS: Algorithms? Or Data?
ACM curriculum 89 boldly stated
The discipline of computing is the systematic study of algorithmic processes
Consider how far we have come from that to today's world of machine learning: in short:
CS: Algorithms?? Or Data???
To be fair in the 90s Peter Naur tried to rename computer science to datalogy. Evidently he was not very successful then...
Here is a more recent one: A notable CMU prof tentatively suggests that:
Everyone knows that algorithms as we learned them at school are irrelevant to practice
Note the transition: 1990: CS = algorithms. 2001: algorithmic is one out of six contenders. 2014: Are algorithms relevant to CS?
Does IT matter??
At the broadest level: In the 21 century does IT really matter?