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 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, Eleventh Ed.. Addison-Wesley, 2015.
- Recommended: Lipovaca, M. Learn You a Haskell for Great Good! http://learnyouahaskell.com
- Selected readings: Tucker, A. and Noonan, R. Programming Languages: Principles and Paradigms. McGraw-Hill, 2002.
You can find other references in the class bibliography.
Compilers & Interpreters:
- Free and/or open-source compilers, interpreters, and development environments exist for many languages. For this class, all students will need to be able to write and execute programs in Scheme and Haskell. In addition, you may wish to write a small program in other language(s) to supplement presentations given in class.
- I recommend using Jupyter to write your Scheme and initial Haskell programs. (I may require this if we can get Jupyter working for everyone.)
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 COMP 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 at least one, possibly 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 5% Problem Sets 15% Presentations 20% Presentation Journal Entries 15% Programming Projects 25% Final Examination 20%
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.