<p>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.</p>

<p>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 posts<sup>1</sup> instead?) </p>

<p>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 <a href="https://www.xkcd.com/936/" rel="noreferrer">xkcd 936</a>:</p>

<p><img src="https://imgs.xkcd.com/comics/password_strength.png" alt="inline image"></p>

<p>See also <a href="https://security.stackexchange.com/questions/6095/xkcd-936-short-complex-password-or-long-dictionary-passphrase">Security SE's post about that comic</a>.</p>

<p>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.</p>

<p>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.</p>

<p>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.</p>

<p><sup>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 <a href="https://www.washingtonpost.com/news/the-switch/wp/2014/02/23/comcasts-deal-with-netflix-makes-network-neutrality-obsolete/?utm_term=.bf8f229112f4" rel="noreferrer">Netflix avoids backbone peering</a>. I thought that might be beyond the scope of your course, but I guess that's up to you.</sup></p>

CC BY-SA 3.0
2017-06-30T14:43:43.103Z
2017-06-30T14:43:43.103Z
Piyush Parikh
<p>My recommendation is draw from Brian Kernighan's course at Princeton that is designed for a similar audience to what you have.</p>

<p>Here is the course material from <a href="http://www.cs.princeton.edu/courses/archive/fall14/cos109/" rel="nofollow noreferrer">Fall 2014</a>.</p>

<p>A few key lines from the course summary:</p>

<blockquote>
  <p>This course is meant for humanities and social sciences students who
  want to understand how computers and communications systems work and
  how they affect the world we live in. No prior experience with
  computers is assumed, and there are no prerequisites. ...</p>
  
  <p>The labs are complementary to the lectures, though intended to
  reinforce the basic ideas. They will cover a spectrum of practical
  applications; two of the labs are a gentle introduction to programming
  in Javascript.</p>
  
  <p>The course will have fundamentally the same structure as in previous
  years, but lectures, case studies and examples change every year
  according to what's happening.</p>
</blockquote>

<p>When teaching it, he used the book <em>D is for Digital</em>, which I assign to my AP CS Principles students. That AP class is similar in spirit to a CS0. He just recently released a new edition of the book called <em>Understanding the Digital World</em>. Here is its ToC:</p>

<pre><code>Part I: Hardware 
    What's in a Computer? 
    Bits, Bytes, and Representation of Information 
    Inside the CPU 
    Wrapup on Hardware 
Part II: Software 
    Algorithms 
    Programming and Programming Languages 
    Software Systems 
    Learning to Program 
    Wrapup on Software 
Part III: Communications 
    Networking 
    The Internet 
    The World Wide Web 
    Data and Information 
    Privacy and Security 
</code></pre>

<p>Kernighan is great at drawing from real-world examples, examples that would speak to the lives of students. His writing is accessible, and he covers a lot of ground successfully. </p>

CC BY-SA 3.0
2017-06-13T15:27:02.690Z
2017-06-13T15:27:02.690Z
Peter
<p>I'd really recommend adding some materials on security and cryptography. You don't need to get into the nitty gritty details of how it's implemented. I think that everyone should learn a bit (pun intended) about what encryption is and how and why security works so they can be informed.</p>

<p>I think what's particularly practical would be a lesson on how to use the internet safely. Topics like http vs https, not using the same password for everything, etc.</p>

CC BY-SA 3.0
2017-06-30T18:53:24.847Z
2017-06-30T18:53:24.847Z
Zach Galant
<p>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.</p>

<p>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' <em>The Pattern on the Stone</em>, but I'll be adding significant detailed material that Hillis doesn't cover. I am also going to use  Don Norman's <em>The Design of Everyday Things</em>, which I use in my CS0 major course, to introduce designing/planning/functional decomposition.</p>

<p>Here are things I've covered on computing/computational thinking and might bring back:</p>

<ul>
<li>Basic computer architecture</li>
<li>Boolean logic</li>
<li>Finite state machines</li>
</ul>

<p>Here's what I have covered on design and plan to bring back:</p>

<ul>
<li>Norman's concept of "design thinking"</li>
<li>Theory of mind</li>
<li>OODA loop</li>
<li>User testing</li>
<li>Ethics</li>
</ul>

<p>Some things I might add:</p>

<ul>
<li>Number systems and base conversion</li>
<li>AI/ML concepts</li>
</ul>

<p>Some things that have gone very, very poorly, but I would like to include:</p>

<ul>
<li>Basic prob/stat</li>
<li>Programming basics &amp; AppInventor</li>
<li>Process-oriented design</li>
</ul>

<p>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.</p>

<p>Any thoughts about what to cover, what not to cover, and how to cover things effectively, are welcome!</p>

CC BY-SA 3.0
2017-06-07T22:36:16.090Z
Welcome to CSEducators! I'd like to make a request:could you add a bit of detail about CS0? It's not a generally understood term or universal curriculum. You give a bit of a hint when you mention that the students have decided to be miserable, but some more context would be helpful.
Ben I.
CC BY-SA 3.0
2017-06-07T22:36:52.677Z
Also, what are "SLOs"?
Ben I.
CC BY-SA 3.0
2017-06-07T22:57:25.097Z
@BenI. My guess is that SLO = Student Learning Outcomes.
Peter
CC BY-SA 3.0
2017-06-08T10:09:45.283Z
Could you please add more details as to what exactly are you asking? what is the problem you are facing, out of the many things listed in your question?
ItamarG3
CC BY-SA 3.0
2017-06-12T00:40:01.593Z
Thank you for the edit! I think that the real reason we closed this question is because of this line: "Any thoughts about what to cover, what not to cover, how to cover things effectively, are welcome!" It's really broad. I'd vote to reopen if you changed it to something like "How do the topics seem to you given <constraints of class>? Anything you'd add/remove/change?" Also, making the title more general (e.g. instead of "nonmajor CS0" "gen ed CS course") and also more specific (e.g. being more specific with "good/bad topics").
thesecretmaster
CC BY-SA 3.0
2017-06-12T01:00:36.787Z
Also, just as a clarification to address your edit summary, none of us are moderators. We're just high-ish rep users. This site only has a SE employee moderator until it goes into public beta.
thesecretmaster
CC BY-SA 3.0
2017-06-12T01:02:11.517Z
It feels like we're getting much closer to a viable question here.  What is "CS0"?  Or "CS1"? I am based in the states, and I have never heard of these things. I can make guesses about what they might be, but they would just be guesses.
Ben I.
CC BY-SA 3.0
2017-06-12T01:17:35.050Z
If you're interested in discussing how we could narrow the scope of your question with us, feel free to say something in [the chat room](http://chat.stackexchange.com/rooms/59174). We'd be happy to talk about how to improve the question.
thesecretmaster
CC BY-SA 3.0
2017-06-20T23:30:57.737Z
In the SIGCSE community, CS0 is understood to be a non-major course, while CS1 is the first course for majors. This should be explicit in questions.
Ellen Spertus
<curriculum-design><cs0>
What are good/bad topics for a non-major CS0 course?
# What are good/bad topics for a non-major CS0 course?

(Asked by: username_0 on 2017-06-07)

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 & 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!

**Tags:** curriculum-design, cs0

> **Comments:**
> **username_1**: Welcome to CSEducators! I'd like to make a request:could you add a bit of detail about CS0? It's not a generally understood term or universal curriculum. You give a bit of a hint when you mention that the students have decided to be miserable, but some more context would be helpful.  
> **username_1**: Also, what are "SLOs"?  
> **username_2**: @BenI. My guess is that SLO = Student Learning Outcomes.  
> **username_3**: Could you please add more details as to what exactly are you asking? what is the problem you are facing, out of the many things listed in your question?  
> **username_4**: Thank you for the edit! I think that the real reason we closed this question is because of this line: "Any thoughts about what to cover, what not to cover, how to cover things effectively, are welcome!" It's really broad. I'd vote to reopen if you changed it to something like "How do the topics seem to you given <constraints of class>? Anything you'd add/remove/change?" Also, making the title more general (e.g. instead of "nonmajor CS0" "gen ed CS course") and also more specific (e.g. being more specific with "good/bad topics").  
> **username_4**: Also, just as a clarification to address your edit summary, none of us are moderators. We're just high-ish rep users. This site only has a SE employee moderator until it goes into public beta.  
> **username_1**: It feels like we're getting much closer to a viable question here.  What is "CS0"?  Or "CS1"? I am based in the states, and I have never heard of these things. I can make guesses about what they might be, but they would just be guesses.  
> **username_4**: If you're interested in discussing how we could narrow the scope of your question with us, feel free to say something in [the chat room](http://chat.stackexchange.com/rooms/59174). We'd be happy to talk about how to improve the question.  
> **username_5**: In the SIGCSE community, CS0 is understood to be a non-major course, while CS1 is the first course for majors. This should be explicit in questions.  

---

## 3 answers

### Answer by username_6 on 2017-06-30. Score: 6

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](https://www.xkcd.com/936/):

![inline image](https://imgs.xkcd.com/comics/password_strength.png)

See also [Security SE's post about that comic](https://security.stackexchange.com/questions/6095/xkcd-936-short-complex-password-or-long-dictionary-passphrase).

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](https://www.washingtonpost.com/news/the-switch/wp/2014/02/23/comcasts-deal-with-netflix-makes-network-neutrality-obsolete/?utm_term=.bf8f229112f4). I thought that might be beyond the scope of your course, but I guess that's up to you.


---

### Answer by username_2 on 2017-06-13. Score: 4

My recommendation is draw from Brian Kernighan's course at Princeton that is designed for a similar audience to what you have.
Here is the course material from Fall 2014.
A few key lines from the course summary:

This course is meant for humanities and social sciences students who
  want to understand how computers and communications systems work and
  how they affect the world we live in. No prior experience with
  computers is assumed, and there are no prerequisites. ...
The labs are complementary to the lectures, though intended to
  reinforce the basic ideas. They will cover a spectrum of practical
  applications; two of the labs are a gentle introduction to programming
  in Javascript.
The course will have fundamentally the same structure as in previous
  years, but lectures, case studies and examples change every year
  according to what's happening.

When teaching it, he used the book D is for Digital, which I assign to my AP CS Principles students. That AP class is similar in spirit to a CS0. He just recently released a new edition of the book called Understanding the Digital World. Here is its ToC:
Part I: Hardware 
    What's in a Computer? 
    Bits, Bytes, and Representation of Information 
    Inside the CPU 
    Wrapup on Hardware 
Part II: Software 
    Algorithms 
    Programming and Programming Languages 
    Software Systems 
    Learning to Program 
    Wrapup on Software 
Part III: Communications 
    Networking 
    The Internet 
    The World Wide Web 
    Data and Information 
    Privacy and Security 

Kernighan is great at drawing from real-world examples, examples that would speak to the lives of students. His writing is accessible, and he covers a lot of ground successfully.


---

### Answer by username_7 on 2017-06-30. Score: 3

I'd really recommend adding some materials on security and cryptography. You don't need to get into the nitty gritty details of how it's implemented. I think that everyone should learn a bit (pun intended) about what encryption is and how and why security works so they can be informed.

I think what's particularly practical would be a lesson on how to use the internet safely. Topics like http vs https, not using the same password for everything, etc.


---

