pchapin's CIS-3030 Programming Languages, Spring 2019


Peter C. Chapin. Office: BLP-415 on the Williston campus. Office hours are by appointment. Phone: 802-879-2367 (voice mail active). Email: pchapin@vtc.edu. I will usually respond to email within 24 hours, not including weekends or holidays. Email is the best way to contact me. I am also sometimes on the VSC's Skype for Business, or on the FreeNode IRC network under the nickname pcc.

Course Description

This course is about programming languages. It is intended to give you the skills you need to learn new programming languages quickly and to understand the significance and purpose of various programming language features. This course is about understanding the design of programming languages and about how to use that knowledge to your advantage when you write programs. This course is not primarily theoretical but we will discuss some theory to help you deepen your understanding.

One particularly important programming language topic that we will cover in depth is functional programming. This is a style of programming based on using pure, first class functions to manipulate immutable data. Functional programming is rising in application in the industry and yet it requires a significant shift in thinking for those coming from (more traditional) imperative/OOP languages such as C, C++, and Java. One major goal of this course to get you comfortable with the functional style.

To give you practice learning a new language and to provide a vehicle for discussing the concepts presented in this course, we will be studying the specific language Scala. This language has been chosen because it is very rich, illustrating many interesting programming language design issues, as well as very practical. Scala targets the Java Virtual Machine and thus plays well with the Java ecosystem. It can be used in almost any application where Java is currently being used. Another goal of this course to give you experience with a language you might actually find useful. Scala is such a language.

The official course outline lists high level course objectives and content. The working outline is on the main class page with each topic linked to the lecture that supports it. The working outline is more detailed than the official outline but it is a work in progress and subject to change as the semester progresses.


This course assumes you are already familiar with the basic concepts of programming and have taken courses in C or Java. This course also assumes you are familiar with the basic concepts of object-oriented programming (data encapsulation, inheritance, etc). These languages and concepts form the basis from which comparisons with other programming languages will be made.


The text is Programming in Scala, third edition, by Martin Odersky, Lex Spoon, and Bill Venners. Please be sure you are using the third edition; the earlier editions are now a bit outdated. This is not a book about programming languages in general, but instead focuses on the features of Scala in particular. I will supplement this text with additional information as required.

There are many good resources about the language we will be using on the Scala web site. I have also prepared a file of Scala bookmarks you may find interesting.

I have created an email distribution list for the class. I will use this list to distribute announcements and other supplementary materials. Be sure to check your mail regularly (daily) or you might miss something important. If you send a question in email directly to me, I may reply to my distribution list if I think that others would benefit from my answer. If you would rather I did not reply to the list you should say so in your message.

My home page contains various documents of general interest.

Grading Policy

I grade on a point system. Each assignment is worth a certain number of points. At the end of the semester I total all the points you earned and compare that to the total number of possible points. In this course there are three components to your grade.

  1. Homework. 20 pts/each (normally). There will be approximately ten assignments during the semester for a total of about 200 points. You will normally have one week to do each assignment. Many, but not all, of the assignments will entail programming.

  2. Project. 50 pts. Here you will pick a programming language to study on your own. At the end of the semester you will write a report on the language you have been studying or give a 10–15 minute oral presentation to the class about that language.

  3. Final. 50 pts. There will be one take-home exam at the end of the semester that will serve as the final exam for the course.

The exam will be a take home exam. When doing the exam you can use any resources available to you except that you can not consult with other students about exam questions nor post questions directly related to the exam on Internet forums or mailing lists (it is okay to read existing posts, however). If you have questions about the exam, please contact me.

For homework assignments you can discuss the material with other students and post questions related to the assignments in on-line forums. However, you should still do your own work (lab assignments are done individually and not, for example, in pairs). See the section on "Copying Policy" below for more information.

I will not formally take attendance, but I will notice people who seem "disengaged" in the class. Although attendance is not specifically part of my grading policy it will, like other intangible items such as "professionalism," play a role in how likely I am to round up borderline grades.

Late Policy

Roughly, late submissions are not accepted. If something comes up that prevents you from handing in an assignment on time, contact me, before the deadline if possible, to discuss your issue. As a practical matter I can accept a late submission if I have neither distributed a solution nor graded the assignment. Since either of those things can happen at any time after the due date, you should plan on submitting all materials on time. My intention is to grade submitted materials in one to two days after the due date.

Copying Policy

I encourage you to share ideas with your fellow students so I won't be shocked to learn that you've been talking with someone about an assignment. If you worked closely with someone you should make a note on your submission that mentions the name(s) of your associate(s).

However, I do ask you to do your own work in your final submissions. If two submissions exhibit what I feel to be "excessive similarity" I will grade the submissions based on merit and then divide the grade by two, assigning half the grade to each submission. If I receive more than two excessively similar submissions I will divide the grade by the number of such submissions and distribute the result accordingly.

Since "excessive similarity" is a bit subjective, I may only give you a warning if the similarity is not too excessive—especially for a first offense. However, I do keep records on when I find excessive similarity and I will be much less inclined to be forgiving if I discover it again. If you are concerned about the possibility of submitting something that might be too similar to another student's work, don't hesitate to speak with me first.

If you find material on the Internet or in a book that seems to answer questions I ask in an assignment, you may include such material in your submission provided you properly reference it. If I discover that you have included unreferenced material from such sources, I may not give you any credit for the question(s) answered by such material. You do not need to provide a reference to our text book or to materials I specifically provide in class.

Other Matters

Students with disabilities may request accommodation as provided within federal law. All such requests should be made by first contacting Robin Goodall, Learning Specialist, in the Center for Academic Success on the Randolph campus. She can be reached by phone at (802) 728-1278 or by email at rgoodall@vtc.edu.

Last Revised: 2019-01-20
© Copyright 2019 by Peter C. Chapin <pchapin@vtc.edu>