Instructor:
Alyce Brady
(abrady{at}kzoo{dot}edu)
Olds-Upton 203G, 337-7065
Course Web Site: http://www.cs.kzoo.edu/cs320/
The objectives of this course are to help you
We will accomplish these goals by studying the concepts and paradigms that underlie programming languages and by discussing the design decisions and tradeoffs related to these concepts. We will also look at numerous examples of programming languages to see the historical progression of language design. Since most of our curriculum focuses on imperative and object-oriented programming, we will pay particular attention to functional languages. You will write programs in both Scheme and Haskell, and we will use Haskell to explore the semantics of both functional and imperative languages.
- deepen your understanding of the structure and design principles of programming languages,
- develop skills to describe, analyze, and learn to use the features of new programming languages,
- become familiar with the distinctive characteristics of several programming paradigms,
- develop fluency in a functional programming language (Haskell).
This course will be run as a seminar course, which means that everyone will be actively involved in both teaching and learning from each other. You will:
- Read sections of the textbook, consider the review questions at the end of each chapter, and come to class prepared to ask questions and participate in class discussions.
- Deepen your understanding of each topic by working on problem set assignments (pen-and-paper or short skill-based programming exercises).
- Read about two additional topics from our textbook, readings in other books, or articles in the programming languages literature, and give presentations on them to your classmates.
- Write programs in Scheme and Haskell and discuss your results and experiences in class.
- Integrate the topics from the course in a final examination.
Week 1: Introduction: motivation for studying programming languages, history of programming languages, introduction to the major paradigms Weeks 2 - 3: Concepts underlying Functional Languages, with particular emphasis on Scheme and Haskell Weeks 3 - 4: Syntax and Semantics Weeks 5 - 6: Concepts underlying Imperative Languages Weeks 7 - 8: Data Abstraction and Object-Orientation Week 8: Exception Handling Weeks 9 - 10: Declarative Languages, especially Prolog
- Required: Sebesta, R. Concepts of Programming Languages, Sixth Ed.. Addison-Wesley, 2004.
- Recommended: Bird, R. Introduction to Functional Programming Using Haskell, 2nd Ed.. Prentice Hall, 1998.
- Selected readings: Tucker, A. and Noonan, R. Programming Languages: Principles and Paradigms. McGraw-Hill, 2002.
You can find other references in the class bibliography.
Software:
- Compilers: The Linux and Mac computers in the advanced CS lab ("The CS Hub") have compilers and interpreters for a number of languages, including C, Objective C, C++, Java, Scheme, ML, and Haskell.
- Misc: Web browser and electronic mail for class communication, word processing for writing up assignments, HTML or PowerPoint for in-class presentations.
This class will be conducted as a seminar, so your participation is crucial to everyone's learning and weighs heavily in your grade. Active participation in this class means coming to class on time, completing assigned reading and exercises, listening to others, contributing ideas of your own, and asking questions as they come up.
Assignments, anouncements, class notes, and other material will be made available on the CS 320 home page (http://www.cs.kzoo.edu/cs320/). You are responsible for checking this resource frequently.
Reading assignments will be assigned for each class. You are expected to come to class having completed the reading and prepared to discuss the ideas from it.
There will occasionally be problem set exercises assigned as well, which may be discussed and presented in class.
Several programming projects will be assigned throughout the quarter. These will involve programming using languages and paradigms that may be unfamiliar to you. As a result it is important that you begin work on the projects as soon as they are assigned. Assignments may be turned in at any time on the day they are due (including in the evening or at night), but must be in my box before I come in the next morning. Assignments due on a Friday must be in my box when I come in on Monday. Assignments should always be turned in on time unless you clear it with me in advance. Your programs should conform to the spirit of the CS Program Style Guide and Documentation Standards although, since you will be writing in a functional language, the details and examples of those documents will not apply. Being careful about structure and documentation is an important step towards writing high-quality programs. You may work on the programming projects individually or in pairs. You will turn in your programs electronically and also demo them for the instructor.
Each of you will be expected to give two 20-minute presentations to the class on topics other than those in the regular reading assignments. These presentations will be distributed throughout the quarter.
The course will also involve a final examination. This will likely be a take-home final.
This course operates in accordance with the principles of the Kalamazoo College Honor System: responsibility for personal behavior, independent thought, respect for others, and environmental responsibility. In particular, academic integrity is a fundamental principle of scholarship. Representing someone else's work as your own, in any form, constitutes academic dishonesty. Unauthorized collaboration and receiving help from others outside the bounds permitted by the instructor are also violations of the College honor code. You are responsible for working within the permitted bounds, and acknowledging any help from others or contributions from other sources.
Review questions and problem set assignments: You should feel free to discuss the review questions with others in the class and work with them on the problem set exercises. As you work with others, though, keep in mind that the goal is not just getting a solution to the problem, but learning how to solve the problem yourself. With that in mind, each student should write up their solutions to the problem set assignments individually. As always, you should document any collaboration in developing solutions.
Programming Projects: Programming projects may be done individually or in pairs. You may choose your own partners, but I encourage you to choose different partners for each project. Within your program documentation, you should indicate all author(s) of the program.
You are free to discuss the requirements, concepts, and overall strategies of a programming assignment with others in the class, but you may not look at code belonging to anyone outside your group, or make your code available to others. All code-specific questions should be addressed to the instructor, the TAs, or other computer science faculty members only. Any help received should be acknowledged in your documentation.
Exams: Exams, obviously, should be your own work. In the event of a take-home exam, you may use only your textbook, your notes, and any materials available on the course website. You should use quotation marks and provide citations (including page numbers) in your exam solutions for any material you use from the textbook or any other authorized source.
Final grades will be based on:
Attendance, Preparedness, and Participation 10% Problem Sets 15% Presentations 25% Programming Projects 25% Final Examination 25%
Any student with a disability who needs an accommodation or other assistance in this course should make an appointment to speak with me as soon as possible.