CSCI-400 Programming Languages, Fall 2019

Course Information

Instructor

Jedidiah McClurg, Assistant Professor of CS

Teaching Assistant (TA)

Kepler Novotny

Course Overview

In previous courses, you have examined how to write programs in individual languages such as Java or C. In this class, we will take a broader view of programming languages, and study the key concepts and techniques that allow developers to implement languages such as Java or C. This will be a project-based course, and we will develop significant experience in this area, by learning how to use functional programming (specifically the Scala language) to build (over the course of the semester) a working interpreter for a non-trivial subset of JavaScript. Ultimately, the course will improve your skill as a programmer, and will deepen your understanding of how programming languages are designed and implemented.

Prerequisites

The prerequisite is CSCI-306 Software Engineering. As long as you have some programming experience (especially in Java), that should be sufficient.

Online Community and Communication

I would appreciate if all students could fill in their profile on Canvas, including a clear passport-type photo. It is extremely difficult to learn names in a class this size without student photographs.

We will use Piazza in the class. This is a great way to ask questions and communicate with the instructor and your classmates. Participation on Piazza is required, and will factor into the ``participation’’ component of the grade.

The class Piazza link is: https://piazza.com/mines/fall2019/csci400/home

I will use Piazza to communicate with the class. I also ask that if you have questions about the course, you first do a quick search on the Piazza page, to make sure your question has not already been answered there. If not, please go ahead and post your question on Piazza so that I, the TA, or another student can answer it publicly. This will help to streamline the communication.

NOTE: if you have a question you do not wish to publicize (e.g., about your grades, etc.), please create a “private post” on Piazza. Email should only be used in rare instances where use of Piazza would not be feasible.

Textbook and Other Reading Materials

NOTE: the following resources are recommended, but NOT REQUIRED. I will assign readings from these sources to supplement the lectures, but you are only responsible for the information presented in lecture.

You may be able to obtain PDF versions of these texts for low cost.

Class Notes

Class notes will be posted 1-2 days after the lecture.

There is a Github organization for the class:

https://github.com/mines-csci400

Grading

The following percentages show how final grades will be calculated. I will not perform any rounding on the scores (e.g., a score of 92.999 will not be rounded up to 93). I may or may not curve the overall grades, depending on how well the class performs overall, however, I expect each student to work hard, and not rely on the curve!

item percentage
labs 50%
homeworks 10%
exam 1 15%
exam 2 15%
participation 10%

Letter grades will be calculated based on the following intervals:

range grade
[93,100] A
[90,93) A-
[87,90) B+
[83,87) B
[80,83) B-
[77,80) C+
[73,77) C
[70,73) C-
[67,70) D+
[63,67) D
[60,63) D-
[0,60) F

Attendance

Class attendance is not required, but is highly recommended. If attendence drops beyond a reasonable threshold, I may implement a less lenient policy regarding attendance.

Collaboration

We will use GitHub for collaboration. We will use private team-specific repositories to submit assignments. More details TBA.

Respectfulness and Academic Honesty

I expect every student to show respect to me and the rest of the class. This course is preparation for your future career, so make sure you are behaving with the same level of professionalism that would be expected at a future full-time position. My general rule of thumb is: informal is okay, but disrespectful is not.

Plagiarism/cheating is NOT acceptable, and will be met with quick and harsh penalties. I do not want to see any academic dishonesty in this class!

Accommodation

The Colorado School of Mines is committed to ensuring the full participation of all students in its programs, including students with disabilities. If you anticipate or experience any barriers to learning in this course, please feel welcome to discuss your concerns with me. Students with disabilities may also wish to contact Disability Support Services (DSS) to discuss options to removing barriers in this course, including how to register and request official accommodations. Please visit their website at https://disabilities.mines.edu for contact and additional information. If you have already been approved for accommodations through DSS, please meet with me at your earliest convenience so we can discuss your needs in this course.

Schedule

This schedule is tentative, and is subject to change.

week date topic lecture reading / notes homework lab
1 Aug 20 functional programming intro to functional programming, git, github Git Cheat Sheet, lecture00    
  Aug 22 functional programming Scala / sbt crash course Scala Exercises, lecture01    
2 Aug 27 functional programming Scala / sbt crash course Scastie, Programming in Scala, lecture02 hw 1 assigned  
  Aug 29 functional programming inductive definitions, recursion lecture03 hw 1 due  
3 Sep 3 expression evaluation abstract data types, pattern matching lecture04 hw 2 assigned lab 1 assigned
  Sep 5 expression evaluation syntax, grammars Scala Spec, lecture05    
4 Sep 10 no class (career day)     hw 2 due, hw 3 assigned  
  Sep 12 expression evaluation lexing / parsing Lexing, Parsing, Parser Combinators, lecture06    
5 Sep 17 expression evaluation parser combinators Semantics of PL ch 1-2.3 hw 3 due  
  Sep 19 expression evaluation (work on homework/lab)     lab 1 due
6 Sep 24 simple interpreter structural induction lecture07 hw 4 assigned lab 2 assigned
  Sep 26 simple interpreter operational semantics, JavaScript / node.js crash course lecture08    
7 Oct 1 simple interpreter big-step semantics lecture09 hw 4 due, hw 5 assigned  
  Oct 3 simple interpreter small-step semantics lecture10    
8 Oct 8 simple interpreter (exam review)   hw 5 due  
  Oct 10 no class (inclement weather)       lab 2 due
9 Oct 15 no class (holiday)       lab 3 assigned
  Oct 17 midterm exam (in class)        
10 Oct 22 higher-order functions scoping, binding lecture11    
  Oct 24 higher-order functions scoping, binding lecture12    
11 Oct 29 no class (inclement weather)        
  Oct 31 higher-order functions recursion lecture13 hw 6 assigned  
12 Nov 5 higher-order functions closures lecture14   lab 3 due, lab 4 assigned
  Nov 7 guest lecture Saeid Tizpaz Niari on software confidentiality (a language-based perspective)   hw 6 due  
13 Nov 12 no class        
  Nov 14 higher-order functions currying, monads lecture15    
14 Nov 19 type checking typing rules lecture16 hw 7 assigned  
  Nov 21 type checking type inference Hindley-Milner, lecture17   lab 4 due
15 Nov 26 no class (inclement weather)       lab 5 assigned
  Nov 28 no class (holiday)        
16 Dec 3 destructive update mutable variables, references lecture18 hw 7 due lab 5 due on Dec 4 (accepted up to 8 days late without penalty)
  Dec 5 no class (study for finals)        
17 Dec 10 no class (final exam week)        
  Dec 12 no class (final exam week)        

Lab Topics

There will be 5 labs. Details TBA.

Homework

There will be approximately 1 homework per week, to help encourage you to keep up-to-date on the course material. Details TBA.

Acknowledgements

This course is based on Bor-Yuh Evan Chang’s fantastic Programming Languages course. Special thanks to Evan for his advice and assistance.