Instructor: |
Thomas H. Austin |
Office Location: |
https://sjsu.zoom.us/j/3796767168?pwd=SzNVOE4zSTNyNHNqR1RhNlJ6cDAwUT09 |
Email: |
|
Office Hours: |
Tuesday/Friday, 11am-noon |
Class Days/Time: |
Monday/Wednesday 10:30 - 11:45 |
Classroom: |
https://sjsu.zoom.us/j/83769797043?pwd=S3FBalpRNnprNTNYZ2l6cENLUE0zQT09 |
Prerequisites: |
CS 152 or instructor consent. Familiarity with functional programming is assumed. |
|
|
Upon successful completion of this course, students will be able to:
Required materials: We will use a variety of online resources, including:
· "Learn You a Haskell for Great Good", available at http://learnyouahaskell.com/
· "Eloquent JavaScript", available at http://eloquentjavascript.net
· More references TBD, assigned in Cavas
SJSU classes are designed such that in order to be successful, it is expected that students will spend a minimum of forty-five hours for each unit of credit (normally three hours per unit per week), including preparing for class, participating in course activities, completing assignments, and so on. More details about student workload can be found in University Policy S12-3 at http://www.sjsu.edu/senate/docs/S12-3.pdf.
This class will involve 5 significant programming assignments, a midterm & a final (no notes), and a final project & presentation. Lastly, there will be labs for most days of class.
Exams and homework must be done individually. If two students turn in overly similar code, both get a zero, and both may be reported for plagiarism.
For the class project, you may work alone or with a partner at your discretion. Note that more will be expected of your project if you have a partner.
Labs are graded complete/incomplete. As long as you attempt and submit the lab, you will get full credit. For labs, you may work with others if you wish. Be forewarned, exam questions are often similar to lab questions. If you do not understand your lab solution, you are not likely to succeed on the exams.
NOTE that University policy F69-24 at http://www.sjsu.edu/senate/docs/F69-24.pdf 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."
1. 30% -- Homework assignments
2. 20% -- Midterm
3. 20% -- Final
4. 20% -- Project
5. 10% -- Participation (labs and pop-quizzes)
Assignments are due by 11:59 PM Pacific Time on the specified day. Late homework assignments will not be accepted.
Nominal grading scale:
Percentage |
Grade |
92 and above |
A |
90 - 91 |
A- |
88 - 89 |
B+ |
82 - 87 |
B |
80 - 81 |
B- |
78 - 79 |
C+ |
72 - 77 |
C |
70 - 71 |
C- |
68 - 69 |
D+ |
62 - 67 |
D |
60 - 61 |
D- |
59 and below |
F |
Note that "All students have the right, within a reasonable time, to know their academic scores, to review their grade-dependent work, and to be provided with explanations for the determination of their course grades." See University Policy F13-1 at http://www.sjsu.edu/senate/docs/F13-1.pdf for more details.
Please show up to class on time. If students arriving late becomes a problem, I will start classes with pop quizzes.
Per University Policy S16-9, university-wide policy information relevant to all courses, such as academic integrity, accommodations, etc. will be available on Office of Graduate and Undergraduate Programs' Syllabus Information web page at http://www.sjsu.edu/gup/syllabusinfo/
Week |
Date |
Topics, Readings, Assignments, Deadlines |
1 |
January 27 |
Course introduction |
2 |
February 1 |
Introduction to Haskell |
2 |
February 3 |
Haskell, continued |
3 |
February 8 |
Higher order functions |
3 |
February 10 |
Big-step operational semantics |
4 |
February 15 |
LaTeX and project overview |
4 |
February 17 |
Algebraic data types & functors |
5 |
February 22 |
Applicative functors |
5 |
February 24 |
Monads |
6 |
March 1 |
Parser generators |
6 |
March 3 |
Review session |
7 |
March 8 |
***MIDTERM (tentative date - check Canvas)*** |
7 |
March 10 |
Lambda calculus |
8 |
March 15 |
Introduction to JavaScript |
8 |
March 17 |
Scoping in JavaScript |
9 |
March 22 |
Event-based programming |
9 |
March 24 |
Macros & Sweet.js |
10 |
March 29 |
***SPRING BREAK*** |
10 |
March 31 |
***SPRING BREAK*** |
11 |
April 5 |
Type systems and small-step semantics |
11 |
April 7 |
JavaScript Object Proxies |
12 |
April 12 |
Simply typed lambda calculus |
12 |
April 14 |
Introduction to Ruby |
13 |
April 19 |
Just-in-time (JIT) compilation |
13 |
April 21 |
Ruby blocks |
14 |
April 26 |
Language-based security mechanisms |
14 |
April 28 |
Inform 7 |
15 |
May 3 |
TBD |
15 |
May 5 |
TBD |
16 |
May 10 |
TBD |
16 |
May 12 |
Project presentations |
17 |
May 17 |
Project presentations |
Final Exam |
May 25 |
9:45-noon |