Lambda Bound University of British Columbia, Department of Computer Science
CPSC 311 Definition of Programming Languages:
"Lambda Bound"

Winter 2011 Term 1

Course Goals     Syllabus     Notes     Assignments     Bonus Points     Matygo     Wiki
Lambda Bound
CPSC 311, Definition of Programming Languages: Syllabus
Contents:
  • Course Staff
  • Exams
  • Lectures and Tutorials
  • Course Materials
  • Assignments
  • Coding Style
  • Test Cases
  • Collaboration Policy
  • Collaboration Recommendations
  • Communication
  • Missing Lectures, Tutorials, and Exams
  • Grade Calculation
  • Acknowledgements
  • Course Staff


    Exams


    Lectures and Tutorials

    Lectures are MWF 1200–1300PM in DMP 301. Tutorials are Tuesdays in ICCS 015 at 1100–1200 (T1A), 1300–1400 (T1C), and 1400–1500 (T1B).

    We will write code on the fly and collaboratively in lectures. So, bring your active curiosity to class.. and your computer if you can!

    Tutorials will also explore course concepts hands-on. The TA will work exercises with you, briefly summarize and answer questions about the assignments, and facilitate discussions. Tutorial material will sometimes supplement and sometimes reinforce lecture.

    Come to tutorials prepared, having read assigned readings and attempted (or completed!) the current assignment. Those with laptops may want to bring them, although the tutorial room has desktop computers.


    Course Materials

    The CS Reading Room (ICCS 262) has all but the "Fixnum" book on course reserve. Ask the librarian on duty for them.


    Software

    Most of our programming will be in Racket using its DrRacket environment. DrRacket is installed on the department machines, and is available for free download.

    On the department machines or after you've downloaded and installed DrRacket on your machine: in the Language menu select Choose Language then Use the language declared in the source, click Show Details (at the bottom), select the Output Style labeled print, and for Automatic #lang line type #lang plai.

    (On a department machine, these settings may not persist across logins. In that case, the short version is to use the drop-down in the lower-left to choose Use the language declared in the source and type #lang plai as the first line of your source code.)


    Assignments

    People learn by doing, not listening. We will have regular assignments.

    Read and adhere to the very open but absolutely required collaboration policy. See individual assignments for rules regarding teamwork.

    No late submissions will be accepted. In extenuating circumstances, contact your instructor immediately, preferably in advance, and we may waive the assignment. Submissions that do not properly acknowledge collaborators and sources will receive zero marks and result in an official misconduct investigation.

    Coding Style

    A key theme of this course is expressiveness in programs. Thus, we require you to write code that is clean, concise, elegant, tested and appropriately documented. 20% of your grade on programming assignments will be based on these qualities. As is common in companies and large software projects, we use a specific coding style in this course: the coding style from How To Design Programs. In particular:

    Test Cases

    All functions must have unit tests that exercise the functions'.. um.. functionality. This is good software development practice but, more importantly, documents that you grok your code. We will not give full credit to untested functionality, even if it is correct.

    Good test cases:

    When writing test cases, resist the temptation to make them massive and complicated (so they “must be testing something”). Instead, write small, clean tests with clear purposes. A mega-test may expose errors you haven't yet tested for, but if your mega-test fails, figure out which aspect failed and write a focused test for that.

    It's a fabulous learning exercise to try to create a parsimonious test suite. Try doing it carefully and intentionally a few times, and you'll find yourself more able to do it automatically in the future. You'll also have a clearer sense of the core functionality you want from your code.

    Collaboration Policy (for assignments)

    (Can you access sites like Course Hero? Technically yes, but please do not, as such sites contribute little to your learning. If you ignore this advice, bear in mind that you must acknowledge the sites you use and may not "take notes away". So, you have committed academic misconduct if you use such a site but do not acknowledge it or if you copy material from such a site, regardless of acknowledgement.)

    These rules encourage collaboration that helps you learn. Nonetheless, submissions that follow these rules will not display the unusual properties that, under stricter rules, suggest academic misconduct. Thus, we will vigorously prosecute submissions that display these unusual properties.

    Collaboration Recommendations

    When you collaborate outside your team, follow the "Gilligan's Island Rule" (thanks to Larry Ruzzo, who inspired the whole collaboration policy): After discarding notes from a collaboration, spend at least an hour doing something at least as mindless as watching Gilligan's Island. If you can recreate your insights after such a mental emetic, you probably truly learned.

    When you work with your team, work together rather than "cutting up the problem" and working separately. (We may use code reviews and will use exams to enforce individual accountability for assignments.) To increase productivity and improve learning, use pair-programming techniques (of the form preached by Extreme Programming). Pair-programming in a nutshell:

    Plan ahead to schedule the face-to-face time this requires!


    Communication

    Most material will be distributed from the course web page http://www.ugrad.cs.ubc.ca/~cs311/. The Matygo site is for announcements, discussion boards, grade distribution, and a few restricted access handouts (though as we explore the system, we may decide to use it more). You are responsible for keeping up with announcements in lecture and (at least once every "business" day) with the Matygo announcements.

    Within the confines of the collaboration policy, use the Matygo discussion boards for everything except private matters (e.g., discussions about marks). We all benefit from that! However, please e-mail the teaching staff (see Course Staff) when you need us.


    Missing Lectures, Tutorials, and Exams

    You are required to attend all scheduled lectures, tutorials, and the final exam. If you miss a lecture or tutorial, catch up. Use (at least) the website, friends, the discussion boards, and office hours to do so. If you miss the final exam, you must follow the procedures defined in the Academic Concession Policy.

    (What if you miss a midterm? This course is an odd duck. See Grade Calculation.)


    Grade Calculation

    Course components are weighted as follows:

    Assignments:30%
    Midterms:30%
    Final:40%

    The instructor reserves the right to modify these weights (but does not anticipate exercising that right).

    You must pass the final exam to pass the course. If you fail the final, your course grade will be no higher than 45%.

    Each assignment will have equal weight, and we will drop your lowest assignment mark.

    Each midterm exam will have equal weight. Weird stuff: Your calculated mark for each midterm will be the maximum of the midterm mark you earned and the final exam mark you earned. Thus, midterms are effectively optional, and no special action is required if you miss them, although do let me know if you miss for an "excusable" reason rather than just choosing not to come. But write the midterms! (Nu, it couldn't hurt.)


    Acknowledgements

    This year 311 is using Programming Languages: Application and Interpretation by Shriram Krishnamurthi as the course text. With Shriram's kind permission, we are borrowing heavily from other parts of his CS173 course at Brown. Many elements of the course are also based on prior work by Kris De Volder, Gregor Kiczales, Norm Hutchinson, and other previous course staff.