This is the site for “CSE 320: Programming Languages” as taught by Andrew Brinker in the Fall quarter of 2017 at CSU, San Bernardino.
This is the site for “CSE 320: Programming Languages” as taught by Andrew Brinker in the Fall quarter of 2017 at CSU, San Bernardino.
Classes are held every Tuesday and Thursday, lectures are from 4:00pm to 5:15pm, labs are from 5:25pm to 6:20pm.
This course requires the second edition of “Programming Languages: Application and Interpretation” by Shriram Krishnamurthi. This book is available for free online in both HTML and PDF formats, and need not be purchased.
Each pre-course reading will include optional materials. Questions from these optional materials will be included for extra points in the regular quizzes.
Some pre-course reading will include links or suggestions for further exploration into the topic at hand. These are entirely for your own personal edification, and will not be required for use in the course.
The class component will serve to enable discussion and exploration of the topics covered in reading. To do well in this class, you must do the assigned reading. Students who arrive to class without having done the reading will likely find themselves struggling.
The lab component will serve to introduce you to a variety of programming languages, to provide practical knowledge about different languages, their underlying paradigms, and how the different decisions the language designers make influence the resulting language.
There are four ways to get points: quizzes, labs, projects, and exams. There are a total of 1000 points available, and your final grade is based solely on how many points you have.
| Type | Count | Points Per Assignment | Total |
|---|---|---|---|
| Quizzes | 10 | 10 | 100 |
| Labs | 10 | 20 | 200 |
| Projects | 3 | 100 | 300 |
| Exams | 2 | 200 | 400 |
Late work is not generally accepted. If special circumstances prevent you from doing an assignment, please contact me promptly so we can discuss potential solutions.
| Read Before Class On | Reading |
|---|---|
| 09/26 | Interpretation |
| 09/28 | Functions 1 |
| 10/03 | Functions 2 |
| 10/05 | Mutation |
| 10/10 | Recursion |
| 10/12 | Objects 1 |
| 10/17 | Objects 2 |
| 10/19 | Memory 1 |
| 10/24 | Memory 2 |
| 10/26 | Representation 1 |
| 10/31 | Representation 2 |
| 11/02 | Control Flow 1 |
| 11/07 | Control Flow 2 |
| 11/09 | Types 1 |
| 11/14 | Types 2 |
| 11/16 | Types 3 |
| 11/21 | Types Review |
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
let? How is it defined?The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
self.The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
#' in a Racket program?The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
The focus in this reading should be on the following concepts:
let-polymorphism?The focus in this reading should be on the following concepts:
This is a review of the last three readings. Focus on the materials outlined in those readings.
Every Thursday class will begin with a quiz covering the reading assigned during the prior week. These quizzes will be quick, and should be easy for anyone keeping up with the reading. They will also include a bonus question or two based on the optional reading assigned at the end of the previous class.
| Date | Language | Topic |
|---|---|---|
| 9/21 & 9/26 | Racket | Expressions |
| 9/28 & 10/3 | Racket | Functions |
| 10/5 & 10/10 | Racket | Macros |
| 10/12 & 10/17 | Rust | Ownership, Lifetimes, Borrowing |
| 10/19 & 10/24 | Rust | Concurrency & Parallelism |
| 10/31 | Rust | Safety & Security |
| 11/2 & 11/7 | Java | Objects & Classes |
| 11/9 & 11/14 | Java | Object–Oriented Design |
| 11/16 & 11/21 | Prolog | Unification & Backtracking |
| 11/28 & 11/30 | Prolog | Logic & Programming [1][2] |
One of the goals of this course is to combat language monoculture. If you as a programmer only use one language, you are only exposed to one way of thinking. The languages we use (whether speaking or programming) shape the ideas we consider and express. Learning more than one programming language is akin to learning more than one spoken language. In doing so, you help to broaden yourself with new perspectives and ways of thinking.
It is not expected that you become a strong programmer in each of these languages. Rather, the hope is that the exposure you receive to these languages will pay dividends in improving your understanding of and facility with programming overall. If you happen to like one or more of these languages, and want to explore them further on your own time, do.
Lab time is a time for experimentation, discovery, and question-asking (both of yourself and of me). The best way to discover the workings of a programming language is to write in it, and so I highly recommend a sense of playfulness during lab sessions. I will be available for questions, and if more than one or two students has the same question I am happy to answer those questions for the edification of the rest of the students.
The course will include a four-phase project to be undertaken in teams of 8 students. Each member of a team will receive the same grade, so make sure to pick team members on whom you can rely.
In phase one, you must submit a report on an existing programming language that is not in the Top 20 of the TIOBE programming language index at the time the class starts. This means the following languages may not be used for the report:
The phase 1 report is worth 100 points. If a report on any of the languages listed above is turned in, it will receive 0 points. It should detail the language's syntax, semantics, paradigm, design philosophy, and major interesting features. Each group member must contribute 2 pages to the report, meaning an 8-member group should produce a report of a minimum length of 16 pages.
In phase two, you must submit a report on an original programming language concept developed by the group. This report is a draft report, and will not be graded, but failure to submit a report in phase two will result in the group receiving no points for any submission in phase three. Like in phase one, the report should detail the language's syntax, semantics, paradigm, design philosophy, and major interesting features.
In phase three, you must submit the final draft of the report your group submitted in phase 2. This report is worth 100 points.
The final part of the project is for the group to present their finished programming language concept. This presentation is worth 100 points.
The midterm exam will be administered on October 26th, during lecture. More details will be provided at a later date.
The final exam will be administered on December 5th, from 4:00pm to 5:50pm. More details will be provided at a later date.
Plagiarism and cheating are violations of the Student Conduct Code and may be dealt with by both the instructor and the Judicial Affairs Officer. Definition and procedures for addressing cheating and plagiarism are found below. Questions about academic dishonesty and the policy should be addressed to the Office of the Vice President, Student Services. Plagiarism is the act of presenting the ideas and writings of another as one’s own. Cheating is the act of obtaining or attempting to obtain credit for academic work through the use of any dishonest, deceptive, or fraudulent means. Cheating includes but is not limited to:
Plagiarism is academically dishonest and makes the offending student liable to penalties up to and including expulsion. Students must make appropriate acknowledgements of the original source where material written or compiled by another is used. Procedure. Allegations of academic dishonesty may be handled directly by the instructor or may be referred by the instructor to the Judicial Affairs Officer. If handled by the instructor, the instructor has the following responsibilities:
The instructor may employ any of the following sanctions:
If the student does not wish to accept the sanction proposed by the instructor, the student may request and require that the allegation be referred to the Judicial Affairs Officer. In that event, the procedures specified under Executive Order 970 (Student Disciplinary Procedures of the California State University) shall be observed. The instructor shall not impose any sanction other than the sanction(s) imposed through the disciplinary procedure.
If you are in need of an accommodation for a disability in order to participate in this class, please let me know and also contact Services to Students with Disabilities at UH-183, (909) 537-5238.
The following are learning outcomes for the Computer Science program, accredited by ABET This course supports these outcomes.
It is highly recommended that you become a member of the CSUSB Computer Science and Engineering Club. The club provides a number of support and enrichment activities, including peer tutoring and talks on current topics in computing. Joining the CSE Club is an excellent way to expand your skills and opportunities as a computer scientist or engineer.
You may contact me via email at andrew.brinker@csusb.edu with questions and comments related to the class. Make sure to preface all email subjects with “[CSE 320]”, to ensure that I will see and respond to your email message.