This syllabus is subject to change based on specific class needs, especially the schedule. Significant deviations will be discussed in class. Individual exceptions to the policies and schedule are granted only in cases of true emergency. Please make arrangements with me if an emergency arises.
On November 1, 2021, I will start paternity leave. After this date, Marta Tucker will take over my classes, including this one. She will deviate from this syllabus as necessary.
This course is an exploration of modern programming languages through the study and implementation of interpreters for fundamental language features. By exploring, testing, and implementing small languages with common programming language features, students expand their skill set with both practical and theoretical knowledge. To understand programming languages is to understand programming and computation as a whole. A programming language is how we describe a computational process and study of the languages themselves helps to shed light on the inner workings of a computation.
The main textbook will be:
Be aware that the textbook is a constant work-in-progress. We may occasionally supplement this with:
Throughout the syllabus I refer to the main textbook as “PAPL” and the supplement textbook as “PLAI”. Other sources will be provided to you or will be available online.
This course will, for the most part, follow the text. Topics to be covered will include:
We’ll be diving in with the Pyret language that accompanies PAPL. Pyret has an in-browser development environment and so may be used on any computer with a (modern) web-browser.
For the “Mystery Language” homework assignments we’ll mostly be using
Racket. IMPORTANT: we will require Racket version
7.8 – other
versions are not supported. Once installed, follow the setup
instructions
here,
except you should use
https://github.com/shriram/mystery-languages.git
as the package
source, NOT the one with samwaxman
. A few mystery language
assignments might link to a webpage instead of using Racket.
Submitting: Assignments will be submitted via Gradescope.
Late assignments: You have each been allotted a total of 5 late days. You may apply these without any penalty to any project you see fit, with the exception that you may use at most 2 on any individual project. The whole point here is to give you some flexibility that allows for things like illnesses, long trips, and the like. I am unlikely to grant further extensions. Any projects turned in late will result in a 20% penalty per day.
Academic Dishonesty: Monmouth College’s official policy on academic dishonesty can be found here. You are responsible for reading and complying with that policy.
In this course, any violation of the academic honesty policy will have varying consequences depending on the severity of the infraction as judged by the instructor. Minimally, a violation will result in an “F” or 0 points on the assignment in question. Additionally, the student’s course grade may be lowered by one letter grade. In severe cases, the student will be assigned a course grade of “F” and dismissed from the class. All cases of academic dishonesty must be reported to the Associate Dean who may decide to recommend further action to the Admissions and Academic Status Committee, including suspension or dismissal. It is assumed that students will educate themselves regarding what is considered to be academic dishonesty, so excuses or claims of ignorance will not mitigate the consequences of any violations
Collaboration: We encourage you to make use of the resources available to you – it is fine to seek help from a friend, tutor, instructor, internet, etc. However, copying of answers and any act worth of the label “cheating” is never permissible! In addition to listing your sources and collaborators, you should be producing your own writeup in your own words. By “your own words,” we mean you should be producing the text yourself, without some external aid. Verbatim copying of text is specifically disallowed, but so is taking a source and rearranging some phrases and changing some variable names to create a derivative version! Such behavior is definitely NOT “using your own words.” It does not matter if you helped contribute to this source text with others, since then you are still not the sole author of the text. The point of collaborating on an assignment is not to produce a jointly authored set of solutions, since that violates the course policies. Instead, it is to help you solve the problems, which sometimes involve a bit of creativity. After you have jointly come up with the ideas you need to solve the problems, though, you should part ways with your group and sit down to do the writing by yourself. I also advise against sharing the writeup you submit with others, since if someone else uses your text as a source for their own solution (with or without your permission), you will also be implicated in the violation of the academic integrity policy. In any case, if two nearly identical solutions are received, we have no way of tell which is the original, and the policy is to not award credit for either submission.
Electronic Devices: Do not use your phone or other devices in class except where necessary. Any computer or tablet usage should be related to the course. If a device is not being used for Zoom or Socrative it should be put away and turned on silent. Other usage is rude and distracting to others.
General Expectations: In short, I expect you to be respectful of others and take responsibility for your own learning. You are here to learn, so work hard and be professional.
Just attending class is not sufficient to truly learn the material. Read the text, use the resources available at Monmouth College, and go beyond the material.
If you miss class, you are responsible for everything covered on that day. College is, in some sense, your job. Take pride in creating quality work. Staple your assignments, label problems, and present your answers neatly and orderly.
Your job is to convince me that you have learned the material – show your work! Even if you do not know a particular answer, guide me through your thought process.
The weekly workload for this course will vary by student but on average should be about 12.5 hours per week. The follow tables provides a rough estimate of the distribution of this time over different course components for a 16 week semester.
Category | Amount | Final Grade Weight | Total Time | Time/Week (Hours) |
---|---|---|---|---|
Meetings | - | 10% (Participation) | - | 2.5 |
Interpreters | 5–8 | 40% | 56 | 3.5 |
Homework/Mystery Languages | 8–12 | 40% | 8 | 4.5 |
Paper+Presentation | 1 | 10% | 24 | 1 |
Reading+Unstructured Study | - | - | 16 | 1 |
100% | 12.5 |
Your participation grade is based mainly on your preparation and participation in the class meetings and on your homework presentations. During class, be prepared to use the Socrative app for in-class activies. Every day that a homework assignment is due (including mystery languages), one students will be randomly selected to present their solution to a portion of the assignment. You will be graded based on preparation and the thoroughness of your explanations, NOT on correctness, although you should of course strive for correctness. Students taking late days will be required to leave the classroom during these presentations. You must inform me BEFORE class if you are taking late days to avoid being randomly selected to present. Otherwise, if you are randomly selected to present but have not done the assignment, you will receive a 0.
The majority of the assignments in this course are derived from the Programming Languages course at Brown University. Homework assignments may include a variety of activies, but the core will be “mystery languages.” These require you to investigate the behavior of a mystery programming language and explain it. This gives you good practice for real life, where you will often be forced to learn new languages. Students aiming for A should get nearly all of the “Core” problems and some of the “Advanced” ones, and should have very good written summaries. Students aiming for a B should get most of the “Core” problems.
The other assignments are “interpreters,” which are programming assignments in which you create or extend programming language tools, giving you some experience in the design and creation of your own programming languages. Your grades on these assignments will be based not only on correctness, but also on quality – both of your implementation code AND your testing.
Your final grade is based on a weighted average of particular assignment categories. You can estimate your current grade based on your scores and these weights. You may always visit the instructor outside of class to discuss your current standing.
This courses uses a standard grading scale. Assignments and final grades will not be curved except in rare cases when its deemed necessary by the instructor. Percentage grades translate to letter grades as follows:
Score | Grade |
---|---|
94–100 | A |
90–93 | A- |
88–89 | B+ |
82–87 | B |
80–81 | B- |
78–79 | C+ |
72–77 | C |
70–71 | C- |
68–69 | D+ |
62–67 | D |
60–61 | D- |
0–59 | F |
You are always welcome to challenge a grade that you feel is unfair or calculated incorrectly. Mistakes made in your favor will never be corrected to lower your grade. Mistakes made not in your favor will be corrected. Basically, after the initial grading your score can only go up as the result of a challenge*.
You are always welcome to challenge a grade that you feel is unfair or calculated incorrectly. Mistakes made in your favor will never be corrected to lower your grade. Mistakes made not in your favor will be corrected. Basically, after the initial grading your score can only go up as the result of a challenge.
The following calendar should give you a feel for how work is distributed throughout the semester. Assignments and events are listed in the week they are due or when they occur. This calendar is subject to change based on the circumstances of the course.
Note: Readings should be completed BEFORE the start of class on the day on which they appear.
Date | Topic | Assignment/Reading |
(Mon 08/23) (Week 1) | (Freshman Orientation – No COMP325) | |
Wed 08/25 | Intro & Logistics | PAPL 1-3, Hwk1 (Due 08/27) |
Fri 08/27 | Intro to Pyret | PAPL 4-6, Prog1 (Pyret) (Due 09/03) |
Mon 08/30 (Week 2) | Lists in Pyret | PAPL 7-10 |
Wed 09/01 | Structured Data | PAPL 11-12, Hwk2 (Due 09/08) |
Fri 09/03 | Recursive Data | PAPL 13,15 |
Mon 09/06 (Week 3) | Prog1 Review | PAPL 16 |
Wed 09/08 | Streams, Hwk2 Review | PAPL 16 |
Fri 09/10 | Parsing | PAPL 24 |
Mon 09/13 (Week 4) | Interpretation | PAPL 25, Prog2 (Interp 1) (Due 09/20) |
Wed 09/15 | Conditionals | PAPL 26 |
Fri 09/17 | Functions with Substitution, Lazy | PAPL 27.1 |
Mon 09/20 (Week 5) | Functions, Eager | Hwk3 (Due 09/24) |
Wed 09/22 | Functions with Environments | PAPL 27.2 |
Fri 09/24 | Hwk 3 + Interp 1 Review | Hwk4 (Due 09/29) |
Mon 09/27 (Week 6) | Functions Anywhere | PAPL 27.3-27.5, Prog3 (Interp 2) (Due 10/08) (Starter code) |
Wed 09/29 | Types I | PAPL 28 |
Fri 10/01 | Types II | |
Mon 10/04 (Week 7) | Safety and Soundness | PAPL 29 |
Wed 10/06 | Parametric Polymorphism | PAPL 30 |
Fri 10/08 | Prog3 Questions | PAPL 31, (Prog3 Due) |
Mon 10/11 (Week 8) | Prog3 Solutions/Review | Interp 2B (Due 10/20; optional) (Starter code) |
(Wed 10/13) | (Exam day for half-semester courses) | |
(Fri 10/15) | (Fall Break) | |
Mon 10/18 (Week 9) | Prog3 Solutions/Review | Hwk5, Interp 3 |
Wed 10/20 | More Prog3 Solutions | |
Fri 10/22 | Hwk5, Prog3B Solutions | |
Mon 10/25 (Week 10) | Type Inference | PAPL 31 |
Wed 10/27 | Sharing and Equality | PAPL 20, Research Project |
Fri 10/29 | State | PAPL 22, (Prog4 Due Saturday) |
Mon 11/01 (Week 11) | Mutation | PAPL 32 |
Wed 11/03 | Objects | PAPL 33 |
Fri 11/05 | ||
Mon 11/08 (Week 12) | Control Operations | PAPL 34 |
Wed 11/10 | ||
Fri 11/12 | ||
Mon 11/15 (Week 13) | ||
Wed 11/17 | ||
Fri 11/19 | ||
Mon 11/22 (Week 14) | ||
(Wed 11/24) | (Thanksgiving Break) | |
(Fri 11/26) | (Thanksgiving Break) | |
Mon 11/29 (Week 15) | ||
Wed 12/01 | ||
Fri 12/03 | ||
Mon 12/06 (Week 16) | ||
Wed 12/08 | ||
Tue 12/14 6:30 PM | Final Exam |
Mental Health and Counseling Services: Monmouth College provides cost-free, professional mental health counseling to support you and to help you manage challenges that may impact your personal and academic success. The Counseling Center is located in the lower level of Poling Hall, Suite 6, and the hours are Monday-Friday, 8:30 AM – 5:00 PM. For appointments, please call 309-457-2114 or email counselingcenter@monmouthcollege.edu
Cindy Beadles, Director of Counseling Services, 309-457-2114, Poling Hall, Upper Level Thomas Caudill, Counselor, 309-457-2114, Poling Hall, Upper Level Brandon Ouellette, Interim Chaplain 309-457-2380, bouellette@monmouthcollege.edu
Student Success and Accessibility Services offers FREE resources to assist Monmouth College students with their academic success. Programs include supplemental instruction for difficult classes, drop-in and appointment tutoring, and individual academic coaching. The office is here to help students excel academically, since everyone can work toward better grades, practice stronger study skills, and mange their time better.
Accessibility Services: If you have a disability or had academic accommodations in high school or another college, you may be eligible for academic accommodations at Monmouth College under the Americans with Disabilities Act (ADA). Monmouth College is committed to equal educational access. To discuss any of the services offered, please call or visit Student Success and Accessibility Services. SSAS is located in the ACE space on the first floor of Hewes Library, opposite Einstein Bros. Bagels. They can be reached at 309-457-2257 or via email at ssas@monmouthcollege.edu.
Hewes Library: The goal of Hewes Library is to help students succeed in meeting their research needs. We do this in person and online, using a variety of formats including chat, email, and Zoom. We provide access to print and digital resources and have access to collections from around the world. We encourage students to reach out if they have questions and #JustAsk! We’re here to help. Email reference@monmouthcollege.edu to set up a personal consultation OR visit/call the Hewes Library reference desk during scheduled hours. Click here for the current library hours.