San Jose State University
CS 152 - Programming Languages
Cay S. Horstmann
Spring 2018
Section 3: MW 10:30-1145 SCI 311
Section 4: MW 12:00-13:15 SCI 311
For office hours and contact information, please visit http://www.sjsu.edu/people/cay.horstmann/.
The Piazza site for this course is at http://piazza.com/sjsu/spring2018/cs152sections3and4/home.
Calendar
- January 24
- First day of class | Slides
- January 29
- Functional Programming 1 | Captioned Video | Homework 1 / Prerequisite quiz due
- January 31
- Functional Programming 2 | Captioned Video
- February 5
- Functional Programming 3 | Captioned Video | Homework 2 due
- February 7
- Functional Programming 4 | Captioned Video
- February 12
- Functional Programming 5 | Captioned Video | Homework 3 due
- February 14
- Parsing 1 | Captioned Video
- February 19
- No class
- February 21
- No class | Homework 4 due
- February 26
- Parsing 2 | Captioned Video
- February 28
- Parsing 3 | Captioned Video
- March 5
- Parsing 4 | Captioned Video | Homework 5 due
- March 7
- Parsing 5 | Captioned Video
- March 12
- Parsing 6 | Captioned Video | Homework 6 due
- March 14
- Static and dynamic scopes | Captioned Video
- March 19
- Racket 1 | Captioned Video| Homework 7 due
- March 21
- Midterm exam
- March 26 -30
- Spring Break
- April 2
- Racket 2 | Captioned Video
- April 4
- Types 1 | Captioned Video
- April 9
- Types 2 | Captioned Video | Homework 8 and Project proposal due
- April 11
- Prolog 1 | Captioned Video
- April 16
- Prolog 2 | Captioned Video
- April 18
- Prolog 3 | Captioned Video | Homework 9 due
- April 23
- Prolog 4 | Captioned Video
- April 25
- Compiling 1 (sorry, no video)
- April 27
- Homework 10 due
- April 30
- Project status presentations
- May 2
- Compiling 2 | Captioned Video
- May 7
- Compiling 3 | Captioned Video
- May 9
- Project presentations
- May 14
- Last day of instruction | Project presentations
- May 16
- 0945-1200 Section 4 Final
- May 21
- 0945-1200 Section 3 Final
Description
The course goal is to study programming language design, with an emphasis on the functional paradigm.
Topics covered:
- Programming language syntax and semantics.
- Data types and type checking.
- Scope, bindings, and environments.
- Functional and logic programming paradigms, and comparison to other paradigms.
- Extensive coverage of a functional language.
For the official catalog description, please visit http://info.sjsu.edu/web-dbgen/catalog/departments/CS-courses.html.
Prerequisites
CS 151 or CMPE 135. If you are registered for the class, you must email me your answers to the prerequisite quiz by 23:59 of the second day of class, or I will drop you from the class for failure to fulfill the prerequisites.
Specifically, the following skills are assumed:
- A working knowledge of Java, including inner classes, reflection, exception handling, generics, concurrency
- Data structures: lists, trees, hash tables
- Windows and Unix basics, as covered in the CS46A and B labs: shell usage, environment variables, shell scripts
- The ability to design, implement, test, and debug programs in an object-oriented language, involving the creation of at least 10 classes and interfaces
Textbook
There is no required text.
Student Learning Outcomes
Upon completion of this course, the successful student will be able to
- Have a basic knowledge of the history of programming languages
- Have a basic knowledge of the procedural, object-oriented, functional, and logic programming paradigms
- Understand the roles of interpreters, compilers, and virtual machines
- Critique the design of a programming language
- Read and produce context-free grammars
- Write recursive-descent parsers for simple languages, by hand or with a parser generator
- Understand variable scoping and lifetimes
- Write interpreters for simple languages that involve arithmetic expressions, bindings of values to names, and function calls
- Understand type systems
- Understand the implementation of procedure calls and stack frames
- Produce programs in a functional programming language in excess of 200 LOC
Course Policies
- Adding the Course
- To add the course, take the prerequisite quiz. You must use your add code within 24 hours, or the add code will be reassigned to someone else.
- Time Spent
- As per Policy Recommendation S12-3, success in this course is based on the expectation that students will spend, for each unit of credit, a minimum of forty-five hours over the length of the course for instruction or preparation/studying or course related activities.
This is a 3-unit/15-week class, so you should spend 135 hours per semester or 9 hours per week on this class.
- Individual Work
- All homework and exams must be your own individual work. You may never copy anything from anyone without attribution, with one exception—you may copy from the textbook. For homeworks and exams, you may not copy anything from any other student at all. You may not share any of your homework or exam work with any students prior to submission. Except for the team project, you may not collaboratively produce results in pairs or teams.
- Publicly Viewable Work
- Your class work (including homework, exam, and project work) may be viewable by other students of this course. Your grades will not be viewable by others.
- Laptops
- You will be required to bring a laptop to all (!) classes and exams. You need to have the following tools installed on your laptop:
- Java 8
- Scala IDE 4.7
- A bash shell.
- Software instructions, scripts, technical support, and so on, will be provided for Linux. You may wish to install a Linux virtual machine. If you choose to use another operating system, you are responsible for making any necessary adaptations.
Grading Policy
- A midterm (15% per exam) and a final exam (30%).
- Exams cannot be made up, except for reasons of illness, as certified by a doctor, or documentable extreme emergency. Makeup exams may be oral.
- Weekly programming assignments (35%)
- Late work is not accepted, and there is no extra credit or makeup work.
- Group project (15%)
- The topic and team are determined by the instructor. Late work is not accepted, and there is no extra credit or makeup work.
- Class Attendance, Preparation and Participation (5%)
- Each student is expected to be present, punctual, and prepared at every scheduled class session. University policy F69-24 states that “Students should attend all meetings of their classes, not only because they are responsible for material discussed therein, but because active participation is frequently essential to insure maximum benefit for all members of the class. Attendance per se shall not be used as a criterion for grading.” You will be graded on particpation in class and online discussions, and your performance on quizzes that check the assigned pre-class activities.
You will receive a letter grade for each of the exams, the finals, the total homework performance, and the total participation in labs/discussions/quizzes. Letter grades are obtained by adding and curving the numeric scores. When determining a curve, the cutoffs are guided by the university definitions for letter grades:
- A+, A, A- excellent
- B+, B, B- above average
- C+, C, C- average
- D+, D, D- below average
- F failure
Letter grades are converted into number grades, as specified by the registrar, except that an A+ is counted as 4.3, and weighted with the percentages given in the Course Requirements section. The weighted average is rounded towards the nearest letter grade, which is your class grade.
University Policies
Per University Policy S16-9, university-wide policy information relevant to all courses, such as academic integrity, accommodations, etc. will be available on the Office of Graduate and Undergraduate Programs’ Syllabus Information web page .