The purpose of this course is to study fundamentals concepts in programming languages and major tools and techniques to implement them. This includes syntax specification and informal semantic models; binding and scoping; types and type systems; control structures; data abstraction; procedural abstraction and parameter passing; higher-order functions; and memory management.
We will explore key characteristics of major programming paradigms, including their relationship to the imperative programming paradigm adopted by mainstream programming languages. Students will gain insights into the central ideas of programming languages by implementing interpreters and compilers for several small languages that incorporate salient features of various paradigms. The implementation language will be F#, a strongly typed functional programming language which is very well suited for this task.
No prior familiarity with F# or functional programming is assumed in this course. Learning F# will have the secondary effect of exposing students to functional programming. This programming paradigm differs enough from imperative programming to require a substantially different way of thinking about computation. Learning to write functional programs will provide students with a deeper understanding of programming concepts. It will also increase their ability to learn emerging new languages such as Scala, Swift, and Rust, which are multi-paradigm, or use effectively new versions of more traditional languages such as Java and C++, which increasingly incorporate functional programming aspects.
Tue and Thu, 2:00pm – 3:15pm, 427 EPB.
Office hours: Mon 3:15pm – 4:30pm, Wed 11am – 12:30pm, and by appointment.
heather-kemp + @ + uiowa.edu
Office hours: Tue 10:00am – 11:00am & Thu 8:30am – 9:30am, Fri 2:00pm – 3:00pm, and by appointment.
CS:2230 and CS:2210 and (CS:2630 or ECE:3330 or CS:2820 or ECE:3350).
Most of the information about the class, including handouts and assignments, will be available from the class web site:
We will also use Piazza, a class discussion service highly catered to getting students help fast and efficiently from classmates as well as the teaching staff:
We will use ICON for homework submissions and grade posting.
Students are expected to check both the class web site and the Piazza discussion board on a regular basis (at least every other day) for announcements regarding the course.
The required textbook is
|Programming Language Concepts by P. Sestoft. Second edition. Springer, 2017|
An electronic version of the book is available from the University Library. Additional reading materials will be made available on the course web site as needed.
You will need to use your account on the CS lab machines because they have a working installation of software tools we will use in the course. Instructions on how to access those machines, on-site or remotely, and use the installed software will be provided on the course website.
Although you are welcome to use your own computer for course work, you are responsible for installing any necessary software. We regret that will not be able to provide assistance for any problems with your own installation.
A few exercises may be given during the course of the semester, covering the material from the textbook and the lectures. These exercises are required but will not be collected or graded.
For each main topic there will be a graded homework assignment, to be done in teams of up to two people. Team members will be expected to work together and contribute equally.
There will be a small course project, also to be done in teams of up to two people.
Students in a team will be asked to submit an evaluation of how well they and their teammate performed as team members. Each evaluation is confidential and will be be incorporated into the calculation of the grade.
There will be two midterm exams and no final exam. The midterms will be during class time.
The weighting of items in grade determination will be the following:
The following cutoffs will be used to determine letter grades. In the ranges below, x stands for your total score at the end of the semester. Final scores near a cutoff will be individually considered for the next higher grade. Plus(+) and minus(-) grades will also be given; their cutoffs will be determined at the end of the semester.
|88 <= x < 100||A|
|75 <= x < 88||
|60 <= x < 75||C|
|50 <= x < 60||D|
|00 <= x < 50||F|
Grades are not curved in this course. It is theoretically possible for everyone in the class to get an A (or an F). Your final grade depends only on your own final score and not on that of others.
The University of Iowa expects students to set high academic standards for themselves and work hard towards achieving them. You can achieve true academic excellence only through dedicated work. An average workload of 6 hours a week besides class attendance should be considered the norm for this course. More effort might be needed depending on your background, predisposition and academic ambition.
Academic dishonesty will not be tolerated. In particular, under no circumstances should you pass off someone else's work as your own. This also applies to code or other material that you might find on the Internet.
Sharing solutions of graded homework (assignments and project) between teams or copying someone else's work,
including posted solutions from previous editions of the course, is not allowed.
Doing that will result in a zero on the assignment
and a report to the CS department's chair and the college.
You are allowed and encouraged to discuss with students in other teams concepts and ideas that relate to the class and the homework assignments. However, it is important to ensure that these discussions do not lead to the actual exchange of written material.
Exams: The midterm exams are individual tests. Each student must complete them without any help from others. Exam answers showing strong similarities and/or duplication will receive a fail grade and the students involved will be reported to the Department and the College.
If you are unclear about what constitutes academic dishonesty it is your responsibility to contact the instructors or consult the CLAS policy (online version). Be aware that repeated academic dishonesty offenses lead to suspension or expulsion from the University.
Communicating with the Instructors:
We welcome questions related to the course.
Students are strongly encouraged to post their class-related questions on Piazza (publicly or privately, as appropriate) rather than emailing questions to the teaching staff.
Questions sent by email will receive lower priority.
We will try to answer all questions, posted or emailed,
by the end of the following day.
We will occasionally send email announcements to all students in the class. Recall that you are responsible for all official correspondence sent to your Hawkmail address (see General CLAS Policies on electronic Communication below).
Assigned Readings: Students are expected to study all the material assigned as required readings, even if that material is not explicitly discussed in class or homework.
Additional Readings and Discussions: Students are encouraged to go over any specifically suggested readings and consult any relevant materials beyond those provided on the course's web site. They are also encouraged to discuss the course topics with their classmates. It is a genuinely helpful learning activity having to formulate one's own thoughts about the material well enough to express them to others. Attendance: Students are expected to attend all classes. Their knowledge and therefore their grade depends on it. They are responsible for all announcements and material covered during class even if they did not attend.
Extra Credit: No extra-credit assignments or tests will be given on an individual basis – although they maybe given to the whole class.
Make-up Exams: Make-up exams will be offered only if there is a serious, documented reason for not being able to take a scheduled exam, and if the request is made at least a week before the exam.
Regrading: Students thinking that a graded assignment or test has been misgraded and deserves a regrading are invited to let the instructor know. The instructor welcomes and will give full consideration to all well motivated regrading requests.