CSE 341 - Programming Languages - Autumn 2012



Successful course participants will:

Also see the Standard Syllabus for 341 (things that should be taught for all offerings)


There is no text for the Haskell, Scheme, or Prolog portions of the course; we'll just use online resources for these languages. However, there are books on reserve in the Engineering Library that you may want to use for Haskell and Ruby.


There will be a midterm and a comprehensive final exam. You can bring a maximum of 2 (paper) pages of notes. No laptops, tablets, or smart phones. (The notes could just be printouts of materials from the class website, but preparing your own notes is a great way to review.)

The spooky midterm will be in class on October 31. The final will be Tuesday Dec 11, 2:30 - 4:20pm, in the usual classroom. If you are ill or there is some other major emergency, contact the instructor by email or phone before the midterm or final. You can leave a voicemail message (206-543-6678). We won't be able to give the final before the 11th.

If you want to take a practice exam, exams and solutions for previous quarters are posted on the web pages for those offerings.

Late Policy

Electronic turnins will be due at 10pm sharp on the due date. If we have any written (paper) assignments, these will be due at the beginning of your quiz section. Barring major emergencies, these deadlines are strict. However, you have 6 "late days" to use, total, spread over all assignments. (Late days come in 24-hour chunks, i.e., a turnin at 10:01pm uses 1 of your 6 days. Weekends count.) I'd suggest you hoard them in case you get sick some week or really get stuck late in the quarter. We'll have the turnin system set up so that you can continue to turn things in for a certain number of days after the due date, marked as "late".

The number of late days you can use will be noted on each assignment. The dropbox for the assignment will close after the late days have passed for that assignment (even if you personally have late days left). This will let us discuss the solution in sections, or at the end of the quarter, for TAs to finish the grading. So, for example, if an assignment is due on a Wednesday at 10pm, and it's marked that you can use two late days for that assignment, the dropbox will close Friday at 10pm.

If you use up all your late days, but the dropbox for that assignment is still open, assignments will be marked down 25% per day late (but try to avoid getting into that situation).


We'll usually have a warmup assignment and a larger assignment for each language. The larger assignments will count for more than the warmups. Each homework will have a total number of possible points on it -- the 55% of the grade will be allocated proportionately.

Collaboration and Academic Integrity

Homeworks are all individual, not group, exercises. Discussing the course material, including homework problems, is encouraged, but you must produce your own homework solutions. You may discuss assignments in general terms with other students, including a discussion of how to approach a problem, but the code you write must be your own. The intent is to allow you to get some help when you are stuck, but this help should be limited and should never involve details of how to code a solution. You may not have another person (current student, former student, tutor, friend, anyone) "walk you through" how to solve an assignment.

If you are ever unclear about how to represent what work you have done, (a) ask and (b) describe clearly what you have done. If you do, the worst that will happen is you will lose some credit on an assignment. This is much better than the alternative. If you are at all in doubt about whether your collaboration was appropriate, include a description of your collaboration with your homework submission. I hope there will be no cheating cases in the class - however, if cheating is found, it will be turned over to the University Committee on Academic Conduct.

However, please don't take all this to mean that you can't talk with your classmates!


In learning new languages it's really useful to experiment. As you read through the lecture notes, try out the examples. And if you're unsure how some new construct works, write a small sample program and see!

In every course, there is a danger that you will not learn much and therefore lose the most important reason to take the course. In 341, this danger is perhaps larger because it is easy to get distracted by unfamiliar surroundings and never focus on the concepts you need to learn. These surroundings include new syntax, programming environments, error messages, etc. Becoming comfortable with them and appreciating their importance is only one aspect of this course, so you should try and get past it. When we move to a new language, you should spend time on your own getting comfortable in the new setting as quickly as possible so you do not fall behind in working through the course material.

If you approach the course by saying, "I will have fun learning to think in new ways" then you will do well. If you instead say, "I will try to fit everything I see into the way I already look at programming" then you will get frustrated.