2024 December 2,
Carleton College, Fall 2024, Dr. Joshua R. Davis, , CMC 324, x4095
In my opinion, the theory of programming languages is the best part of computer science. For practically minded students, the subject is valuable because it makes them better programmers, by digging into how programming languages work, what the design tradeoffs are, and therefore why there are so many programming languages. For theoretically minded students, there are tons of interesting concepts, subtle algorithms, and even mind-bending puzzles.
As it is currently taught at Carleton, the course has four big components. First, we learn the Scheme programming language. Second, we learn the C programming language. Third, we write a Scheme interpreter in C. Fourth, throughout the course we have readings, discussions, and exercises that explain the theory using Scheme and C (and other languages) as examples. Learning Scheme and C is not the purpose of this course! Rather, Scheme and C are merely important examples, which illustrate the course content.
The prerequisite for CS 251 is a data structures course (either CS 200 or CS 201). The work is mainly programming. 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 Anderson 329 during period 5A (MonWed 1:50-3:00, Fri 2:20-3:20). You are expected to attend every class meeting, take notes on paper or a tablet, 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.
Laptops, phones, photos, and recordings are prohibited (except by special arrangement). Why? This course's material can't be typed easily on a keyboard. Using a laptop or phone measurably distracts the students around you. Photographing a chalkboard is not as educational as taking notes. I want our class to be a safe space, where students do not feel that they're on stage.
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. There are two kinds of homework: individual and partnered.
On individual homework, you are encouraged to figure out the assignments with other students (and the prefect, and me). 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. You are not permitted to obtain solutions from web sites (other than this one), artificial intelligence products, etc. Presenting someone else's work as your own is a violation of Carleton's Academic Integrity standards.
On partnered homework, partners are assigned. Students can opt out of working with a partner, but they are encouraged not to. Collaboration is a vital skill to practice. You and your partner are expected to contribute roughly equally to the work. Just as in the individual assignments, you can bounce ideas off other students (and the prefect, and me), but you may not copy work, grab code from the Internet, ask an artificial intelligence to solve your problem, etc.
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. Your code should be legible, with meaningful variable names and appropriate comments.
I have not yet decided the precise policy for late homework. However, my general principle is this: If a late homework causes no practical problems — for example, the grader hasn't started grading that assignment anyway — then it's acceptable for full credit. However, if it's a big inconvenience to the grader, then it might not be graded at all.
We have three exams. Exam A is given in class, on paper, about one third of the way through the course. Exam B is given in class, on paper, about two thirds of the way through the course. It is cumulative but focused on recent material. Exam C is scheduled for the official final exam period: Saturday November 23, 8:30-11:00. It is on paper and 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 I cannot tune the work 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.
There is no official textbook. Here are some public things to read.
See Moodle for private readings, assignments, etc.
Remember that I encourage you to solve problems with classmates (even if the work that you submit must be your own). E-mail me, if you want help in arranging a study partner. In your e-mail, you might summarize your preferences: getting started early versus waiting until the deadline, working in the evening versus late at night, which classmates you can't work with, etc.
I hold several office hours per week. See below for the tentative 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, Graham (e-mail gordong), also holds prefecting sessions. Again, just drop in or e-mail for a special appointment.
Josh When? | Where? | Graham When? | Where? |
---|---|---|---|
Sun 5:00-6:00 PM | Olin 102 | ||
Mon 3:10-4:20 (6A) | CMC 324 | ||
Tue 8:00-9:00 PM | Olin 104 | ||
Wed 8:30-9:40 (1A) | CMC 324 | ||
Thu 9:20-10:20 AM | CMC 324 | ||
Fri 3:30-4:30 (6A) | CMC 324 |
Olin 310 is staffed with lab assistants during the afternoons and evenings. They may be able to help you. It is not their job to debug your code, but it is their job to help you figure out strategies for debugging code.
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. :)