Students entering this class will have prior experience writing substantial computer programs in at least one programming language (likely an imperative, object-oriented one), and should also have a general understanding of how high level programming languages are ultimately executed on a modern computer -- i.e., through the process of being translated into machine-level instructions, which are then fetched, decoded, and executed on the CPU.
Students may even have some grasp on the theoretical notion that all programming languages are, computationally speaking, equivalent.
But are they, really?
It turns out that, in practice, different languages are good (and not so good) at different things. Learning different programming languages opens up your mind in a similar way that learning different natural languages can, and it behooves any professional programmer to learn about all the facets of what is arguably their most important tool.
To this end, we will rigorously dissect, categorize, analyze, and reassemble programming languages in this class, so that we can fully understand how they tick, what differentiates them, and how to choose the right one for the job.
In addition to using -- i.e., being a consumer* of programming languages -- there is also much to be learned and gained from knowing how to modify and create your own programming languages.
With the above as our aim, we will:
Use a simple but extraordinarily malleable programming language -- Racket -- to learn about different programming language constructs and ideas.
Learn about different methods of language specification, focusing on semantics and verification.
Analyze how programs are interpreted, compiled, represented, evaluated, and optimized.
Implement interpreters for a handful of different languages.
The list of topics we will cover this semester includes:
Here are the official class outcomes -- i.e., upon successful completion of this class, students should be able to:
Grades in the class are broken down as follows:
The grade scale is {A > 90%; B > 80%; C > 70%; D > 60%; E < 60%}.
There will be 5-7 assignments, some of which will be machine problems (i.e., programming assignments). Written assignment submissions must be neatly written or typed up and submitted via Blackboard. Machine problems will be submitted via a shared, private repository on GitHub.
Each student starts the semester with a 7-day late pool, which can be distributed however they please (one day at a time) across assignments. E.g., a student may choose to submit the first assignment 1 day late and the second assignment 2 days late, at which point they still have 4 late days to apply to later assignment(s). Once a student is out of late days, late assignments will not be accepted for credit. Late days may not be used after the last day of class.
Reasonable accommodations will be made for students with documented disabilities. In order to receive accommodations, students must obtain a letter of accommodation from the Center for Disability Resources and make an appointment to speak with me as soon as possible. The Center for Disability Resources is located in the Life Sciences Building, room 218, 312-567-5744 or disabilities@iit.edu.
Illinois Tech prohibits all sexual harassment, sexual misconduct, and gender discrimination by any member of our community. This includes harassment among students, staff, or faculty. Sexual harassment of a student by a faculty member or sexual harassment of an employee by a supervisor is particularly serious. Such conduct may easily create an intimidating, hostile, or offensive environment.
Illinois Tech encourages anyone experiencing sexual harassment or sexual misconduct to speak with the Office of Title IX Compliance for information on support options and the resolution process.
You can report sexual harassment electronically at iit.edu/incidentreport, which may be completed anonymously. You may additionally report by contacting the Title IX Coordinator, Virginia Foster at foster@iit.edu or the Deputy Title IX Coordinator at eespeland@iit.edu.
For confidential support, you may reach Illinois Tech’s Confidential Advisor at (773) 907-1062. You can also contact a licensed practitioner in Illinois Tech’s Student Health and Wellness Center at student.health@iit.edu or (312)567-7550
For a comprehensive list of resources regarding counseling services, medical assistance, legal assistance and visa and immigration services, you can visit the Office of Title IX Compliance website at https://www.iit.edu/title-ix/resources.