Computer Science 3MI3 - Principles of Programming Languages
2020 Course Outline
Table of Contents
1 TL;DR (Too Long, Didn't Read)
At the very least, please review these sections of the outline.
2 The purpose of an outline
“A course outline sets the expectations for students and what they can expect in terms of the course experience they will receive, the format in which the course will be delivered and the knowledge and skills that can be gained. The outline introduces the course and the instructor and sets out the expectations of the instructor so that students are aware of how they will learn, what level of participation will be expected and how they will be assessed.”
3 Course staff
3.1 Instructor: Mark Armstrong
- Email: armstmp@mcmaster.ca
- Website: https://armkeh.github.io
(Digital) office/student conference hours available on request.
3.2 Teaching assistant: Habib Ghaffari-Hadigheh
- Email: ghaffh1@mcmaster.ca
- Website: https://ghhabib.me/
(Digital) office/student conference hours available on request.
4 Schedule
Mon | Tues | Wed | Thu | Fri | Sat | Sun | |
9:30 | Tutorial 2 | ||||||
10:30 | |||||||
11:30 | Lecture | Lecture | |||||
12:30 | Tutorial 1 | ||||||
13:30 | Lecture | ||||||
EOD |
|
|
|
|
Homework released |
|
Homework due |
4.1 Lecture recordings
Lectures and tutorials will be made available as recordings shortly after said lectures and tutorials, via Microsoft Stream (or if Zoom is used, via Zoom).
4.2 Homework due dates
This course will have weekly homeworks, as described in Grading.
Homework will be released each Friday by end of day and will be due the Sunday nine days later by end of day, unless a delay is announced on the course homepage, and except for the weekends surrounding the midterm recess —there will be a single homework due the Monday following the recess instead.
4.3 Assignment due dates
This course will have three assignments, as described in Grading.
As of the beginning of the course, the assignments are planned to be due on
October 7th,- ammended September 27th; the new due date is October 21st
November 11th,- ammended November 9th; the new due date is
November 25th - ammended once more on November 25th; the final due date is November 29th
and
- ammended November 9th; the new due date is
December 16th.- ammended November 19th; the new due date is December 18th.
Any changes to these dates will be announced on the course homepage. Also see Accomodations for SAS and conflicts with other courses; in particular, we will reevaluate the final assignment due date once the exams schedule is released, based on the exam dates of other third year computer science courses.
5 Administration tools
5.1 The tools
This course will be administered via a combination of
- a “team” on the CAS departmental Microsoft Teams,
- —Zoom meetings may be used if there is a problem with Teams; any such change will be announced on the homepage—
- the course homepage,
- a Github repository
of the course content, from which
the homepage is hosted as a
github.io
website, - a repository for each student on the McMaster CAS GitLab server, and
- communications via McMaster email addresses.
Specifically,
- Teams
- will be used for live lectures/tutorials,
lecture/tutorial recordings,
and preferred for discussions relevant to the whole
(or at least many members of) the class,
- Zoom
- may be used for live lectures/tutorials if there are problems with Teams,
- the homepage
- will be used for announcements and convenient access to notes and homework/assignments,
- the Github repository
- will be used to host the course homepage and content, and allow students to easily see version changes to content,
- the Gitlab repository for each student
- will be used for homework and assignment submissions and grade distribution, and
- McMaster email addresses
- will be used for private communications with students.
An Avenue to Learn course has been created for this course for the sake of directing students to the course homepage and entering homework/assignment deadlines in a calendar. No course content will be uploaded to Avenue to Learn, and attempts to communicate with staff on that platform may go unnoticed and unanswered.
5.2 Your responsibilities regarding course administration tools
It is the student's responsibility
- to ensure they have an account on the McMaster CAS GitLab server and the CAS Microsoft Teams team
- to be aware of the information on the course's homepage and
- to check the homepage, their course GitLab repository, the Microsoft Teams team for the course and their email regularly for announcements and changes.
It is not assumed that students follow the Github repo, but it is a good practice to stay informed of any and all changes to content.
6 Communicating with course staff
To communicate with course staff reliably, you should choose the most appropriate means from the below.
- “Mention” the course staff member in a relevant channel on
the Microsoft Teams team.
- This is appropriate for questions which may interest many students.
- Private message the course staff member on Microsoft Teams.
- This is appropriate for very quick questions.
- Email the course staff member using the email listed under Course staff.
- This is appropriate for longer or more detailed questions.
Note that outside of class hours, course staff may not be available for immediate replies to your communication. Permit up to a business day for response before following up on urgent issues, and up to two business days for non-urgent issues.
6.1 Asking well-posed questions
While there are “no stupid questions”, and course staff are happy to help with any questions regarding course material, it is expected that when students ask questions they will take the time to ask well-posed questions as described in these resources.
- The computer science StackOverflow guide to asking good questions.
- Asking Technical Questions by Dr. Clarkson of Cornell University.
- How to Ask Questions The Smart Way by Eric Steven Raymond and Rick Moen.
In summary, when asking questions, always take the time to do your own research first, and describe this research to the staff.
- For questions regarding course administration, always check the homepage and the outline first, and include which sections you have checked in your question.
- For questions regarding tools, including installation and usage, always search online first, and list the resources consulted in your question.
- For questions regarding course material, always reference the portions of the notes you have checked for your answers.
Additionally, any time that code is being shared, students are asked to share plain text or markup code snippets (in the case of Microsoft Teams, using the code snippet formatting option) rather than sharing screenshots.
Failure to follow these practices may result in terse answers from course staff, such as “Please check the course outline.”
7 Resources
The course notes are intended to be self contained, but the recommended texts and several of the available resources are available free of charge, so you are encouraged to investigate them.
The primary recommended (not required) text is
- Pierce 2002 – Types and Programming Languages
- Available through the McMaster library on ProQuest Ebook Central. You may view the whole text online, download up to 65 pages per day as a PDF, or borrow the whole text using Adobe Digital Editions.
- Available for sale through the Campus Store.
ACM Digital Library citation:
Benjamin C. Pierce. 2002. Types and Programming Languages (1st. ed.). The MIT Press.
From its abstract:
A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of type systems – and of programming languages from a type-theoretic perspective – has important applications in software engineering, language design, high-performance compilers, and security. This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages. The approach is pragmatic and operational; each new concept is motivated by programming examples and the more theoretical sections are driven by the needs of implementations
7.1 Additional textbooks
7.1.1 “SICP”; “The Wizard Book”
ACM Digital Library citation:
Harold Abelson and Gerald J. Sussman. 1996. Structure and Interpretation of Computer Programs (2nd ed.). MIT Press, Cambridge, MA, USA.
From its abstract:
With an analytical and rigorous approach to problem solving and programming techniques,this book is oriented toward engineering. Structure and Interpretation of Computer Programs emphasizes the central role played by different approaches to dealing with time in computational models. Its unique approach makes it appropriate for an introduction to computer science courses, as well as programming languages and program design.
html
available through
the MIT press
and pdf
available through
GitHub.
7.1.2 “Van Roy & Haridi”
ACM Digital Library citation:
Peter Van Roy and Seif Haridi. 2004. Concepts, Techniques, and Models of Computer Programming (1st ed.). The MIT Press.
From its abstract:
The book presents all major programming paradigms in a uniform framework that shows their deep relationships and how and where to use them together.
pdf
available through
CiteSeerX.
7.1.3 “Dowek”
ACM Digital Library citation:
Gilles Dowek. 2009. Principles of Programming Languages. Springer Publishing Company, Incorporated.
From its abstract:
This book is an introduction to the principles around which these languages are organised: imperative constructions, functional constructions, reference, dynamic data types, objects and more.
pdf
available through
the McMaster library.
7.1.4 “Sebesta”
ACM Digital Library citation:
Robert W. Sebesta. 2012. Concepts of Programming Languages (10th ed.). Pearson.
An encyclopedic text on the construction of programming languages.
7.1.5 “Fernández”
ACM Digital Library citation:
- Fernandez. 2004.
Programming Languages and Operational Semantics: An Introduction. King's College Publications.
An introductory text covering primarily operational semantics of a simple imperative and a simple functional language.
pdf
available through
the McMaster library.
8 Course description
Here we provide both formal and informal descriptions and goals for this course.
8.1 Calendar description
Design space of programming languages; abstraction and modularization concepts and mechanisms; programming in non-procedural (functional and logic) paradigms; introduction to programming language semantics.
8.2 Informal objectives
- Investigate a number of programming languages
which exemplify different paradigms.
- A relatively shallow but comprehensive survey.
- Focusing on general-purpose languages.
- Formally describe programming language syntax and semantics.
- An application of theory learned previously.
- Apply various abstraction and modularisation techniques,
- Learning how to apply them and to which situations they are best applied.
8.3 Course preconditions
Before beginning this course:
- Students should know and understand:
- Basic concepts about integers, sets, functions, & relations.
- Induction and recursion.
- First order logic, axiomatic theories & simple proof techniques.
- Regular expressions & context-free grammars.
- Programming in imperative languages.
- Basic concepts of functional programming languages.
- Students should be able to:
- Produce proofs involving quantifiers and/or induction.
- Understand the meaning of a given axiomatic theory.
- Construct regular sets & context-free languages.
- Produce small to medium scale programs in imperative languages.
- Produce small scale programs in functional languages.
8.4 Course postconditions
After completion of this course:
- Students should know and understand:
- Programming in functional languages.
- Programming in logical languages.
- Formal definitions of syntax & semantics for various simple programming languages.
- Various abstraction & modularisation techniques employed in programming languages.
- Students should be able to:
- Reason about the design space of programming languages, in particular tradeoffs & design issues.
- Produce formal descriptions of syntax & semantics from informal descriptions, identifying ambiguities.
- Select appropriate abstraction & modularisation techniques for a given problem.
- Produce tools for domain-specific languages in imperative, functional and logical languages.
8.5 Formal rubric for the course
Topic | Below | Marginal | Meets | Exceeds |
Familiarity with various programming languages |
Shows some competence in procedural languages, but not languages from other paradigms |
Shows competence in procedural languages and limited competence in languages from other paradigms |
Achieves competence with the basic usage of various languages |
Achieves competence with intermediate usage of various languages |
Ability to identify and make use of abstraction, modularisation constructs |
Cannot consistently identify such constructs |
Identifies such constructs, but does not consistently make use of them when programming |
Identifies such constructs and shows some ability to make use of them when programming |
Identifies sucj constructs and shows mastery of them when programming |
Ability to comprehend and produce formal descriptions of PL syntax |
Unable or rarely able to comprehend given grammars; does not identify ambiguity or precedence rules |
Comprehends given grammars, but produces grammars which are ambiguous or which do not correctly specify precedence |
Makes only minor errors regarding precedence or ambiguity when reading or producing grammars |
Consistently fully understands given grammars and produces correct grammars. |
Ability to comprehend and produce operational semantics for simple PLs |
Rarely or never comprehends such semantic descriptions |
Usually comprehends such semantic descriptions, but cannot consistently produce them |
Comprehends such semantic descriptions and produces them with only minor errors |
Comprehends such semantic descriptions and produces them without errors |
9 Grading
The graded work for this course consists of
- weekly short homeworks, which may include
- short written answers and
- relatively small programming tasks.
- three larger programming assignments
- involving several “medium size” programming tasks each.
There will not be midterm or final examinations for this course.
Portions of your grade for both the homeworks and the assignments may be calculated by automated unit tests. A limited sample of such unit tests will be provided before the deadline, at least for the assignments.
Each student's final grade will be calculated using the scheme
Homework | 25% |
Assignment 1 | 20% |
Assignment 2 | 25% |
Assignment 3 | 30% |
9.1 Accomodations for SAS and conflicts with other courses
If you require accommodation regarding course work deadlines, either with regards to SAS or with regards to course work in other courses, please contact Mark no later than two weeks before the deadline of the relevant course work deadline.
9.2 Missed work
A student who would like to receive accommodation
for missed academic work due to an absence
needs to complete a McMaster Student Absence Form (MSAF) on-line at
http://www.mcmaster.ca/msaf/.
When the MSAF tool asks you for the party
who should receive your request for accommodation,
enter armstmp@mcmaster.ca
.
MSAFs sent to any other email address will be ignored.
Students are reminded that they are expected to contact the instructor after filling out an MSAF.
For this course, the accomodation for any missed work will be a 4 day extension.
The missed work must still be submitted.
10 Approved advisory statements
These two pages cover topics and policies related to undergraduate course management. Please review them.