Students will gain a modern understanding of programming language design and implementation. The emphasis will be on building up from first principles and on understanding programming languages simultaneously as formal structures and as human-computer interfaces.
The purpose of this course 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.
No laptops during lecture. Tablets with pens are okay, but please use them only for note taking.
Lecture · MW · 4:30pm-6:00pm · 1571 GGBL
For many of the lectures, the instructor will post notes on the course webpage. Similarly, discussion notes may also be posted. These are considered required reading unless otherwise specified.
There is no required textbook for the class. However, the following textbooks may be useful, and optional readings from these books may be posted.
The course webpage is located at eecs490.org. A detailed schedule, assignments, lecture notes, information regarding office hours, and links to various resources are available from the webpage.
Information posted on the webpage is considered required reading unless otherwise specified.
Minimal additional information and grades, when available, can be found on the course Canvas site, which can be found from the webpage.
We will be using Piazza to host a course forum, which can be found from the webpage. You are required to read this 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 technical 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 the forum. 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 to the forum.
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 able to answer them.
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 project 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, preferably electronically. 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 style and programming practices. 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!
Assignments will generally be due at 8pm on Tuesdays. Up to three times over the course of the semester, you are permitted to submit an assignment by 4pm the day immediately following the due date, i.e. Wednesday for a typical assignment. For assignments submitted using Learn-OCaml, you must set the late flag to
true in the exercise titled "Late submission". Failure to do 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, after 4pm the next day, will receive a zero. There is no grace period. All times are Michigan time.
We do not generally offer extensions. For example, we do not offer extensions due to crowded computing sites, long queue times or 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 will consider extension requests made in person and at least two weeks in advance for religious holidays or planned medical procedures. Additionally, we will consider requests for extensions due to documented, unanticipated medical or personal emergencies. If you can't see 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.
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 solution strategies 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.
Final grades will be assigned based on the distribution of earned scores. We expect the median student to receive a B or B+, and students within one standard deviation of average can expect to pass.
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, genderexpression, disability, religion, height, weight, or veteran status. Please feel free to contact us with any problem, concern, or suggestion.
We ask that all students treat each other with kindness and respect.