CMPUT 325 Schedule and Outcomes
2. Syllabus




2.1 General Information

Location: ECHA L1 350 computing lab. Note: ECHA is the building on the SW corner of 87 Ave and 114 St that looks like it is build of multi-colored Lego bricks.

Professor: Jim Hoover jhoover@ualberta.ca

Teaching Assistants:
Tim Put tput@ualberta.ca
Mohammad Ajallooeian ajallooe@ualberta.ca
Arash Karimi akarimi@ualberta.ca


2.2 Course Policies

CELL PHONE RULE: If anyone, including the professor, has their cell phone ring during lecture then they have to bring cookies for everyone to the next class. This is a big class this term, so you don't want that to happen to you!

CMPUT 325 is subject to the Department of Computing Science policies. https://www.cs.ualberta.ca/resources-services/policy-information In particular, pay attention to these Computing Science Course Policies. https://www.cs.ualberta.ca/resources-services/policy-information/department-course-policies The appropriate collaboration model (as described in the policies) will be identified for the various course deliverables.

Important Note: Because we will be posting the answers to the assignments the week it is due, and taking up the assignment the class after it is due, there can be no late submissions of assignments.

2.3 Course Structure and Evaluation

The main object of this course is to change the way you think about computation and how to program. We will do it by focusing on a style of programming commonly called Functional Programming. To truly appreciate what this course is about, you need to have these pre-requisites:

  1. you should have written at lest 10k lines of imperative code

  2. know about these CMPUT 201 and 229 notions
    1. the notion of program state
    2. pointers and references
    3. memory allocation via the stack and heap
    4. procedure calling conventions (stack frame, local variables, parameter passing, return ing results)

  3. know the basic algorithms and complexity from CMPUT 204

  4. know the basic logic and proof techniquess from CMPUT 272
This course will be conducted in an active learning style where we mix the presentation and discussion of ideas with actual exercises done using the programming environments installed on the lab machines. So be prepared to work on small problems in class, and be called upon to present your solutions. It is not a good idea to miss class.

The course will also have a flipped aspect. Unlike the typical form of course where new material is presented in class, and then you do assignments after, in a flipped format you prepare for the new material beforehand. The class will then build on what you have learned the previous week.

Each class there will be a brief formative quiz (no affect on your final mark) which will test your understanding of the concepts so far. This is an experiment, and the details of how we handle the quiz will evolve (such as when to conduct the quiz during the three hours). The goal is to have the quiz assessed by the TAs during the class so that we can review common problems.

There is no scheduled lab for this course, but we will arrange tutorial sessions once class begins.

The summative components of this course are:
Course Work Due Date Weight
Assignment 1 In class, Jan 20 10%
Midterm 1 In class, Feb 3 15%
Assignment 2 In class, Feb 24 10%
Midterm 2 In class, Mar 10 20%
Assignment 3 In class, Mar 31 (revised from Mar 24) 10%
Final Exam In class, Apr 7 35%


Special Dates
Date What
Jan 6 First Class
Feb 17 Family Day, no class
Apr 7 Last Class, Final Exam held in that class
Mon May 5 09:00 Deferred Exam


2.4 Course Materials

In class, you can use the lab machines, or install the programming environments on your own laptop. Of course to work on things outside of class it is probably easier to install the environments on your own machine. They are available for Mac OSX, Microsoft Windows, and Linux (Ubuntu for sure). See below for how to obtain them.

Web resources for the course should all be accessible through eclass. There is no specific text for this course, but there are a number of excellent on-line references available which will be mentioned as needed. Also, if you encounter a good reference, tell us about it and we will add it to our list. Here is a set of references, which will grow as the course evolves over the term.
SICP - Structure and Interpretation of Computer Programs
by Abelson and Sussman
html http://mitpress.mit.edu/sicp/
pdf http://sicpebook.files.wordpress.com/2011/11/sicp.pdf


We will be using the following programming environments, which you can obtain for your own machines.
Language Version Distribution
Python 3.3.2 http://downloads.activestate.com/ActivePython/releases/3.3.2.0
Scheme (aka Racket) 5.3.6 http://racket-lang.org/download/
Haskell 7.6.3 http://www.haskell.org/platform/


2.5 Academic Integrity

The University of Alberta is committed to the highest standards of academic integrity and honesty. Students are expected to be familiar with these standards regarding academic honesty and to uphold the policies of the University in this respect. Students are particularly urged to familiarize themselves with the provisions of the Code of Student Behaviour (online at http://www.governance.ualberta.ca/CodesofConductandResidenceCommunityStandards/CodeofStudentBehaviour.aspx ) and avoid any behaviour which could potentially result in suspicions of cheating, plagiarism, misrepresentation of facts and/or participation in an offence. Academic dishonesty is a serious offence and can result in suspension or expulsion from the University.
2. Syllabus
CMPUT 325 Schedule / Version 2.31 2014-04-04