Winter 2022 · 4 credits
Programming languages are rich mathematical structures and powerful user interfaces. This course covers the design and use of modern programming languages. We will build up systematically from mathematical first principles while considering human factors in language design, language prototyping, and techniques for reasoning about program behavior throughout the course.
The goal is to change the way you think about programming and programming language design in ways that will remain relevant across the many technology hype cycles that you will encounter over the course of your careers.
This course requires that you have a computer with a standard keyboard, an up-to-date browser, and a PDF reader. You will also need a cameraphone, digital camera, or scanner to be able to take clear photos of handwritten assignment solutions OR a tablet with a stylus. Assignments are submitted online, and we do not accept physical submissions.
Virtual office hours require that your device and internet connection are capable of sustaining clear audio and screensharing. A video camera is not necessary, though you are welcome to turn video on during office hours calls if you would like.
The department is commited to assisting students who are having trouble meeting these technology requirements. Please contact course staff if you would like to be considered for accommodation and we will do our best to help.
The course webpage is located at http://eecs490.org. (Note that https does not work.) A detailed schedule, assignment due dates, a calendar with the office hours schedule, and links to various resources are available from the webpage. Information posted on the webpage, including this entire syllabus, is considered required reading unless otherwise specified.
We will be using Piazza to host a course forum, which can be found linked from the webpage. You are required to read Piazza regularly: we will post announcements and assignment clarifications there. In addition, it will be a significant source of help and hints on the assignments and projects.
We do not answer content questions via email. In order to save everyone time, we want all students to have the benefit of seeing each question and its answer, so please use Piazza. Please search the forum before posting, to avoid questions that have already been asked and answered.
Do not post your own solutions, code, test cases, or output publicly to the forum. You may post questions that involve these things as a private question, which will be visible only to the staff.
Please ask any questions you may have early. If you post them just before a deadline, we cannot guarantee that the course staff will be available to answer them in time.
Mid-semester and final grades will be posted to Canvas. We may also use Canvas for surveys. We will NOT use Canvas for any other purpose (e.g. announcements of assignments, etc.)
We do not answer content questions via email. Please direct content questions to the Piazza forums. For administrative questions, please contact the course staff collectively at email@example.com, unless you have specific reason to contact one of us individually.
All material covered in lecture is mandatory unless otherwise specified. We encourage in-person attendance if possible, following campus COVID guidelines. However, CAEN lecture recordings will be made available via the link on the webpage. The instructor will also post whiteboard notes to the course Drive some time after class, typically within the next hour.
Discussion sections will review and expand upon the material covered in lectures, e.g. by going through example exam-like problems in detail. We strongly recommend that you attend, but any material exclusive to discussion is not required. You may attend any discussion you'd like, unless we have space issues in which case preference is given to students enrolled for that section.
Your participation in discussions and other recorded activities may be included in recordings. If you do not wish for this information to be recorded, please contact the instructor during the first week of class (or as soon as you enroll in the course) to discuss alternative arrangements. Recordings are intended for distribution only to students taking or auditing the course, and should not be distributed to others, whether or not they are within the university, without approval from the instructor.
Students are prohibited from recording/distributing any class activity themselves without written permission from the instructor or as necessary as part of approved accommodations for students with disabilities. Any approved recordings may only be used for the student’s own private use.
Online office hours will be held regularly by the instructor, GSIs, and IAs. The calendar on the course webpage will be updated with staff availability every week. Please check the calendar to make sure the office hours you plan to attend are still being held. Last minute changes (within 24 hours of the previously scheduled time) will be posted on Piazza.
The office hours queue is linked on the course webpage. Some office hours will be hybrid or fully virtual, in which case instructions will be provided for remote participants on the queue. You are encouraged, but are not required, to turn your videocamera on. For help with mathematical questions you are working on on-paper, you may be asked to take a photo of your work and send it to the person helping you (or hold it up to the camera). For help with coding questions, you may be asked to share your screen or window.
For some of the lectures and discussions, we will post readings on the course webpage. Each reading is marked as either required or optional on the webpage.
There is no required textbook for the class. Instead, the assignment handouts include extensive expository material, and are considered required reading. However, the following textbooks may be useful for students who want an alternative presentation of the material, and optional readings from these books may be posted.
We have found through many years of teaching experience in various courses that the most common reason for poor homework performance is not starting early enough. Plan to do some work on the assignment every day and try to have it finished a few days ahead of the due date.
The second most common reason for not doing well on the projects is not asking for help when you need it. We offer help in office hours and on the class forums. When you come to office hours, please be ready to provide access to your code, e.g. via screen sharing. Another good way to get help is to post a question to the course forum. Remember, if you find that you are stuck on a piece of your project for an undue amount of time, please see us!
An important skill in programming is to be able to test and debug your programs independently. As such, we will not debug your programs for you. Instead, we will help you try to figure out how to test and debug your program yourself. We will also ask you to demonstrate what testing and debugging techniques you have already tried, and what the results were, before providing any advice.
Finally, although the LearnOCaml platform that we use does save your work on our server, we cannot absolutely guarantee that your code is saved or that the server does not crash. To be safe, please maintain a local copy of your work on your file system. If you somehow lose your work, it is your responsibility.
Each homework assignment will be evaluated for correctness with respect to the instructions, and good programming practices, e.g. avoiding excessively complex solutions, or grossly unreadable formatting. In addition, some problems may also evaluate the quality of test cases that you supply.
It is not the case the a full score from the autograder means you solved the problem correctly! All code will ultimately be manually graded.
Assignments will generally be due at midnight ET on Thursdays (but see the handout and webpage for each assignment).
Up to three times over the course of the semester, you are permitted to submit an assignment up to 24 hours late, i.e. by midnight the day immediately following the due date, i.e. Friday for a typical assignment. You CANNOT use multiple late days for a single assignment. Instructions for how to use a late day will be provided in each assignment handout. Failure to follow these instructions will cause us to grade your code in the state that it appeared as of the normal due date.
Assignments or portions thereof turned in after the exact time and date on the assignment, or in the case of permitted late submissions, 24 hours later, will receive a zero. There is no grace period. All times are Michigan time.
We do not offer extensions beyond one late day (indeed, the solutions are released shortly after the late deadline). For example, we do not offer extensions due to crowded computing sites, long queue times, slow response times on the autograder, internet access problems, accidental erasure or loss of files, or outside conflicting commitments (including job interviews, conferences, and so on). We strongly urge you not to use up all of your late days early in the semester so that you have a late day available in case one of these issues arises. We also recommend that you find a backup location where you will be able to access the internet in case your home internet or power experiences an outage.
We will consider assignment exemption requests made at least two weeks in advance for religious holidays or planned medical procedures. Additionally, we will consider requests for exemptions due to documented, unanticipated medical or personal emergencies. If you can't notify the instructor in advance due to the emergency, then contact them as soon as you possibly can. In all cases, we require written proof of the emergency. An exemption means that your assignment average will be computed by increasing the weight of the remaining assignments proportionally.
You may give or receive help on any of the concepts covered in lecture, discussion, reading assignments, or textbooks. You are allowed to consult with other students in the class to help you understand problem specifications and definitions.
Unless otherwise stated, all assignments are to be solved individually. This means that no one should be watching you code, looking at your partial or complete solutions, or discussing solutions or possible solutions with you. You may not derive solutions from solutions found online for identical or similar problems. You may use small code snippets found in language documentation or other reference material but you must cite the source of the snippet in a code comment.
You may not submit any code that violates the rules and regulations in the assignment specification, or that attempts to subvert the grading system. The latter includes hard-coding solutions to public test cases, using run-time introspection to obtain information about private test cases, and so on. Code that violates these rules will summarily be given a zero.
To identify violations, we use both manual inspection and automated software to compare your solutions with each other and with prior solutions.
We report suspected violations to the Engineering Honor Council. The Honor Council will make final determinations about whether a violation of academic standards has occurred, as well as any sanctions. Read the Honor Code for detailed definitions of cheating, plagiarism, and other forms of academic misconduct.
|Participation in course surveys||3%|
The final course letter grade is based on the total weighted score earned. To pass the course, your weighted average assignment score must be a passing score and your weighted average exam score must be a passing score.
Your final grade and assignment/component grades will be determined based on the following table:
Our goal is to design assignments and exams so that a significant curve is not necessary. However, if based on the distribution of earned scores, we determine that a curve is necessary, the curve will only lower the cutoffs listed above. You can't be hurt by the curve. We expect the median student to receive a B, and students within 1.5 standard deviations of average can expect to pass.
We expect you take both exams at the scheduled times. If you miss an exam and a medical or personal emergency is not involved, you will receive a zero for the exam. If you anticipate an exam in another course or a religious holiday conflicts with an exam time, you must notify the instructor within the first three weeks of the term. The exam dates are posted as soon as possible (see webpage) so that you can avoid scheduling job interviews or other commitments on exam days; hence job interviews, etc. are not considered valid reasons for missing an exam.
If you live in a time zone that makes taking the exam at the scheduled time difficult, please let us know on the survey at the beginning of the semester, or contact course staff. We will attempt to accommodate as best as we can.
As indicated in the General Standards of Conduct for Engineering Students, we are committed to a policy of equal opportunity for all persons and do not discriminate on the basis of race, color, national origin, age, marital status, sex, sexual orientation, gender identity, gender expression, disability, religion, height, weight, or veteran status. Please feel free to contact any staff member with any problem, concern, or suggestion. All conversations will be kept confidential.
We ask that all students treat each other with kindness and respect, and try to be proactive in including one another, especially those who may not have an easy time making social connections.