2022 November 29,
Carleton College, Fall 2022, Joshua R. Davis, , CMC 324, x4095
This course ponders fundamental questions of computer science: What can computers do, and how much time and space do they require to do it? To address these questions, the course proceeds in three stages:
Along the way, we encounter some fascinating connections to philosophy, mathematics, and linguistics. Your work is a mixture of writing proofs, executing algorithms by hand, and Python programming. For example, you learn how to determine whether a programming problem is solvable by regular expressions, and solve it with them if it is.
The official prerequisites for this course are Data Structures (CS 201) and a proof course (CS 202 or Math 236). If you don't know Python, then study it on your own (using the links below or other tutorials). Talk to me if you are concerned about your background.
The College's accreditation says that a 6-credit course is 150 hours of work. That's about 15 hours per week or 5 hours per class meeting. Those 5 hours break down into about 1 hour for class itself and 4 hours for homework, reading, studying, etc. If you find yourself spending less time and struggling, then talk to me. If you find yourself spending much more time, then talk to me.
Our class meets in Leighton 305 during period 2A (MonWed 9:50-11:00, Fri 9:40-10:40). You are expected to attend every class meeting, take notes, participate in discussion and group work, and ask and answer questions. You can make up for a deficiency in class participation by talking with me in office hours. Additionally, you are required to visit me in office hours some time during the first two weeks, even if just to say "hi". It helps us break the ice. :)
Photographs and recordings are not permitted without my prior approval, and phones are not permitted, except for the purpose of approved photographs and recordings. There are two main reasons for this policy. First, I want our class to be a safe space, where students do not feel that they're on stage. Second, photographing a chalkboard is not as educational as taking notes.
It is important that our course be welcoming to all students, regardless of their identities, backgrounds, and experiences. We all sometimes say and do things that make life worse for others, and we should all strive not to. Please let me know if the class feels hostile to you, because of something that I or someone else has done.
Although class meetings may seem like the core of the course, homework assignments are actually where you learn the material. As far as your grade is concerned, homework serves primarily as the first step in studying for exams.
On homework, you are encouraged to figure out the problems with other students. However, you should always write/type your solutions individually, in your own words. You may not copy someone else's work or allow them to copy yours. Presenting someone else's work as your own is a violation of Carleton's Academic Integrity standards.
Writing is not just for English and history majors. Communication skills are essential to every academic discipline, and they are highly prized by employers. In this course, your written work is evaluated both for correctness and for presentation. Compose your solutions as if the intended audience is your fellow students. By doing so, you show enough detail that the reader can ascertain whether you yourself understand the material.
Homework is usually due two class meetings after it was assigned. This schedule tries to keep you on track, so that work doesn't pile up. But we all have bad weeks, where we can't get everything done, right? If you need to submit an assignment late, then write "LATE" at the top of the front page and submit it as soon as you can. If the grader hasn't graded the assignment yet, then they can grade your paper with the others for full credit. If the grader has graded the assignment already, then you might not get credit. There are limitations to how much delay and complication a grader can handle.
When handing in an assignment, please staple your pages into a single packet, in the correct order. Is there a stapler in the classroom? Often not, so staple ahead of time. Is a paper clip okay? Please, no.
Depending on time constraints in any given week, perhaps not all of your homework is graded. In order to ensure full credit, do all of the assigned problems.
We have three exams. Exam A is given in class around Day 11 (Week 4). Exam B is a take-home exam around Day 20 (Week 7). It is cumulative but focused on recent material. Exam C is scheduled for the official final exam period: Monday November 21, 3:30-6:00. It is cumulative but focused on recent material. Self-scheduling is not permitted for Exam C.
For better or worse, we are required to measure your learning using grades. Your numerical grade is based on the responsibilities above: participation 5%, homework 15%, Exam A 25%, Exam B 25%, Exam C 30%.
Numerical grades are converted to letter grades only at the end of the term. Grades are not curved, so students are not in competition with each other. Grades are also not based on predetermined percentages (90%, 80%, 70%, etc.) or explicit specifications, because CS 254 problems are difficult to tune so precisely. (I could accidentally write a difficult exam and wreck everyone's percentages.) Rather, I assign grades by comparing the students to the course goals. For example:
Talk to me, if you are concerned about your grade.
I want all of my students to work hard and learn a lot. I try to give them all of the resources that they need. For starters, let's list some basic documents:
Here are our exams so far, with quartiles (75th, 50th, and 25th percentiles) listed.
Here the exams from my winter 2020 version of this course. They don't exactly line up with our exams — for example, our Exam A might include material that appeared on the old Exam B — but they might help you study anyway.
Here are the exams from fall 2018. Even though there are three exams, they still might not line up exactly with our three exams, just because I'm always tweaking the course.
Those documents are okay, but if you're trying to do college without working with others, then you're doing it wrong. Remember that I encourage you to solve problems with classmates (even if the work that you submit must be your own). Olin 310 is staffed with lab assistants during the afternoons and evenings. They can help with Python and maybe even a little CS 254 if you're lucky. The tutors in the Math Skills Center on the second floor of CMC might also be able to help you with logic or what little math we use.
I hold several office hours per week. See below for the schedule. No appointment is needed; just drop in! If you cannot attend office hours, then consult my weekly schedule and e-mail me, listing several times at which we could meet.
Our course prefect, Thomas (), also holds prefecting sessions. Again, just drop in!
Josh When? | Where? | For Whom? | Thomas When? | Where? | For Whom? |
---|---|---|---|---|---|
Mon 3:10-4:20 (6A) | Olin 308 | CS 254, CS 311 | Sun 8:00-9:00 PM | CMC 301 | CS 254 |
Tue 11:00-12:00 | Olin 308 | CS 254, CS 311 | Wed 8:00-9:00 PM | CMC 301 | CS 254 |
Wed 11:10-12:20 (3A) | Olin 308 | CS 254, CS 311 | |||
Thu 9:30-10:30 | Olin 308 | CS 254, CS 311 | |||
Fri 1:10-2:10 (4A) | CMC 324 | CS 254, CS 311 |
If a health condition or other personal matter affects your participation in class, homework, exams, etc., then please let me know as soon as possible. Depending on the situation, we might want to confer with Accessibility Resources, Assistive Technology, Student Health and Counseling, or Sexual Misconduct Prevention and Response. When you ask me to help, I do my best to help. :)
This schedule is tentative. We fill it in as we go along.
To help you decode the schedule, here is an example. Friday September 16 is Day 03 of the course. On that day, we discuss nondeterministic finite automata. Section 1.2 of our textbook covers that material; read it before or after class, to get another treament. You might also want to read my extra notes called "DFA vs. NFA Details". You have homework called "Day 03", which you hand in on Day 05.
Date | Day | Topic | Assignment | Due | Reading | Notes |
---|---|---|---|---|---|---|
M 09/12 | 01 | introduction | Day 01 | 03 | 0.1-0.4 | sum.py, collatz.py |
W 09/14 | 02 | deterministic finite automata | Day 02 | 04 | 1.1 | |
F 09/16 | 03 | nondeterministic finite automata | Day 03 | 05 | 1.2 | DFA vs. NFA Details |
M 09/19 | 04 | regular expressions | Day 04 | 06 | 1.3 | Python Regular Expressions |
W 09/21 | 05 | pumping lemma | Day 05 | 07 | 1.4 | |
F 09/23 | 06 | pumping lemma | Day 06 | 08 | Radiolab: Amnesia | |
M 09/26 | 07 | context-free grammars | Recursion A-F (not G) | 09 | 2.1 | Recursion |
W 09/28 | 08 | pushdown automata | Day 08 | 10 | 2.2 | |
F 09/30 | 09 | pumping lemma | Day 09 | 11 | 2.3 | |
M 10/03 | 10 | pumping lemma | Day 10 | 13 | ||
W 10/05 | 11 | Exam A | ||||
F 10/07 | 12 | Turing machines | Day 12 | 14 | 3.1 | Wikipedia: Alan Turing |
M 10/10 | 13 | variants of Turing machines | Day 13 | 15 | 3.2 | |
W 10/12 | 14 | nondeterministic Turing machines | Day 14 | 16 | 3.3 | |
F 10/14 | 15 | decidable examples | Interpreter | 17 | 4.1 | Interpreter |
M 10/17 | Midterm Break | |||||
W 10/19 | 16 | undecidable examples | Day 16 | 18 | 4.2 | |
F 10/21 | 17 | undecidable, unrecognizable examples | Day 17 | 19 | 5.1 | |
M 10/24 | 18 | unrecognizable examples, Rice's theorem | Day 18 | 20 | Complexity of {0m 1m : m ≥ 0} | |
W 10/26 | 19 | time complexity | Day 19 | 22 | 7.1 | |
F 10/28 | 20 | catching up | Exam B | 21 | ||
M 10/31 | 21 | time complexity | 7.4, 7.6, 7.7 | 23 | 7.2 | |
W 11/02 | 22 | deterministic polynomial time | Day 22 | 24 | 7.3 | |
F 11/04 | 23 | nondeterministic polynomial time | Day 23 | 25 | 7.3 | |
M 09/07 | 24 | mapping reducibility | Day 24 | 26 | 7.4 | |
W 11/09 | 25 | NP-completeness | Day 25 | 7.4 | ||
F 11/11 | 26 | NPSPACE = PSPACE | 8.8 | 28 | 8.1-8.2 | |
M 11/14 | 27 | glimpses, review | none | 8.3 | TQBF, Kolmogorov | |
W 11/16 | 28 | conclusion | none | Review | ||
M 11/21 | Exam C 3:30PM-6:00PM |