Last updated: 11 August 2012: set up coursework deadlines & spring break for 2013.  Lectures still need adjusting.

Home Page for CM10228
Principles of Programming 2   2012

Dr. Joanna Bryson

The schedule on this page is subject to change.  This page is provided as a resource, mostly so you can find lecture notes and problem sets.  There is also a moodle page associated with this course, which contains forums & will be where you submit your coursework.

Note on Labs:  Labs start in the very first week, and should all be after the first lecture.  If anyone has a Monday lab, let me know. 

Unlike CM10227, you are not marked for semi-mandatory laboratory exercises in this course.  Instead, there are three separate courseworks which will be due every few weeks.  All of these will be marked within a couple of weeks of submission so you get fast feedback.  The exam (worth half your mark) will consist of answering short questions on the lecture material.  There will not be much code on it, and none that you have to write yourself.  It is, nevertheless, hard, so keeping up with the lectures is a very good idea.

Note on old Lecture Notes The 2013 lecture notes will be updated on the below grid more or less on the day they are given.   Older lecture notes are mostly from 2012.   You can always check the age of a file by looking at the date in it (usually at the bottom).  Occasionally pages get updated after the lecture if someone finds a bug!

 Lecture Topics (exact organization still subject to change)
Lab Topics & Coursework

First Lecture
Special notes
Programming, languages, data structures, and algorithms.
Reinventing the Wheel, Algorithm Examples: Sorting
Lists in different languages
7 Feb
Sorting,  Searching & Complexity
Logs & Trees, Sorting & The Big O
Pair Programming
Coursework 1 handed out
14 Feb

Believe in Space: Searching, Hashing & Structure.
Searching & Hashing
, Space, Class & Interface
Support for Coursework 1 21 Feb

Going Non-linear.
Errors, Exceptions and Nonlinear Control
; Concurrency and Threading

Support for Coursework 1, Due Friday at 11pm
28 Feb

Getting in Synch.
When Threading Goes Bad
; Intro to Networking,

Coursework 2 handed out,
Lab on Networking

6 Mar

Networking & Protocols
How to Network,
Internet Protocols
Support for Coursework 2 13 Mar

Graphical User Interfaces.
Intro to GUIs, Components, Layouts and Panes Galore
Coursework 2 due, marked/debugged in lab;
Coursework 3 handed out
20 Mar

Spring Break
Coursework 3

Applications of Search (AI).
Intelligent Search, Searching in Advance
Support of Coursework 3 29 Mar

IP (The Real World).
Applets & Java's Sordid History
Support of Coursework 3 17 Apr

Relational Databases & SQL.
Django (2 hour lecture)
Coursework 3 due; demo in lab 24 Apr

Relational Databases:  Reliablity & Hardware.
Databases & Reliability
Django (optional lab)
1 May
Revision lecture Thursday.

revision week

8 May
possible revision with tutors

If you want to meet with Dr. Bryson, schedule an appointment during her tutee office hours.  Please try not to email her! unless it is really something a tutor can't help you with.  Note that extension requests go to the Director of Studies, not to Lecturers.  If you do email Dr. Bryson (or any lecturer) you should read these helpful tips about how to email a professor (US for lecturer) first.

Is there a text? (and other resources)

The course material you are responsible for in the exam is all present in the notes linked above.  There is no single textbook for this course. However,
in lecture 3 I recommend a number of texts that might help you better understand the material.  Note that a number of these are available online free, at least if you are logged in at Bath or through VPN to Bath – links are provided on the lecture 3 notes.  These books are also available in the Library and the campus bookstore.

In 2011 many students had trouble understanding static typing.  These notes on static seemed to help.

Stanford has all of their introductory computer science lectures on line. The first one, Programming Methodology, is in Java. The second one, Programming Abstraction, has more of the content in this course e.g. more complex sorts. That the examples are in C++ shouldn't be too big of a problem (and if it is, there's a lecture about the differences between C++ and Java at the beginning). Wikipedia actually describes most of the algorithms covered in class extremely well.  There are also little animations so most of you can watch the sort algorithms work. Here's some more animations. Here are some excellent notes on data structures, sorting, searching and complexity from Aukland. Of course, sorting algorithms can be quite boring until you add sound effects.

In case you are wondering, the IDE I use (which you'll see a couple times in class) is eclipse.  It is available on the BUCS machines.

I thought this was fun, but hardly anyone ever played with it so it's no longer an assigned tutorial.  But if you are bored, you may want to play with Robot competitions.

page author: Joanna Bryson