I'm teaching CS0 again this fall. This is an introductory course, entirely separate from CS1. It is for non-majors. It doesn't lead to additional coursework or prepare students for CS1 (it's not a prerequisite for anything), so it has no specific goals beyond educating students in concepts of computation and computing. I am specifically asking for recommendations on topics to cover to better help students understand computation and computing, and ideally topics that students who perceive themselves "forced" to take the course will find least objectionable. Below, I will describe what I intend to include, what I am considering adding, and what has been unsuccessful in the past. I am looking for comments/thoughts on any of these things and/or additions.
Given the general education student learning outcomes (SLOs) I have to satisfy/evaluate, I have significant constraints, but I generally want to rethink the course. My goal is to help students appreciate computation and computational thinking and to understand basics of computing systems. I also want to structure the course around labs (although it's not a lab course). I'm going to use Danny Hillis' The Pattern on the Stone, but I'll be adding significant detailed material that Hillis doesn't cover. I am also going to use Don Norman's The Design of Everyday Things, which I use in my CS0 major course, to introduce designing/planning/functional decomposition.
Here are things I've covered on computing/computational thinking and might bring back:
- Basic computer architecture
- Boolean logic
- Finite state machines
Here's what I have covered on design and plan to bring back:
- Norman's concept of "design thinking"
- Theory of mind
- OODA loop
- User testing
Some things I might add:
- Number systems and base conversion
- AI/ML concepts
Some things that have gone very, very poorly, but I would like to include:
- Basic prob/stat
- Programming basics & AppInventor
- Process-oriented design
The typical student for this course has already decided to be miserable; we're typically able to turn a few heads, but many of the students have gone years without math, so a big chunk of the course is necessarily applied arithmetic and algebra. The ones who are willing to engage with trial & error tend to be effective in AppInventor, but they're precious few.
Any thoughts about what to cover, what not to cover, and how to cover things effectively, are welcome!