Introduction to Computer Science: Opinions

The below were useful comments and discussions I had with peers regarding what topics are appropriate for introductory CS courses. The comments have been paraphrased for conciseness. [original document]

David Menestrina believes that, in an intro to programming course, history is only useful insofar as the jokes and trivia help make the subject matter more interesting.

David Menestrina also believes that an intro to CS course should not be designed as a survey of all CS. While such a strategy can work well in physics, chemistry, etc., CS is more appropriately compared to mathematics. That is, the concepts is fundamentally technical, build upon one another, and appreciation of their importance often requires such prior knowledge.

David Menestrina thinks that using an OO-language in a course that does not cover OO-concepts is both distracting and confusing for students.

David Menestrina does not think that obscure languages (e.g. SML) ought to be taught in intro to CS courses. Not only are the languages irrelevant in industry, but the bells and whistles of such languages are often confusing. However, even a language that is very relevant in industry, such as C++, can have a slew of bells and whistles that are primarily distracting in an intro course.

Jeffrey Vaughan thinks careful analysis ought to be highly prioritized: students entering industry need to know about testing and budding theorists need to know about proofs.

Jeffrey Vaughan and David Menestrina both agree that non-majors seeking to fulfill a degree/breadth requirement ought to learn primarily about programming. Perhaps this argues for separate tracks for majors and non-majors.

Emmanuel Schanzer strongly favors teaching object orientation and hierarchical structure. He recommends using the book Design Patterns, and is an advocate of the TeachScheme project.

Emmanuel Schanzer also believes recursion ought to be an integral component of the first few required programming courses.

Saikat Guha suggests attempting to design a language-agnostic intro to CS course. The students could pick their language of choice (e.g. research-oriented students could pick SML, Haskell whereas industry-oriented students could pick Java, C++, etc) early in the semester, but the concepts introduced in the course (e.g. algorithms, data-structures, etc) would be taught independent of any specific programming language. The motivating reason for this is that present courses tend to spend far too much time teaching the syntax of the language, which invariably takes away time from conveying the underlying concepts.