Mon | 2:00pm | - | 3:00pm |
Mon | 9:00pm | - | 10:00pm |
Wed | 12:00pm | - | 1:00pm |
Fri | 9:00am | - | 10:00am |
Programming Languages: Build, Prove, and Compare is a challenging book. I have chosen it because the interpreter project at the core of this book is first class (no pun intended,) and I know that together we can make our way through it. A graduate-level course would cover the entire text; we will cover chapter 1-3, 6, and 10; we may swing back for chapters 4-5 if time allows. I will assign many of the problems contained in BPC, and others may make excellent exam questions.
For software, I recommend the standard UNIX toolchain, although many
POSIX-compliant C compilers will probably do. Later in the term,
we will require an ML compiler.
The
Marquette Systems
Lab Linux hosts will be the official platform for submitting
work through the turnin
system to TA-Bot
for evaluation.
Upon completing this course, students will be able to:
For those of you curious about the inner workings of college-level curricula, COSC 3410 serves an essential role in supporting Student Outcomes as defined by the ABET accreditation of the Computer Science major at Marquette, including:
It also meets ABET CAC criteria for required concepts of programming languages, and contributes to the breadth requirement for languages and platforms.
This course will correspond to the following components in the Joint ACM / IEEE Computer Society Taskforce report, Computer Science Curricula 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science:
Knowledge Unit | Core-Tier 1 Hours | Core-Tier 2 Hours | Includes Electives |
---|---|---|---|
PL/Functional Programming | 3 | 4 | - |
PL/Basic Type Systems | 1 | 4 | - |
PL/Program Representation | 1 | - | |
PL/Language Translation | 3 | - | |
PL/Syntax Analysis | Y | ||
PL/Compiler Semantic Analysis | Y | ||
PL/Type Systems | Y | ||
PL/Formal Semantics | Y |
Projects | 50% | Weekly individual or team projects and homework assignments |
Reading Quizzes | 5% | Quizzes on the textbook readings |
Midterm Exam | 30% | Midterm exams (3) |
Final Exam | 15% | Final exam |
Grades will be assigned using the standard formula: A: [93, 100]; A-: [90, 93); B+: [86, 90); B: [82, 86); B-: [78, 82); C+: [74, 78); C: [70, 74); C-: [66, 70); D+: [62, 66); D: [58, 62); F: [0, 58)
At the instructor's discretion, grades may be "curved" up; grades will not be curved down.
Grades will be routinely posted in the gradebook on the course D2L site, as they become available.
COSC 3410 is cross-listed with COSC 6931, an advanced version of the course intended for students in our doctoral program.
Students registered for COSC 6931 will complete all of the same coursework as 3410 students, but shall complete the group programming projects individually. In addition, they will have an extra question on each of the midterm and final exams.
Student attendance will not be explicitly tracked in this course, and will not directly impact student grades. However, students who routinely miss class discussions or lectures should expect to be unprepared to complete the assignments and exams upon which grades so heavily depend. In short, I don't bother with attendance bean-counting because students who cut class usually fail themselves out of the course before I would need to take any action. Make good decisions.
If you know you will be missing class for a legitimate reason, I appreciate a heads-up, but in accordance with Marquette University Attendance Policies, neither require nor accept documented excuses, except in those specific cases detailed in the policy above. Please try to have a peer in the class take notes in your absence, and get any assignments in ahead of the deadline.
The size and structure of this course will not normally allow me to accept late work under any circumstances. There are enough opportunities for points in the course for most students to miss a few without severe consequences for their grades.
All students are expected to abide by Marquette University's Policy on Academic Integrity, and we will proceed under the assumption that everyone has committed themselves to the University's Honor Pledge:
I recognize the importance of personal integrity in all aspects of life and work. I commit myself to truthfulness, honor, and responsibility, by which I earn the respect of others. I support the development of good character, and commit myself to uphold the highest standards of academic integrity as an important aspect of personal integrity. My commitment obliges me to conduct myself according to the Marquette University Honor Code.
The Honor Code has particular implications for computer scientists and engineers, as well as computing professors, whose course work is so readily duplicated and shared in our modern digital world.
For my part, I will strive to ensure that your assignments and exams are engaging, challenging, and worth your investment in time and energy. For your part, I expect you will work hard, strive to learn, and present your work with honesty and integrity.
There will be many opportunities for you to collaborate with your peers in this course, and I strongly encourage you both to seek help when you are stuck, and to share your knowledge with your peers when you have achieved understanding. Problems will only occur if you falsely claim work as your own when it is not, or collaborate when an exam or assignment has been specified to be individual work.
In the unlikely event of an academic integrity violation in this course, Marquette University's Procedures For Incidents of Academic Dishonesty will be closely followed.
Past experience has demonstrated that current Large Language Models, such as ChatGPT and CoPilot, are totally capable of generating at least partially correct code for many of our assignments, even in more arcane languages, like ML and Scheme.
As noted in the Academic Integrity section above, it is a violation of University policy to claim A/I-generated output as your own. I expect many of you will choose to leverage LLMs when coding in this course. The first admonishment is that you must clearly note any passages that are not your own with comment blocks that properly attribute any sources you copied from. In general in our field, it is never OK to paste your name on submitted work that is actually chopped up / remixed content regurgitated by an LLM and based upon innumeramble, anonymous training data sources.
More importantly, students who rely consistently on LLM support for their coding will find that they are not actually fluent in the languages, structures and concepts that will be tested in the exams. There's a big difference between being able to read LLM output and actually producing your own code on a blank page in an exam situation. Know the difference, and practice accordingly. Most of the time, that's gonna mean writing and debugging your own code for the projects.
Week | Topics | Readings | Assignments |
---|---|---|---|
01 | Impcore, ASTs, Environments | Ch 1.1-1.4 | Project #1 - Impcore |
02 | Operational Semantics, Interpreters | Ch 1.5-1.6 | Project #2 - Impcore Interpreter |
03 | Proofs and Metatheory; μScheme | Ch 1.7-1.9, 2.1 | |
04 | S-Expressions, Let*, Functions | Ch 2.2-2.7 | Project #3 - Impcore Theory |
05 | Higher-order Functions | Ch 2.8-2.15 | Project #4 - μScheme |
06 | μScheme Interpreter in ML | Ch 5 | Project #5 - μScheme Interpreter |
07 | Types | Ch 6.1-6.2 | Project #6 - μScheme in ML |
08 | Type Soundness and Extensions | Ch 6.3-6.5 | |
09 | Polymorphic Types | Ch 6.6-6.8 | |
10 | Objects, Smalltalk | Ch 10.1-10.3 | Project #7 - Typechecking |
11 | μSmalltalk | Ch 10.4-10.9 | Project #8 - μSmalltalk |
12 | Operational Semantics and Interpreter | Ch 10.10-10.14 | |
13 | μScheme+ | Ch 3.1-3.5 | Project #9 - μSmalltalk Interpreter |
14 | Automatic Memory Management | Ch 3.6-3.8, 4.1-4.3 | Thanksgiving Break |
15 | Garbage Collection Techniques | Ch 4.4-4.10 | Project #10 - History of CS |
16 | Final Exams |
[Revised 2025 Aug 22 16:00 DWB]