CS 2135: Programming Language Concepts (A03)

Succeeding in the Course

Teaching Philosophy | Course Objectives | Expectations | How to Study


How 2135 Differs from Earlier CS Courses

CS2135 has a different style from programming courses such as 1005, 1006, and 2005. In programming courses, your primary task is to learn how to program effectively in the language taught in the course. You cover other material along with the programming materials (data structures such as lists, trees, queues, etc), but your main goal is to be able to program effectively with the concepts covered in class.

In contrast, the concepts covered in CS2135 are more abstract. In the languages portion of the course, we won't often say "here's a new data structure: write a program that uses it". Instead, we'll say "here's a new problem domain: figure out a language to simplify programming in this domain and how to create that language." This is a much more open-ended task. If you're not aware of this difference and approach the assignments like those from the more programming-oriented classes, you're likely to end up frustrated and lost.

This page gives you suggestions for how to adapt your working skills to the more open-ended style of CS2135. If you're struggling with this adjustment, come see me and I'll help you with it. Most students struggle with this transition at some point (this is well-documented across college-age students), so please don't feel self-conscious about it (here's a short column on the stages of intellectual development in college students).


My Teaching Philosophy

In order to understand how CS2135 works, it may help to understand my teaching philosophy.

Technical Aspects

I believe that every discipline sees the world through a set of defining questions or concerns (on a project involving both a computer scientist and a mechanical engineer, for example, the computer scientist may care about whether a robotic control algorithm is implementable while a mechanical engineer may care about how the proposed materials would interact). This holds even within sub-discplines (networking folks versus languages folks). I believe that someone who has mastered a topic can

  1. enumerate its defining concerns and a series of questions whose answers indicate how each concern is handled in a given situation,
  2. answer those questions, and
  3. judge the quality of answers to those questions (this may involve balancing tradeoffs between concerns).

For example, someone who has mastered programming language design could (1) provide a list of criteria for good languages and question someone else about how they address those criteria, (2) provide sound technical answers to those questions, and (3) critique a language design by others against these criteria. (Note that 7 weeks doesn't give us enough time to master all of these--this is a longer-term goal)

Given the role of questions in my teaching philosophy, I will often ask you to articulate and answer questions of this nature.

Learning Aspects

I believe that interaction and reflection are crucial to learning. By interaction, I mean that you need to talk to other people (classmates, friends, course staff) about the material. Talking to other people forces you to articulate how you understand an area; it also provides opportunities for others to challenge your understanding (which in turn refines your understanding). Such interaction is a big part of what you're paying tuition for (as opposed to the more restricted interaction attainable through distance learning), so don't shy away from it.

By reflection, I mean that you need to pay attention to how you are learning as much as what you are learning. You need to stop periodically and ask yourself how you went about a problem and whether it was an effective approach. Assess your skills -- what do you do well and what do you struggle with? If you want to become a better learner (which ultimately makes you a better student), you have to take stock once in a while of how you're going about learning. We're almost never taught this skill of self-reflection, but it plays a large role in our growth as learners.

I will occasionally ask you to reflect on how you are solving a problem. Hopefully this will help advance your overall learning skills.


Course Objectives

You may have heard that WPI is testing a new course evaluation system for two years starting in A03. This new system (called IDEA) is designed to explore how students are progressing on various learning objectives. Instructors indicate which of 12 pre-specified learning objectives are relevant to each course; the data from student evaluations is calibrated against these relevant objectives. CS2135 targets the following objectives (the italicized phrases are from the IDEA form, the comments in brackets correlate these to specific aspects of CS2135):

Another relevant objective, but one that 2135 targets less due to the constraints of 7-week terms, is

Keep these in mind as we go through the course. If you have questions about how a particular topic or assignment fits into these objectives, please ask me.

The home page for the class lists the general skills that I expect you to get from the course. In addition, the pages for several of the lecture notes list skills that you should take from each lecture. These correlate with the objectives listed above.


My Expectations for Students

These expectations are less about content, and more about how you proceed through the class.


How to Study

For the first part of the course (where we learn functional programming), the syllabus page will contain links to extra exercises corresponding to each lecture. If you are having problems with the programming exercises we do in class, you need to be doing these extra problems. I will be teaching you a step-by-step approach to writing programs early in the course. If you're not able to start writing a program, you're not using the steps. We can help you with the steps if you come to office hours.

For the second part of the course (on languages), you will mostly be doing more open-ended assignments. The assignments will follow on similar examples from lecture. If you get stuck, go back to the lecture notes and study the process through which we approached the problem. Try to write down the kinds of questions that we asked that led from one stage of the solution to the next. If you don't see this process, it's very unlikely that you'll be able to do the assignment. Again, I can help you extract this process if you ask.

Students who've taken the course in the past offer consistent advice: attend lectures, start homework early (especially the project), and go to office hours.


This page maintained by Kathi Fisler
Department of Computer Science Worcester Polytechnic Institute