PF1 is a first course in programming — applying computation to problem solving. The course is aimed at students with little or no prior programming experience. We’ll be using a programming language called Racket, in which we will practice functional programming. But, this is not a course about Racket; it’s a course about software construction: designing programs and then translating designs into implementations. Designing software means making wise choices about data structures, algorithms, and program organization. Implementing means more than just writing code: it means making wise decisions about systems and interfaces. By the end of the course, students should be familiar with various programming constructs universal to all languages, they should be able to analyze problems and then create programs to solve them.
|Lectures||Mon, Tue, Wed 8:45–10:15 in Room SI-008|
|Moodle Website||PF1 on Moodle|
|Policies||Lab submission and coding conventions|
|Grading||20% Participation, 10% Project, 20% Quizzes, 50% Final exam|
There will be approximately one lab per week. The lab will be handed out on Tuesday and is due the following Tuesday. Doing the labs is essential to passing the class. The exam will test how well you understand the material and practice with writing code is essential to understanding.
Your lab grade will depend on whether or not you do the lab, not on its correctness. For most labs you and your partner are required to meet with a TA to discuss the lab. The TA will ask you to explain your code and will provide you with feedback.
During the semester the assistants will perform code reviews with you on your labs. You must participate in reviews to get full credit for the “Participation” portion of your grade. Participation includes not just showing up but also being able to present your code and demonstrate that you understand it. The assistants will provide suggestions for improving your code which you should take into account on subsequent labs.
Quizzes and exams
There will be approximately one 20-minute written quiz every two weeks.
The final exam is a 3-hour written exam. The best preparation for the exam is to do the labs and to read the the assigned readings.
The course methodology emphasizes using design recipes to help you design programs in a systematic way. On exams and quizzes, you must demonstrate not only that you can write correct functions, but also that you can write meaningful comments explaining your code and good test cases. Following the design recipe is a good way to demonstrate these.
Exams and quizzes must be done alone.
Some labs are individual labs and some labs should be done in pairs. Do not do labs in groups larger than two people. The contributions of each student must be explicitly described. Every code file must have a comment ascribing authorship to an initial author or authors and any collaborators. All students are responsible for understanding the labs during code reviews.
Cheating and plagiarism are unacceptable. You are free to discuss assignments and solutions with others. However, you must write your own assignments, and must not represent any portion of others’ work as your own. Assignments or exams found to have been plagiarized will be given a grade of 0. Allowing others to copy your assignments or exams will result in a 0.