Please follow these links for relevant information:
Class Timetable: the lecture schedule is tentative but the assignments are fixed.
Artists, engineers, poets: all create things. Creators often develop an intimate understanding of the materials and media they work with; this helps them better understand the creations of others and better able to create new artifacts themselves.
For us who write programs, our primary medium is the programming language. Some languages help us write certain kinds of (good) programs better; other languages prevent us from writing certain kinds of (bad) programs at all. Some languages focus on unfettered freedom; others try to find strong compromises between expression and constraint. Understanding these trade-offs helps us better understand computation itself, and makes us better programmers.
This course provides you with a framework to gain this understanding. I hope it will help you to: learn about the basic building blocks of modern programming languages; use these building blocks to compare and contrast the languages you encounter (and also to prepare you for the languages you will build!); and reflect on the relationship between languages and programming (and, in some cases, programmers).
You must subscribe to and follow the course’s EdStem board.
You are welcome to post questions to the board. When you do, unless you have a particularly good reason for doing so, please make your question private to the course staff. If we feel the question is of general interest, we may choose to make it public.
Please contact us solely through EdStem unless you have a very good reason not to. You are, of course, welcome to write course staff directly if you want to discuss a private matter. However, please do not write to staff individually for help with coursework: those requests should all go through EdStem.
The class meets at 11am, US/Eastern, on Mon-Wed-Fri.
Though you are likely to get the most out of class by attending in person, we recognize that not every can do so (and circumstances can change over the course of the semester). Therefore, we will be recording class sessions and posting them on Panopto. Recordings will be available a few hours after class finishes.
You can take this class remotely, but there is no option for live remote participation.
The course has no exams.
We expect you to submit all your work anonymously. This is to eliminate biases (both positive and negative) when grading, based on attributes such as race, gender, or even how you present yourselves in person.
To make clear we are serious, we will impose a small penalty if you do include personal identifying information (unless asked to). The penalty will escalate if you keep repeating this mistake.
Turning in work without your name on it may run contrary to what you’ve been told by countless prior instructors. However, because you’re turning in work electronically, not on paper, there is no danger we will “lose track” of whose work it is.
The work load in the course is quite uniformly distributed across the semester. Students can expect to spend about 10 hours each week on assignments. Combined with the 2.5 hours spent per week in class, this translates to approximately 180 hours over the course of the semester.
Work in this class will follow three policies, in phases.
You have to submit all these assignments, but your performance will not count towards your final grade.
You can talk freely to anyone. You can work with a friend, get help from a classmate, etc.
Your late days will not count during this period. However, we will not grade anything turned in over two days late.
Of course, there is a small danger you will not take these assignments seriously. That would be a mistake. Later assignments will build heavily on these, so it’s imperative that you understand them well and (by the end of this period) be able to do them on your own!
For the second part, which begins after Oct 8, you are allowed to work with a partner. You are not required to; you may work solo.
You may collaborate only with your partner. The only other permitted resources are ones officially provided by the course: lectures, textbook, Web site, EdStem, TAs, etc. You can’t reference arbitrary resources. The goal of this period is to let you continue to work with others, but also taper down your support to get you prepared for being able to do the work of this course entirely by yourself. You may talk to anyone else in the class on course material in general that is not directly related to a current or upcoming assignment. Some of this discussion may end up inadvertently helping you for a future assignment, which is okay; but you should not be consciously peeking ahead and discussing in a targeted way.
This part is divided into two periods: [Oct 8, Oct 29), and [Oct 29, Nov 10). In each period you may work solo or with a partner; you can use different configurations for each part. If you do use partners in both periods, you must switch partners so you have different partners for the two periods.
Critically, you and your partner must be going for the same type of grade (either letter-grade or S/NC); no mixed groups.
If you’re working alone, submit to Gradescope as usual.
If you’re working in a pair, one member of the pair should submit and then add the other to the submission.
If you’ve already submitted as a pair and one of you wants to take a late day but the other does not, the one who does not want to use a late day should remove the other from the group in their submission. The one taking a late day should submit their own version later. Of course, both members of the pair may choose to take a late day and jointly submit late.
8.3 Part 3: “Haan, Solo”
The final period begins on Nov 10: any assignments that go out on that date or later. From this point on, you may not collaborate with anyone; you’re expected to do all the work on your own, and all the rules in the rest of this syllabus apply fully. Please make sure you keep track of this date, so you don’t inadvertently plagiarize, etc.
I hope you are, or will become, as passionate about programming languages as I am. Still, I recognize that students have different goals and constraints, and not everyone can afford to immerse themselves fully in this course. You still deserve a quality course in return for a reasonable amount of effort.
Therefore, the assignments in this course are broken down into two categories, depending on what kind of grade you are aiming for. If you want a letter grade, you must do all the assignments. If you are taking the class S/NC, then you can skip those assignments that are explicitly tagged as being for letter grades. I really mean that you can skip them entirely.
If you aim for the S/NC level, then you have to do very well on all the assignments at that level to pass the course. If you go for a letter grade, then you will be given a letter commensurate with the quality of your submissions. Each assignment type [Assignments] explains what we are looking for in that kind of assignment.
After the settling-in period, I will excuse up to two poor performances after this date when computing final grades. However, for students trying to earn an A, the standards will be higher: doing poorly on a small assignment will be excused much more than doing poorly on one of the significant, later assignments.
In short, you get a breathing period early on; and if you screw up a little bit later, well, you’re human.
Your overall course grade is a certificate of how you did: An A means you did
Excellent work, B means you did Good work, and C means you did Fair work. I
view it as a one-letter recommendation letter (a recommendation
It should then be obvious that your performance cannot affect that of your classmates, or vice versa. I therefore do not “grade on a curve”, because I consider the notion meaningless. By the same token, there is also no “default” grade in this course. At least in principle, everyone can do well.
For some assignments, you will get two or more grades: usually one will represent the correctness of your solution, while others its code quality, efficiency, thoroughness of testing, and so on. We give highest priority to correctness for a simple reason: it’s very easy to write a clean or efficient or other solution to a different problem. Once we confirm you’ve actually solved the problem we asked you to, then we care about all these other characteristics as well. In general, assuming you have correct solutions, consistently poor code quality will hurt your grade while, if you’re at a grade boundary, especially good code can improve it. If you’re given an algorithmic problem, then efficiency will be almost as important as correctness, but you should still make sure you get the solution correct first: it’s better to have a less-efficient correct solution than a very efficient incorrect one.
There is only one way in which I look at the performance of the class. If a large portion of the class did poorly on an assignment, I assume there may have been a problem in the assignment itself, and I will check for that. If I find that we did indeed screw up in some way, I will lower my expectations for the assignment (i.e., lower standards for Excellent, Good, and Fair).
In this course, you will encounter undergraduate TAs (UTAs). UTAs are an important part of the educational mission of this department. We believe that students learn best by approaching material multiple times; we also know from personal experience that we learn best by teaching others. Therefore, UTAs undertake valuable personal learning by revisiting material some time after they first learned it, and by trying to explain it to others. In the same way, you may also encounter graduate TAs (GTAs).
These TAs also help with grading materials in the course. Their work is regularly reviewed by me. Grading is ultimately a collaboration in terms of setting standards, checking rubrics, reviewing work, etc.
However, TAs are not involved in any way in the creation of course grades. The course grade is entirely determined by me and nobody else, and is kept confidential from all TA staff. I have ultimate responsibility for the course.
We will rely, wherever possible, on material that is available free-of-cost. We will use free software tools, and the textbook and other materials for the course are also provided for free. We will link to some third-party sites that are also available at no cost.
The primary course textbook is PLAI, both the first and second edition, and some new material that may be created as the semester progresses.
The primary course software is DrRacket. Make sure you’ve installed version 8.2. If you have an older version, you must upgrade.
Since the text for these is common across courses, to keep this document from becoming excessively long, I am linking to the the Sheridan Center site. The text on those pages should be considered included here.
Please do not assume that just because I have linked to that page instead of copying it’s text that I don’t take this content seriously. I am committed to working with students with accessibility needs. If you have such needs, please get in touch with me as early as possible and we will do everything we can to accommodate them.
Please be sure to note the copyright policy listed on the Sheridan site.
Many assignments in this course are accumulative: they are designed so that the learning in one assignment improves your learning in the next assignment, and so on. Therefore, turning in one late can force you to turn in the next one late, and so on, potentially leading to a difficult situation as the semester ends.
As a team, the course staff need predictability in their grading schedules. There is also benefit to locality: by grading all the submissions for an assignment at the same time, (a) the staff don’t have to “page in” the assignment’s content, and (b) they can handle all the submissions uniformly and thus fairly.
You have five late days that you can use at (almost: see below) any time during the semester. You do not have to give us any reasons; you don’t even tell us you’re using them. Just use them in the approved ways.Note: There are a few rules and exceptions:
If you are taking a late day, you can submit after the deadline even if you have submitted something before the deadline. You don’t need to notify us if you do this. Just submit and we’ll automatically count your late day(s).
You may not take more than two late days on any assignment. We will start grading your assignment two days after it comes due. This way, we do not have to re-grade any work, while still providing feedback in a timely manner.
You may take only one late day on a Mystery Languages assignment. This is because we will be posting solutions after a day.
You cannot take any late days on the last assignment of the semester. This is so that course staff can finish grading on a reasonable date while attending to their own other needs.
For HW0, you do not have to use any late days. We understand you may have joined the course late; since this is only a procedural assignment, you won’t be penalized for being late on it.
Excused absences are when you have a reason that is justifiable by a note from a Dean or Health Services. (If you are home, you can submit a letter from a local doctor.) Excused absences do not count against your late days.
Note: When this happens, it’s usually because you are facing some adverse situation, sometimes an emergency. Follow the principle of “forgiveness, not permission”. That is, if you are in a crisis, focus on your needs. (If you have a moment to drop us a note telling us you will be delayed, that’s helpful, but in an emergency, don’t worry.) You can submit your note later. But you do need to submit official documentation for this delay to not count; otherwise it will be counted against your late days.
Per the university’s Religious Observance policy, if a religious event overlaps with half or more of the duration of an assignment being out, you can have as many days as you missed extra to complete the assignment. You are responsible for giving the staff a full list of the expected religious absences that require extensions before Sep 23.
These are in the course calendar, linked above and also from Assignments.
Brown University has an Academic Code that governs all our transactions. This Code includes a section on Respect for the Integrity of the Academic Process, which establishes its policy on cheating. We expect that you, as students and scholars, will abide by this faithfully and fully.
You should be extremely careful when using Internet resources for assistance other than those specifically linked from the course website or specified in the assignment. You are welcome to use reference material, e.g., programming language documentation or an encyclopaedia. Be aware that performing a generic Web search may get you to much more, such as solutions. (The one exception is when an assignment explicitly tells you to search for information on the Web.) If you accidentally find a solution and choose to use it, document that you are doing so. You will lose some credit for the assignment, but at least you won’t be in violation of the Code. You shouldn’t post looking for solutions on mailing lists or Web sites, either.
Unless stated otherwise, assignments must be done alone. You are welcome to discuss any parts of the assignments with course staff. With your friends, you may talk about the assignment: e.g., how far along you are, how long you anticipate needing, etc. You may not, however, discuss solutions. If in doubt about whether you can discuss something, ask us.
You are responsible for keeping your files private by setting the appropriate protections. If you fail and someone copies your work, you too will be held responsible. The same holds for other kinds of “sharing”, such as leaving your work visible in public places (whether computer screens or whiteboards). Another important kind of file-sharing is posting solutions on a publicly-visible version control repository site. If you host your work on such a site, make sure it’s in a private repository.
Regret Clause: Exceptions are possible only if you admit
your violation to the professor (not a TA) within 24 hours of the
assignment due time. This gives you an option if you cheated in
desperation the night an assignment was due, or allowed someone to
cheat from you, or something else—
The course will have a capstone option. It is designed for students who have had a logic course such as Logic for Systems, or a formal logic course in philosophy.
In the capstone option, you will learn to and use a tool for formally modeling programming languages called PLT Redex and use it to create and model a handful of systems. Even if you do not have a background in logic, if you can figure out Redex and complete this work, that’s fine!
Details will be published on October 1. If you are interested in pursuing the capstone option and we haven’t yet published information on this, please ping us on EdStem.
Unlike most other courses you take, this one may have some unusual assignments. For instance, you may be asked to do something impossible, or you may be given a task that sounds significant but is actually trivial. In these cases, you should focus on providing a justification for your reasoning rather than a solution itself.
The purpose in having such assignments is to more accurately mimic the real world in which you will be asked to solve tasks: there are no “answers in the back”; some problems are trivial while others, which look similar, are impossible, and a priori you can’t tell which is which.
How will you know which assignments these are? You won’t. After you’ve wrestled with a problem for a while and built a hunch that this is one of them, ask the course staff to confirm your hunch. They will ask you to justify your reasoning. If you do and are on the right track, they’ll tell you that you’ve understood the real point of the problem and inform you about how to write up your (non-)solution.
This text is based, with thanks, on text from CSCI 1660.
Some of the material covered in this course may be usable to create attacks on computer systems or on people. It may be unethical and/or illegal to use or apply it in contexts beyond the course itself. Breaking into, misusing, or harming computer systems, networks, or people can be illegal and punishable by law. You may also run afoul of Brown’s computer use policy, which can have disciplinary consequences.
Please see the separate page on it [Electronics Policy].
Please see the separate page on it [Diversity and Professionalism].
If you have course feedback, please contact us. We do not monitor sites
like Dear Blueno. You are welcome to use such sites to vent if you’d like, but
if you want something to be fixed—
If you want to say something nice, e.g., about the course TAs, do it on Brown Bear Admirers. Some course staff do read that.
If you run into any issues that you wish to report to the course’s head course staff, you can report them using this form. We will be discreet in how we use this information. In particular, we will discuss our plans with you before we contact anyone named in the form.
If you feel yourself falling behind, needing to talk to someone about personal problems, or in general want a supportive ear, the university has extensive Counseling and Psychological Services. Please don’t hesitate to use these: everyone finds them helpful at some time or the other, and they’re part of what you’re paying for to attend Brown. Make the most of them.