Fall 2024 · 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.
Assignments require that you use a Mac, Windows, or Linux PC with a standard keyboard, an up-to-date copy of Firefox, Chrome, or a Chromium-based browser, and a PDF reader. We cannot guarantee that an iPad or other tablet will be sufficient. CAEN computer labs have suitable PCs available if you do not have one of your own, or if your own computer does not have sufficient power to comfortably run some of the software that we use in the course (which can be CPU-intensive at times). You will also need access to 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. You are welcome to turn video on during office hours calls if you would like, but it is not required.
The course webpage is located at http://eecs490.org. (Note that https may 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. You can choose to hide your identity from other students (but not from instructors). 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. Otherwise, please favor public posts.
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, particularly outside normal working hours (9am-5pm M-F, excluding university holidays).
We will use Canvas to release files. Final grades will be posted to Canvas at the end of the semester (but not during the semester, where we will be using Gradescope to manage grading). We may also use Canvas for certain course surveys and to release assignments and files. We will NOT use Canvas for announcements. Please check Piazza for announcements.
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 eecs490staff@umich.edu, unless you have specific reason to contact one of us individually.
All material covered in lecture is mandatory unless otherwise specified. We require in-person attendance. However, CAEN lecture recordings will be made available via the link in the sidebar on the webpage. We cannot guarantee that these recordings are legible if there are technical difficulties. In addition, there will be a live Zoom call for lectures unless technical difficulties prevent this. The Zoom call is for occasional use, not as a substitute for in-person attendance. The whiteboard notes will be not be separately posted and are not sufficient to understand lecture material, and students are responsible for key material communicated only verbally as well.
Some lectures will be given remotely due to university-related travel. Announcements will be made about these situations on Piazza.
If lecture attendance drops to zero or near-zero, we may switch to releasing previous semester's lecture recordings. The only reason to do lectures live is if students are engaged. This course is a great opportunity to engage with world experts in this area -- take advantage of it!
Discussion sections will provide opportunities to 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. Extra credit may be offered for discussion participation -- up to 2.5% of your overall course grade for attendance at up to 10 discussions, pro-rated. Discussion sections will not have a live Zoom link or classroom recordings unless otherwise announced.
Your participation in lectures, discussions and other recorded activities may be included in recordings. 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.
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 announced on Piazza.
The office hours queue is linked on the course webpage. All office hours will use the queue. 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 a specific window. You can share your screen at any time without asking for permission.
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 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, some of the platforms that we use do not save your work in your browser or on a server. Even for those that do, 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 and update it regularly. If you somehow lose your work, it is your responsibility and extensions will not be provided.
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 6:00pm ET on Fridays (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 1 business day later, i.e. by 6pm the Monday immediately following the Friday due date. 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, by the late deadline, will receive a zero. There is no grace period. All times are Michigan time.
We do not offer extensions beyond one late deadline for any reason (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 identify a backup location, e.g. on campus or a coffee shop, 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. If you are granted an exemption, then your remaining assignments will be increased in weight 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. If you took this course in a prior semester or have been (dishonorably) given access to prior semester's solutions, you may not refer to or submit your own prior graded solutions or look at or base your solutions in any way on posted solutions if a similar or identical problem is included in this semester's assignments or exams. 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 use any automated system, e.g. an AI or natural language processing system, to generate solutions to assignments.
You may not submit any code that attempts to subvert the grading system. The latter includes hard-coding solutions to discovered 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 submissions.
We reserve the right to 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.
Assignments | 47% |
Midterm | 25% |
Final | 25% |
Participation in course surveys | 3% |
The final course letter grade is based on the total weighted score earned. Each assignment is equally weighted.
Your final grade and assignment/component grades will be determined based on the following table:
A+/A/A- | 97.5/92.5/90.0 |
B+/B/B- | 87.5/82.5/80.0 |
C+/C/C- | 77.5/72.5/70.0 |
D+/D/D- | 67.5/62.5/60.0 |
E | 0-60 |
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 will use a curve to ensure that the median student receives at least a B, and students within 1.5 standard deviations of the median can expect to receive a C or better. In prior semesters, we have not needed a significant curve.
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, vacations, or other commitments on exam days; hence job interviews, vacations, and so on are not considered valid reasons for missing an exam.
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.