Programming Languages
Lecturer:
Prof. Daniel R. Schlegel, 395 Shineman Center, daniel.schlegel@oswego.edu
Office hours: Tuesday 3-4PM, Wednesday 9-10AM, Friday 2-3PM and by appointment.
Section 800: MWF 11:30am-12:25pm, Shineman 174
Course Description:
This course introduces programming language concepts including design, syntax, semantics, pragmatics, implementation, and evaluation. Students will become familiar with the different categories of languages, including procedural, functional, object-oriented, logic, and concurrent programming paradigms. Theoretical topics will be covered in class, and students will complete projects on their own in several languages. The intention is that after this course the student will be able to quickly begin using new languages simply from an understanding of the syntax and a list of concepts used in that language.
Textbook:
Scott, Michael L., Programming Language Pragmatics 4e. Morgan Kaufmann, 2016
Useful Resources:
C/C++
C Tutorial at tutorialspoint
C++ Tutorial at cplusplus.com
C FAQ
Clojure
Clojure for the Brave and True
Reference Materials at Clojure.org
Clojure API
ClojureDocs
Haskell
Learn You a Haskell for Great Good
Haskell 98 Language Report
A Gentle Introduction to Haskell
All About Monads @ HaskellWiki
Using the GHCi Debugger
UVA’s CS1501 Course Page
Prolog
Using the SWI-Prolog REPL
SWI Prolog Reference Manual
Clocksin, W.F, and C.S. Mellish, Programming in Prolog 5e, 2003 – Chapter 1 (see Blackboard)
Prolog Tutorial
Python
Python 2.7 Tutorial
Python 3 Tutorial
Attendance Policy and Classroom Etiquette:
As per college policy, attendance in all sessions is obligatory. If you cannot attend a class meeting due to religious, athletic, health related circumstance, or circumstance of particular hardship, please notify me in advance via email. Please be ready to present proof, if necessary. Cell phones shouldn’t be used during lecture, and laptops should only be used for taking notes (I don’t recommend this). If use of any electronics becomes districting to other students I reserve the right to discontinue the allowance of their use.
Assignments:
All assignments will be completed with a partner of your choosing. If you cannot find a partner, let me know and I will match you up. There will be 5 assignments, due typically two weeks after assignment. Late assignments will not be accepted and will be given a grade of 0 for both students. Submission will be via Blackboard.
Grading:
It is expected that each person participate during each class. As discussed before, attendance is required. Each assignment task will be assigned a point value (generally some multiple of 3 depending on difficulty), where the following scheme will be used in grading it:
0 – Did not attempt / No serious attempt
1 – Mostly incorrect solution
2 – Somewhat incorrect solution
3 – Perfect solution
If the problem is a multiple of 3, then intermediate scores will be given as appropriate. The total points received on all assignments will then be summed and divided by the points possible and scaled as appropriate according to the percentages given below. Exams will be graded in the same way as the assignments.
Assignments | 60% |
Midterm Exam | 20% |
Final Exam | 20% |
The default grading for the course will be along the university’s standard grading curve:
A: 93-100 | C+: 77-79 |
A-: 90-92 | C: 73-76 |
B+: 87-89 | C-: 70-72 |
B: 83-86 | D+: 67-69 |
B-: 80-82 | D: 60-66 |
E: 0-59 |
A more generous curve may be used, but should not be expected.
Schedule/Outline:
During the semester we aim to cover the following topics:
Language Specification and Implementation
Syntax, Semantics, and Pragmatics
Names, Scope and Binding
Control Flow
Type Systems and Type Safety
Subroutines
Language Paradigms (including imperative, logic, functional, scripting, concurrent, and object oriented)
The course schedule as follows is only a draft. It is expected to change, but changes will be announced in class. Lecture slides/notes will be maintained on Blackboard.
Week | Monday | Wednesday | Friday |
---|---|---|---|
1 | 1/23 First day of class Overview Readings: PLP 1.1-1.5 | 1/25 Why Study PLs?; Language Evaluation Criteria Readings: PLP 2.1-2.3 | 1/27 Syntax, BNF |
2 | 1/30 Syntax, C BNF Grammar Readings: Start looking at C tutorial | 2/1 Add deadline C Operator Precedence; C Pointers Assignment 1 - Due 2/15 | 2/3 Bindings and Allocation C Allocation Example Readings: PLP 3.1-3.2 |
3 | 2/6 Heap Allocation; Garbage Collection Readings: PLP pp. 384-398 | 2/8 Scoping Static vs. Dynamic Scope Examples Readings: PLP 3.3, 3.5 | 2/10 Drop deadline Declaration Scope Declaration Scope Examples |
4 | 2/13 Modules | 2/15 Dynamic Scope; Aliases Readings: PLP 11.1-11.3, 11.5-11.8 | 2/17 Clojure Introduction |
5 | 2/20 Functional Programming & Lambda Calculus Clojure Substitute On your own: Monty Hall Simulation in Clojure Assignment 2 - Due 3/6 | 2/22 Class Cancelled Readings: PLP Chapter 7 | 2/24 Types Readings: Read about Monads in Haskell in the resources above. |
6 | 2/27 Types Optional Type | 3/1 Type Checking | 3/3 Type Conversion Type Checking Haskell Converting Numbers Example |
7 | 3/6 Assignment 2 Review | 3/8 Assignment 3 - Due Midterm Study Guide | 3/10 Midterm Exam |
3/13 Spring recess - no class | 3/15 Spring recess - no class | 3/17 Spring recess - no class |
|
8 | 3/20 Natural Deduction Mid-semester feedback survey on Blackboard, live until 3/24 11:59PM | 3/22 Propositions as Types by Philip Wadler Readings: PLP Chapter 12, including the supplementary material. | 3/24 Prolog / Logic Programming Ancestor Example |
9 | 3/27 Prolog / Logic Programming | 3/29 Prolog / Logic Programming | 3/31 Prolog / Logic Programming |
10 | 4/3 Object Oriented Programming Kinds of Functions in Python Assignment 4 - Due | 4/5 Quest - no class | 4/7 Kinds of Functions in Python, continued. |
11 | 4/10 Multiple Inheritance | 4/12 Method Resolution Order Mixins and Traits | 4/14 Good Friday - no class |
12 | 4/17 Scripting Languages Examples Readings: PLP Chapter 14 | 4/19 Class cancelled, Dan @ ABET Readings in lieu of class: Closures in Ruby; Domain Specific Languages: An Introductory Example | 4/21 Concurrency (DL lecturing, Dan @ ABET) |
13 | 4/24 Domain Specific Languages Assignment 5 - Due 5/12 | 4/26 Generics/Templates | 4/28 Module Systems JSR376 - Java Platform Module System The ML Module System A Crash Course on ML Modules The Definition of Standard ML |
14 | 5/1 The Turing Completeness of Programming Languages Final Exam Study Guide | 5/3 Guy Steele & Richard Gabriel - 50 in 50 | 5/5 Last day of class |
15 | 5/10 Final Exam @ 10:30AM-12:30PM - Shineman 174 |
Academic Integrity:
While it is acceptable to discuss general approaches with your fellow students, the work you turn in must be your own. If you have any problems doing the assignments, consult the instructor. Please be sure to read the webpage, “Academic Integrity“, which spells out all the details of this, and related policies. See my page on plagiarism for an explanation of what I consider cheating.
Disability Statement:
If you have a disabling condition, which may interfere with your ability to successfully complete this course, please contact the Office of Disability Services at dss@oswego.edu and x3358.