CSE 341: Programming LanguagesCourse Information and SyllabusSpring 2011Logistics and Contact Information: The instructor is Hal Perkins. See the course homepage (www.cs.washington.edu/education/courses/cse341/11sp) for information regarding teaching assistants, officehours, sections, etc. You must ensure your email settings are correct for receiving course email-list messages,which is sent to your official UW mail address, and you should check email at least daily. We will limit emailtraffic to essential messages from course staff. Please use the Catalyst discussion board to stay in touch witheach other outside of class.Goals: Successful course participants will:• Internalize an accurate understanding of what functional and object-oriented programs mean• Develop the skills necessary to learn new programming languages quickly• Master specific language concepts such that they can recognize them in strange guises• Learn to evaluate the power and elegance of programming languages and their constructs• Attain reasonable proficiency in ML, Scheme, and Ruby• As a by-product, become more proficient in languages they already knowGrading and Exams: Do not miss the midterm or final.Midterm 20% Wednesday April 27, in class (tentative)Final 25% Thursday, June 9, 8:30-10:20Homeworks 55% approximately weekly (7 total)Unless announced otherwise, all homeworks contribute equally to the 55%.Late Policy: Homework is due at 11:00PM on the due date This deadline is strict, so it is exceedinglyunlikely that skipping class or arriving late to do homework is in your interest. For the entire quarter, youhave 4 “late days”. You are strongly advised to save them for emergencies. You may use at most 2 for thesame assignment. They must be used in 24-hour chunks.Academic Integrity: Any attempt to misrepresent the work you did will be dealt with via the appropriateUniversity mechanisms, and your instructor will make every attempt to ensure the harshest allowable penalty.The guidelines for this course and more information about academic integrity are in a separate document.You are responsible for knowing the information in that document.Text: The “required” text is: “Jeffrey D. Ullman. Elements of ML Programming, ML’97 Edition. 1998.” Wewill not follow the text closely, but it will likely prove useful during the first few weeks. The “recommended”texts are: “Dave Thomas. Programming with Ruby. 2005.” and “R. Kent Dybvig, The Scheme ProgrammingLanguage”. The course will overlap only with several chapters of these books. You must decide how muchyou benefit from having a book in your hands; there are also many free on-line resources.Advice:• Your instructor aims for lecture and section to be some of the most enriching hours of your collegecareer. We will start promptly, and you should arrive punctually and well-rested.• In every course, there is a danger that you will not learn much and thus lose the most important reasonto take the course. In 341, this danger is severe because it is easy to get “distracted by unfamiliarsurroundings” and never focus on the concepts you need to learn. These surroundings include newsyntax, editors, error messages, etc. Becoming comfortable with them is only one aspect of this course,so you must get past it. When we use a new language, you must spend time on your own “gettingcomfortable” in the new setting as quickly as possible so you do not start ignoring the course material.1• If you approach the course by saying, “I will have fun learning to think in new ways” then you will dowell. 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. By the end, it will relate back to what you know, but be patient.2Approximate Topic List (Subject to Change):1. Syntax vs. semantics vs. idioms vs. libraries vs. tools2. ML basics (bindings, conditionals, records, functions)3. Recursive functions and recursive types4. Algebraic datatypes, pattern matching5. Higher-order functions; closures6. Lexical scope7. Currying8. Syntactic sugar9. Equivalence and effects10. Parametric polymorphism and container types11. Type inference12. Abstract types and modules13. Scheme basics14. Dynamic vs. static typing15. Laziness and memoization16. Implementing higher-order functions17. Macros18. Abstract types via dynamic type-creation19. Ruby basics20. Object-oriented programming is dynamic dispatch21. Pure object-orientation22. Implementing dynamic dispatch23. Subtyping for records, functions, and objects24. Class-based subtyping25. Multiple inheritance, interfaces, and mixins26. Multimethods vs. static overloading27. Subtyping vs. parametric polymorphism28. Functional vs. OO extensibility29. Basic garbage-collection implementationTo learn these concepts using real programming languages and to gain experience with different languages,we will use:• Standard ML (a statically typed, mostly functional language) (approximately 4–5 weeks)• Scheme (a dynamically typed, mostly functional language) (approximately 2–3 weeks)• Ruby (a dynamically typed, object-oriented language) (approxmately 2 weeks)• Java (a statically typed, object-oriented language) (less than 1 week)There are thousands of languages not on this list, many programming paradigms not represented, and manylanguage constructs and concepts that it would be great to
View Full Document