Programming Languages
Updates as of 3/14/20 HERE and also (in less deail) in RED below.
Lecturer:
Prof. Daniel R. Schlegel, 464 Shineman Center, daniel.schlegel@oswego.edu
Office/Lab hours: Monday: M 3:00-4:00pm; T: 3:00-4:00pm; Th: 2:30-3:30pm; and by appointment on Blackboard Collaborate. Feel free to email any time to schedule a meeting!
Section 810: MWF 11:30am-12:25pm, Shineman 170 on Blackboard Collaborate
Teaching Assistant:
Nicolas Van Kempen
Office Hours: Monday 1-3pm, Tuesday: 11-am-12pm, Wednesday: 2-4pm, Thursday 2:30-3:30pm in 425 Shineman on Blackboard Collaborate
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.
Course Objectives:
To write programs in each of several languages primarily supporting different approaches to programming
To write programs to process some representation of code for some purpose, such as an interpreter, an expression optimizer, or a documentation generator
To use the specifications of a given language to determine the syntax and semantics of supported constructions
To explain and follow the rules governing the use of a given type in a given language
To obtain the effects of constructions of one language in other languages
To identify coding errors that lead to insecure programs in non-type-safe languages
To choose among language-supported approaches to concurrency in a given context, including data-parallelism, message-passing, and explicit threads with shared mutable state
Textbooks:
Required: Scott, Michael L., Programming Language Pragmatics 4e. Morgan Kaufmann, 2016
Recommended: Tate, Bruce, Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages. Pragmatic Bookshelf, 2010
Free Online: Slonneger, Kenneth and Kurtz, Barry L., Syntax and Semantics of Programming Languages. Addison Wesley, 1995
Useful Resources:
C
C Tutorial at tutorialspoint
C FAQ
C Language at cppreference
Advanced C Programming on Lynda.com
Clojure
Clojure for the Brave and True
Reference Materials at Clojure.org
Clojure – Getting Started
Clojure API
ClojureDocs
Clojure on Lynda.com
Scala
Scala Tutorials
Scala for Java Programmers
Scala on Lynda.com
Prolog
Using the SWI-Prolog REPL
SWI Prolog Reference Manual
Learn Prolog Now! Online Text
Prolog Tutorial
Python
Python 3 Tutorial
Moving to Python from Other Languages
Python Projects on Lynda.com (includes Eclipse PyDev setup tutorial)
Attendance and Participation:
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. It is expected that each person actively engage in each class session. Should you miss a session, some notes and sample programs will be uploaded to Blackboard. Please try to attend office hours or use the Course Room to discuss with other students to obtain more complete notes.
Classroom Etiquette:
A positive learning environment relies upon creating an atmosphere where all students feel welcome. Classroom discussion is meant to allow us to hear a variety of viewpoints. This can only happen if we respect each other and our differences. Hostility and disrespectful behavior is not acceptable.
Cell phones and headphones should not be out or used during lecture, and laptops should only be used for taking notes (I don’t recommend this). If use of any electronics becomes distracting to other students I reserve the right to discontinue the allowance of their use.
Grading:
Grades will be comprised of projects, micro-projects, progress reports, and exams. A point-based system will be used, where each graded artifact will be assigned a point value and you can simply sum the points to determine your grade.
Assessment | Points |
---|---|
Projects (5) | 550 |
Micro-Projects (5) | 100 |
Progress Reports (5) | 50 |
Midterm Exam | 100 |
Final Exam | 200 |
Total | 1000 |
The default grading for the course will be along the university’s standard grading curve:
Letter: Points | Letter: Points |
---|---|
A: 930-1000 | C+: 770-790 |
A-: 900-920 | C: 730-760 |
B+: 870-890 | C-: 700-720 |
B: 830-860 | D+: 670-690 |
B-: 800-820 | D: 600-660 |
E: 0-590 |
A more generous curve may be used, but should not be expected.
Assignments:
All assignments will be completed alone, but working together without writing or sharing code to come up with general solutions is encouraged. There will be 5 large projects, due typically two weeks after assignment. Each project will have an associated micro-project, due before the larger project, meant to exhibit the use of some language features important to the larger project. Progress reports will be in-class discussions of progress (held as usual on Blackboard Collaborate), and happen roughly halfway between the date the assignment is given out, and the date it is due. The assignments are difficult, and I recommend starting work on them early, avoiding any tendency toward procrastination. You should plan on spending at least 10 hours per week on course work outside of class.
Projects must be satisfactorily demoed in person on Blackboard Collaborate, then submitted on Blackboard, to receive any credit. Partial solutions will not receive any credit. The late penalty will be 5% 1% per day. Micro-projects must be submitted via Blackboard, and will not be accepted late (they do not need to be demoed).
Exams:
There will be two exams, a midterm and a final. The midterm will be during week 7, and the final during finals week. Should the final exam need to be given in a socially distanced way, the rules and format will remain but mechanics may differ.
Each exam question will be assigned a point value, questionPoints, where the following general scheme will be used in grading it:
0 – Did not attempt / No serious attempt / Completely incorrect
1/3 * questionPoints – Mostly incorrect solution
2/3 * questionPoints – Somewhat incorrect solution
3/3 * questionPoints – Perfect solution
Intermediate scores will be given as appropriate. The total points received on all questions will then be summed to determine your score.
Schedule/Outline:
During the semester we aim to cover the following topics:
Language Specification and Implementation
Syntax and Semantics
Names, Scope and Binding
Control Flow
Type Systems and Type Safety
Subroutines
Language Paradigms (including imperative, logic, functional, scripting, concurrent, and object oriented)
This syllabus and the course schedule are subject to change by the instructor. All changes and related justification will be announced in class, and updates will be reflected in this web version.
Lecture slides will be maintained on Blackboard, but many lectures will include use of the whiteboard which may not be reflected in notes elsewhere.
Week | Day | Date | Topic | Reading Due | Assignment/Assessment |
---|---|---|---|---|---|
1 | Monday | 1/27 | First Day of Class Syllabus, Overview How to be Successful in CSC344 | ||
Wednesday | 1/29 | A Brief History of PLs | Begin PLP Chapter 1 | ||
Friday | 1/31 | TA office hours begin next week! Chapter 1 Discussion! BNF and Parsing | PLP Chapter 1 (see discussion questions on Blackboard) | ||
2 | Monday | 2/3 | BNF / Parsing, concluded Memory management / pointers | PLP 3.2 (memory allocation); PLP 8.5-8.5.2 (pointers; you may find early parts of 8.1 on record types useful as well); Begin looking at C useful resources | |
Wednesday | 2/5 | Pointers / memory concluded | Continue looking at C useful resources! | Project 1 due (demoed) 2/21; Microproject due (on Blackboard) 2/12 11:59pm | |
Friday | 2/7 | Snow Day! | |||
3 | Monday | 2/10 | Some tips on how to learn new PLs A few more C quirks / features | ||
Wednesday | 2/12 | Writing Secure C Code | Microproject 1 Due | ||
Friday | 2/14 | Progress Report 1 Drop Deadline | PLP Chapter 11 through 11.3 | ||
4 | Monday | 2/17 | Functional Programming Introduction | ||
Wednesday | 2/19 | Reduction & Lambda Calculus | |||
Friday | 2/21 | Clojure, continued An example program: simulation of the Monty Hall Problem | Clojure Useful Resources (especially examine Clojure for the Brave and True!) | Project 1 Due | |
5 | Monday | 2/24 | Some recursive functions: Substitute and Deep Substitute | Continue looking at Clojure useful resources | Project 2 due (demoed) |
Wednesday | 2/26 | Types Discussion | PLP Chapter 7 through 7.2 (we will discuss in class! Discussion questions on Blackboard!) | ||
Friday | 2/28 | Snow Day | |||
6 | Monday | 3/2 | Finish Types Discussion Discuss Clojure Issues! | Microproject 2 Due | |
Wednesday | 3/4 | Progress Report 2 | |||
Friday | 3/6 | Type Inference | |||
7 | Monday | 3/9 | Propositions as Types Midterm Study Guide | Begin looking at Scala useful resources! | |
Wednesday | 3/11 | Scala Introduction A Taste of Scala from The Scala Book Scala for Java Programmers | Project 2 Due Project 3 due (demoed) |
||
Friday | 3/13 | Midterm Exam | |||
8 | Monday | 3/16 | Spring Recess - No Class | ||
Wednesday | 3/18 | Spring Recess - No Class | |||
Friday | 3/20 | Spring Recess - No Class | |||
9 | Monday | 3/23 | Recursive Descent Parsers | ||
Wednesday | 3/25 | Scala Recursive Descent Example, concluded | |||
Friday | 3/27 | Introduction to Logic Programming | |||
10 | Monday | 3/30 | Logic programming, continued | ||
Wednesday | 4/1 | Quest - No Class | |||
Friday | 4/3 | Progress Report 3 | |||
11 | Monday | 4/6 | Prolog List Processing A Smattering of Other Prolog Items | ||
Wednesday | 4/8 | State-Space Problem Solving with Prolog | |||
Friday | 4/10 | Easter Weekend - No Class | |||
12 | Monday | 4/13 | State-Space Problem Solving with Prolog, concluded | Project 3 Due Project 4 due (demoed) 4/27; Microproject due (on Blackboard) 4/18 |
|
Wednesday | 4/15 | CSA Scala Talk 12:30-1:30 Names, Scopes, and Bindings | PLP 3.3, 3.6 | ||
Friday | 4/17 | Work Day! | |||
13 | Monday | 4/20 | Declaration Scope | ||
Wednesday | 4/22 | Progress Report 4 | |||
Friday | 4/24 | Scope, concluded | |||
14 | Monday | 4/27 | Lecture on Google Drive (check your email!) | Project 4 Due Project 5 due (demoed) 5/15; Microproject due (on Blackboard) 5/4 |
|
Wednesday | 4/29 | OO: Generics / Templates | |||
Friday | 5/1 | OO: Method Binding | |||
15 | Monday | 5/4 | Final Exam Study Guide OO: Multiple Inheritance | ||
Wednesday | 5/6 | No Class | |||
Friday | 5/8 | Last Day of Class Virtual Progress Report 5 on Blackboard OO: Multiple Inheritance, concluded | |||
Finals Week | Wednesday | 5/13 | 10:30am-12:30pm The exam will be open to start between 10:30 and 11:00. You'll have 2 hours 10 minutes to complete it (the extra 10 minutes is to account for technology weirdness). If you have questions or issues, please email me! | Final Exam - To be completed on Blackboard |
Academic Integrity:
SUNY Oswego is committed to Intellectual Integrity. Any form of intellectual dishonesty is a serious concern and therefore prohibited. You can find the full policy online. While it is acceptable to discuss general approaches with your fellow students, the work you turn in must be your own. You may not turn in code found on the internet. If you have any problems doing the assignments, consult the instructor. See my page on plagiarism for an explanation of what I consider cheating.
Accessibility:
If you have a disabling condition which may interfere with your ability to successfully complete this course, please contact Accessibility Resources located at 155 Marano Campus Center, phone 315.312.3358, access@oswego.edu
Clery Act/Title IX Reporting:
SUNY Oswego is committed to enhancing the safety and security of the campus for all its members. In support of this, faculty may be required to report their knowledge of certain crimes or harassment. Reportable incidents include harassment on the basis of sex or gender prohibited by Title IX and crimes covered by the Clery Act. For more information about Title IX protections, go to https://www.oswego.edu/title-