| CS 320
Principles of Programming Languages
| Course Information and Syllabus
(Last Updated: 3 April 2020)
IMPORTANT: The pdf version of this document that is
posted on D2L will not be updated once the term
has started. Its purpose is to maintain an accurate record
of the course syllabus as of the date shown above, and as
distributed in the first class. For updates and additional
resources, please consult the D2L web pages.
Note that I fully expect that this information will
be updated. We are living through times that are
unlike anything that we have ever experienced, and even
the best laid plans are unlikely to execute
smoothly. It is quite likely that both students and
instructors will have to improvise. All we can do is
the best that we can.
I hate email, and do not do a good job of keeping up with it. The class discussion forums are the best venue to ask general and technical questions, because
You can schedule an "office hours" conversation with me
at the above calendly
link. If you can't or don't want to use Zoom,
we can also use plain old telephone service (POTS);
We will rely on students in the course to let us know if the posted office hours times do not work, or if additional TA office hours should be added.
Meeting Times and Locations
Every student should be signed up for CS 320 lectures,
and CS 320L lab. Signups for the lab slots was
limited to the capacity of the physical lab; now that labs
are going to be virtual, this restriction is
unnecessary, Please sign up for a lab session
at a time you think you will be able to attend.
My current plan is to make the material that would have
been delivered in Tuesday's Lecture available on Monday as
one or more video recordings, and to use Tuesday's
10:00–11:50 scheduled meeting time for discussion and
I also plan to make the material that would have been
delivered in the lab sessions available as video
recordings. I hope students will organize themselves
into small (2 or 3 person) lab groups and tackle the lab
assignments collaboratively. Because every student
should have planned to be available at the assigned times,
I hope that these will serve as starting times for lab
Class Web Page, Discussion Site, AnnouncementsWe will be using D2L (http://d2l.pdx.edu; Odin account required for login) for static material—lecture slides and videos. We will also be using it for some quizzes.
We will be using Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates, the TAs, and the instructor. Rather than emailing questions to the teaching staff, I encourage you to post your questions on Piazza. If you have any problems or feedback for the developers, email firstname.lastname@example.org.
Find our class page at: https://piazza.com/pdx/spring2020/cs320/home. You can configure Piazza to send you email when something new is posted. There is also a handy Piazza App for your phone, which can allert you to new posts.
All students are expected to read announcements on Piazza; I hope that you aslo take part in discussions.
There is also a Slack channel at https://pdx-cs.slack.com/#cs320_spring_2020
that is intended for informal communication and questions
about the course. Use it freely. The instructor and TAs
will monitor it and contribute when that seems
Codio Coding Platform
We will be using the Codio platform to distribute and
collect assignments. You can also use Codio to
write, test and execute your homework submissions.
Connect to our class on codio at https://codio.com/p/join-course?token=planet-orion
If you prefer to code the homeworks on your own machine,
that's fine. You will still have to upload your
assignments to Codio for submission.
Syntax and semantics. Compilers and interpreters. Programs as data. Regular expressions and context free grammars. Programming paradigms, including procedural, functional, and object-oriented programming. Type systems, including dynamic and static typing disciplines. Binding, scope, data abstraction, and modularity. Denotational, operational, and axiomatic semantics. Introduction to program correctness. (The official description is available at https://www.pdx.edu/computer-science/cs320.)
This class requires CS 202 and CS 251, passed with grades of C or better. These courses provide you with the background that you will need to understand the course material and develop solutions to the assignments that you will be given. It is assumed that you have experience programming in a high-level, object-oriented language (specifically, C++ or Java, from CS 202 and earlier classes). If you have not completed the prerequisites, then you may not have the background that you need to pass this class. In this case, by default, you will not be able to continue in the class and you should contact the instructor at the earliest opportunity to avoid an administrative drop.
Course Objectives/Student Learning Outcomes
Upon the successful completion of this course students
will be able to:
Outline of Course Content (SUBJECT TO CHANGE)
The following outline represents a tentative schedule for the course and is subject to change.
In accordance with University Guidelines, the final exam is scheduled for Tuesday, June 9, 10:15–12:05. You should keep that time-slot open.
Course Requirements and Method of Evaluation
The course will be assessed by a combination of exams, and lab/homework exercises.
There will be one midterm exam (in Week 6) and one final
exam (in Finals week), both of which will be open-book.
Exams are scheduled in advance and, unless a prior
arrangement is made, a grade of zero will be recorded for
missed exams. Exactly how these exams will be
administered remains to be determined.
The midterm will contribute 20% of your overall grade for the class, while the final will contribute 30%. The remaining 50% will be determined by homework assignments and in-class quizzes. The homework assignment for a given week is likely to be a continuation of work that was begun in the lab sessions for that week. My general expectation is that answers will include appropriate explanation, justification, or supporting commentary that show that you understand why your answer is correct. The grading schemes for individual assignments will typically include points specifically for these items, so writing only the final answer to a question, even if it is correct, may not earn full marks.
For questions that require programming, you will often be asked to include evidence of "thoughtful testing". The intent here is that you aim for quality of tests rather than quantity, focusing on which aspects of your solution are exercised by your tests, the handling of edge cases, and the steps that you took to determine what the correct behavior or result should be. If you just show the output from running a program without including further commentary to justify or explain the results, then all you are really doing is showing that your program runs, and not that it is correct.
There may be some assignments that are not formally assessed. This might include written exercises, additional reading, or watching prepared videos, etc. These will be designed to help you master the subject, to keep pace with the lectures, and to prepare for the exams, so it will be very important for you to keep up to date with those exercises.
Required Texts and/or Required Reading List
The slides and other materials that are presented in the video-recorded lectures will be archived on the course web site are required reading.
There is no required textbook for this class,
but all students are strongly encouraged to do background
reading in parallel with the coverage of topics in class.
There are many textbooks on the subjects of this course,
including a good range that are available in the PSU
library. However, we do not require you to buy or have
access to any particular text: for example, we will not
set exercises that come from a textbook.
Of course, there are plenty of good resources on the
Internet of direct relevance to this course that can be
found on sites like Wikipedia or simply by searching on
Google. If you prefer a textbook, we recommend
The assignments for this course will require the use of a variety of programming language implementations. Students may develop their solutions on any machine and operating system on which these implementations are available. At a minimum, all of the systems that we use will be installed on the departmental Linux systems that can be accessed in person in the lab area, or remotely via ssh/putty.
The Importance of Asking for Help
A fundamental assumption and expectation of this course is that students will ask for help or clarification if they have any problems understanding the course materials, or the work that is required for an assignment. As general guidelines:
"Shouldn't I be able to do this by myself?" Students sometimes say that they want to be able to do the assignments by themselves without any additional input. That's a commendable attitude, but it is NOT appropriate in this class and it is not representative of how things work in the real world: practical projects typically rely on the need for interaction with customers, peers, supervisors, and other colleagues with more experience or different perspectives. Another common problem may occur for a student who is struggling to phrase their question. If you find yourself in this position, you are encouraged to review the relevant course materials (and question or reference text, where appropriate): can you identify the parts that make sense to you, and the parts that are unclear? The more precisely you can identify the source of any confusion or uncertainty, the easier it will be to provide specific guidance. For example, perhaps you can point to a specific item on a slide, or a particular phrase or paragraph in an assignment text that doesn't make sense to you? Does it appear to contradict something you've seen elsewhere, or use vocabulary or terminology that isn't familiar to you, for example? Even if you cannot pin down all the details, the process of trying to formulate a question can, itself, be helpful in clarifying the source of a misunderstanding. And even if you still cannot formulate a very specific question, we will nevertheless do our best to help you.
"I don't want to embarrass myself." Another common concern is a fear of embarrassment or a sense of shyness: a student may worry that their questions will reveal a gap in their understanding, or even just the fact that they started late or weren't paying attention in class when a topic was covered in class. Although it can be difficult to overcome these fears, in a class of any reasonable size, it's almost certain that any question that one student has will also be on the mind of, or directly relevant to, other students as well. As such, when a student asks a question, particularly in a public forum such as during the discussion section or on D2L, there is an enormous potential benefit to other people. For starters, there is a very real chance that you and other students will learn useful things in the process. Moreover, the instructors will also gain new insights about the way that the material was taught or understood—including gaps or mistakes in the way the ideas were presented—which they can then use as input to clarify, expand, and improve the treatment. For these reasons, we strongly encourage you to ask questions in "public" settings where possible. For those who still feel uncomfortable about this, we will also do our best to respond to "private" inquiries.
"You're probably too busy." Some students hold back from asking questions because they think that the instructor or TAs might be too busy. It's true that we may be busy, but please don't forget that we are here (and are being paid!) to help you learn. Interacting with you and answering your questions is one of the best ways we have to help you do that. You're certainly not "bothering us" or "wasting our time" when you ask us questions: you're just giving us a chance to do our jobs and help you learn the course material!
The Danger of "spinning your wheels": Students sometimes mention that they have been working on a question for "many hours" before getting in touch to ask a question. By the time this happens, they have invested a lot of time and energy in a specific problem, but have little to show for it, and are understandably feeling more than a little frustrated. In some cases, a student may say this because they want to assure us that they have made a serious attempt to understand the material and solve the problem themselves; it may well be that many hours have passed on the clock in the process, but that time may not have been spent productively, and the end result might be that it takes much longer for a student to complete an assignment as a result of some relatively small misunderstanding or detail that could have been clarified quite quickly. It is definitely a good idea for students to spend and invest real time and energy to understand and work through problems on their own; many of us learn a great deal as a result of struggling with a problem, and perhaps failing to find a solution in our first few attempts to solve it. However, it is also important to develop enough self awareness to be able to tell when you are simply "letting your wheels spin", essentially making no progress and failing to use your limited time in a productive way. A good first step if you feel this happening to you is to take a break: do something else, take some physical exercise, sleep, etc. But ultimately, this may just be a sign that you need to reach out for help or clarification.
We follow the standard guidelines for academic integrity.
This is important because a breach of academic integrity
by one student undermines the efforts and achievements of
the other students in the class who have made honest and
legitimate attempts to study for and complete assignments
It is permissible to discuss assignments with
students outside of your lab group, but you must develop
within the group. Do not, under any circumstances,
copy any part of another person's solution and submit it
as your own; this is plagiarism. Each
homework answer should state your personal role in
developing it; it needs to be absolutely clear to the
grader what is the work of your own hand, and what should
be attributed to others in your lab group.
Obviously, we will be comparing the attributions from all
members of the group.
Posting or soliciting all or part of your solution on D2L or any other public forum, media, or site may be considered a breach of academic integrity. Writing code for use by another lab group, or using another person's code without attribution, will be considered cheating. Cheating on an assignment or exam will result in an automatic zero grade for that piece of work, and the initiation of disciplinary action at the University level. Please refer to http://www.pdx.edu/dos/codeofconduct for details of the general PSU Student Code of Conduct. Any student with questions about academic integrity issues, either relating to their own behavior, or with concerns about the behavior of other students, should contact the instructor. All such matters will be treated in confidence.
Always remember that the instructor and the TAs are here to help you to succeed in this class; if you find yourself in a difficult position, do not be tempted to cheat, and instead get in touch to ask for some help or guidance.
Discrimination and Misconduct
Disabilities and Accommodations
We will do everything possible to provide accommodations, with full confidentiality, to any student who needs them. All accommodations must be approved by the Disability Resource Center, which establishes fair and consistent standards across campus. Students with a documented disability who are registered with the Disability Resource Center are responsible for ensuring that their specific requirements are clearly communicated to the instructor at the earliest possible opportunity, either directly or via the DRC. Students should take steps to notify the instructor as soon as possible if they feel that their needs are not being met. If you have accommodations that include taking tests at the University test center, then you are strongly recommended to schedule those tests so that they coincide with the time that the other students are taking the test in the main classroom. It is important that you take steps to make the necessary reservations at the earliest possible opportunity, noting that the times and dates for both the midterm and final exams are already fixed for 4 May and 9 June, respectively, as described above. The instructor is happy to provide additional guidance to any student in this situation, but it is the student's responsibility to make the appropriate arrangements and to share those details with the instructor in a timely manner.
Other Policies and Guidance
In addition to the specific items described above, we adopt the following policies and guidance:
Every student should send an email to the instructor before the second lecture to indicate that they have read and understood this syllabus.