Computer Science 3MI3 - Principles of Programming Languages
2020 Course Outline

Table of Contents

1 TL;DR (Too Long, Didn't Read)

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

Mark Armstrong photo

(Digital) office/student conference hours available on request.

3.2 Teaching assistant: Habib Ghaffari-Hadigheh

Habib Ghaffari-Hadigheh

(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

  • 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

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.

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:

  1. 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:

  1. Students should know and understand:
    1. Basic concepts about integers, sets, functions, & relations.
    2. Induction and recursion.
    3. First order logic, axiomatic theories & simple proof techniques.
    4. Regular expressions & context-free grammars.
    5. Programming in imperative languages.
    6. Basic concepts of functional programming languages.
  2. Students should be able to:
    1. Produce proofs involving quantifiers and/or induction.
    2. Understand the meaning of a given axiomatic theory.
    3. Construct regular sets & context-free languages.
    4. Produce small to medium scale programs in imperative languages.
    5. Produce small scale programs in functional languages.

8.4 Course postconditions

After completion of this course:

  1. Students should know and understand:
    1. Programming in functional languages.
    2. Programming in logical languages.
    3. Formal definitions of syntax & semantics for various simple programming languages.
    4. Various abstraction & modularisation techniques employed in programming languages.
  2. Students should be able to:
    1. Reason about the design space of programming languages, in particular tradeoffs & design issues.
    2. Produce formal descriptions of syntax & semantics from informal descriptions, identifying ambiguities.
    3. Select appropriate abstraction & modularisation techniques for a given problem.
    4. 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.

Author: Mark Armstrong

Contact: armstmp@mcmaster.ca

Original date: August 2nd, 2020

Last updated: 2020-11-26 Thu 00:27

Created using Emacs 27.0.90 (Org mode 9.4)

Validate