Last updated: 20 April 2015

Home Page for CM10228
Principles of Programming 2   2015

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 for support & will be where you submit your coursework and receive further feedback beyond what you get in the labs.

Important note on Labs:  This course has labs from the first week, but not before the first lecture.  We try to ensure that all labs are scheduled after the first lecture.

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 three 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 2015 lecture notes will be updated on the below grid more or less on the day they are given.   Older lecture notes are mostly from 2014.  You can always check the age of a file by looking at the date in it (usually at the bottom).  Though note that I do the dataing by hand and sometimes forget.  Occasionally pages get updated after the lecture if someone finds a bug!  It's also possible that lectures or lecture order may change, or even coursework dates.  Be certain to read the news forum on moodle regularly. It is your responsibility to read thoroughly the communication that comes to you by email, on moodle, and in the coursework specifications.

 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
Lab: lists in different languages
Coursework 1 handed out
3  Feb
Sorting,  Searching & Complexity
Logs & Trees, Sorting & The Big O

Support for Coursework 1
10 Feb

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

Going Non-linear.
Errors, Exceptions and Nonlinear Control
; Concurrency and Threading
Support for Coursework 1, Due Friday at 11pm 24 Feb

Mayhem & Getting in Synch
When Threading Goes Bad;   Intro to Networking

Coursework 2 handed out.

3 Mar

Networking, Internet & Law
Networking, Protocols & the Internet; Intelligent Search
Lab: threading and networking
Coursework 1 handed back (or early the next week)
10 Mar
Two hour lecture on Thursday for everyone.  Starts at 10:15!
Pretty Pictures
Intro to GUIs; Components, Layouts and Panes Galore;
Support of Coursework 2
Coursework 2 Due Friday at 11pm
17 Mar

Applications of Search (AI).
Applets & Java's Sordid History; Searching in Advance

  CW 2 marked & debugged in lab;
Coursework 3 handed out
24 March


Learning & Reality
More Searching & Learning;
Intro to SQL 
Support of Coursework 3  14 Apr

One Last Thing
Databases & Reliability;
Support of Coursework 3, Due Friday at 11pm 21 Apr

no lecture Thursday;
Practice Exam Tuesday! 
Demo & partially mark CW3 in lab

Revision lecture (you bring the Q&A) Tuesday; no lecture Thursday.
Emergency labs for those who missed marking Coursework 3 handed back (or week after)
7 May

If you want to meet with Dr. Bryson, schedule an appointment during her office hours.  Please try not to email her! unless you find a broken link or other error in the lecture notes, or it is something a tutor can't possibly 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 English for lecturer) first.  The best time to talk to her is immediately after a lecture.

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 that covers all of this course. However, in Lecture 3 I recommend a number of texts that might help you better understand the material.  Note that some 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 be available in the Library, and may be in the campus bookstore.

In 2011 many students had trouble understanding static typing.  These notes on static seemed to help.  Notice that you should only use static typing when you have a very good reason, and you should justify it in the comments.

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 are 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