What are good/bad topics for a non-major CS0 course? 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
Ethics


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 &amp; 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 &amp; 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!
Since you've described this a standalone course, I'd treat it as a "computer literacy" sort of thing. I wrote another answer yesterday that got me thinking about what topics everyone should know about computer science, which I'm adapting here.

I like that you're starting with basic computer architecture. People should understand that there are logical rules and processes between them pressing on the keyboard or clicking the mouse and pixels lighting up on the screen. A logical step from there might be basic network architecture, for the same reason; just as the inside of a computer doesn't work by magic, neither do e-mails move from one computer to another that way. (Do people still write e-mails? Maybe Facebook or Twitter posts1 instead?) 

I also agree with your choice of DOET. It was a part of my own CS education in the distant past, though I didn't realize it until I read the book years later on my own and found a particular section to be very familiar. From there, you might also discuss basic security topics, such as passwords; why they're important, how they work, and how they can fail. Obligatory xkcd 936:



See also Security SE's post about that comic.

A quick mention of the fact that there are problems computers can't solve, no matter how fast we make processors. Not necessarily the whole, heavy mathematical proof, just the concept (again) that computers aren't magic boxes. Maybe a mention of the fact that even though computers are fast, efficiency still matters for computer algorithms.

At least some cursory coverage of programming, algorithms, and data structures should be included, as they are fundamentals of the practical side of things. I've never used AppInventor, but I looked it up just now and it seems like it would do that job. I'm curious why you say it's gone poorly in the past.

AI and ML are cool topics, but I don't see a ton of promise in adding them to the course, given that your students are, by your own description, intending to be miserable, largely uninterested in CS and unlikely to be directly applying what they learn. There is a bit of human element here, which, to be perfectly frank, I probably didn't spend enough time thinking about. Your course plan already seems full to bursting, but if you can make the time, maybe start out day one by asking the students what they hope to get out of the course? It'll be a long and draining semester for everyone, including you, if the students' initial expectation of misery doesn't change.

1: Actually, the first "relatable, common type of web traffic" example I thought of was Netflix movies, but they're technically a terrible example, because Netflix avoids backbone peering. I thought that might be beyond the scope of your course, but I guess that's up to you.