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 CLP(R) portions of the course; we'll just use online resources for these languages. However, there are a set of texts on reserve in the Engineering Library that you may want to use, including books for each of the languages.
There is an optional text for Ruby:
I'd suggest buying the book if you plan to use Ruby for other things as well, or if you particularly like having a book, and otherwise just using online resources.
There will be a midterm and a comprehensive final exam, both open book and notes. The midterm will be in class on Feb 8. The final will be Wednesday March 17, 8:30 (yawn) - 10:20am, 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 17th.
If you want to take a practice exam, exams and solutions for previous quarters are posted on the web pages for those offerings.
Electronic turnins will be due at 10pm on the due date. If we have any written (paper) assignments, these will be due at the beginning of your quiz section. Baring major emergencies, these deadlines are strict. However, you have 8 "late days" to use, total, spread over all assignments. (In 24-hour chunks, i.e., a turnin at 10:01PM uses 1 of your 8 days. I'd suggest you hoard them in case you really get stuck late in the quarter. We'll have the turnin system set up so that you can continue to turn things in after the due date, and they will be marked "late" at that point.
Note: the number of late days was increased from 6 to 8 as of Feb 5.
If you use up all your late days, late 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.
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.