Plain text version | Style: Default, Black and White, Bath

University of Bath Logo
Dr Marina De Vos
Department of Computer Science
Friday, 28-Feb-2020 12:14:40 GMT

Programming I (CM10192)

This is the homepage of the Programming I unit which is mandatory year-long double unit for all first year undergraduate students in computer science. .

Each topic corresponds with one two-hour lecture, one one-hour lecture and a two-hour labs, except for weeks two to four where four hours have been allocated.
Labs should be attended, as they get marked and used to give feedback.

Here you can find: the people involved, the content, the Aims and Objectives, the venue , course material, the learning environment moodle, support lists and forums, the assesment criteria, the unit outline, the lab exercises and the coursework specification.


Course Content

  • Procedural Control: Introduction to procedural system development. Discussion of control structures: sequence, selection, iteration and recursion. Introductions to scope and extent, abstract data types. Design methods for such systems. Unit testing.
  • Objects: Introduction to object-oriented system development. Extending Abstract data types and scope and extent. Introduction of Objects and classes, inheritance and polymorphism. Design methods, code reuse and software maintenance. Large scale software development: strategies, software frameworks and design patterns. Comparison of programming languages. Event handling and multi-threading.
  • Data Organization: Basic data structures: lists, stacks and queues, … Basic search and sorting algorithms for these data structures. Files and streams. Data handling. Graphical user interfaces.
  • Limits of Computation: Introduction to complexity analysis and computability.

Aims and Objectives

  • Aims:

    • To introduce students to the development of computer software, including problem analysis, establishing requirements, designing, implementing and evaluating.
    • To provide practical skills at reading and writing programs and producing programs to solve real world problems.
    • To provide students with domain specific problem solving techniques

  • Objectives: On completion of this unit students will be able to:
    1. Understand the basic procedural control statements and design, implement, test and evaluate programs using this paradigm
    2. Understand the concepts of object orientation and design, implement, test and evaluate programs in this paradigm
    3. To be able to design, construct and evaluate substantial data structures by developing abstract data types
    4. Understand and argue the limits of computation


  • Lectures: To be confirmed
  • Lab classes: From the second week. Four hours during weeks two to four, two hours afterwards

Course Material

  1. Python:
    1. Allen B. Downey, Jeffrey Elkner and Chris Meyers
      How to Think Like a Computer Scientist: Learning with Python
    2. Mark Pilgrim
      Dive Into Python
  2. Additional Book:
    Bruce Eckel
    Thinking in Java, 3rd Edition
    Prentice-Hall, 2002
    ISBN: 031002872
    Free online copy:

    • This Java book is not only free, it also very well written and suited for both the beginning as the more experienced programmer.
  • General:
    1. Pre-course Material: Pre-Course Material
      • Some introductory material to get you started.
    2. Unix/Linux Intro: Introduction to Unix/Linux
      • Explains the basic linux/unix commands and has an excellent section on Makefiles. Not only useful for this unit but something all (future) computer scientist need to know
  • Software:
    1. Python 2.5 (
    2. Eclipse 3.2 (
    3. Pydev plug-in (
    4. Java JDK 5 or higher (
    5. BlueJ (

    Moodle From this year, this unit will be run through the e-learning Moodle platform. The course can be found at . The site contains all the lecture hand-outs, quizzes to test your understanding of the material, lab exercises, coursework descriptions and discussion forums. The portal will also be used to submit your coursework, to announce information about the course, provide feedback on your work and lab status. Make sure you are subscribed to the forums to obtain up to date information about this unit.

    Support List and Forums

    • Moodle forums Three moodle forums have been set up to ask general questions about the lectures, labs and coursework. No code can be posted on these forums.
    • tutors-programming1"at" This mailing list can be used to contact the tutors/lecturer of this unit.
      This list should be used to submit lab sheets in case you could not attend the lab due to illness or other mitigating circumstances. Furthermore, more specific questions regarding courseworks can be posted on this list. To allow for a faster response to your questions, do not contact tutors/lecturers individually.

    Assessment (Provisional)


    The formal assessment of this double unit year long unit is based on 50% coursework and 50% written exam.

    • Exam: This unit has two exams - one at the end of the first semester and one at the end of the second semester. For each exam paper you will need to answer three questions out five on the more theoretical issues of programming. You could be asked to write small programs.
    • Coursework: In each semester you will have to complete a number of courseworks. For semester one, you will be asked to write three programs in Python and 3 programs in Java.
    • Labs: The first semester labs are mandatory. Each week you will be presented with a new lab sheet with programming exercises and other practical work. You will have until the following week to satisfactory complete them. Checking of your work will be done by your peers and verified by your lab tutor. Therefore, in order to have you labs checked you should attend the labs. Failure to complete the labs will result in having no marks for the coursework part.
      You can check your lab status via Moodle by accessing your grades.

    Course Outline

    The transparencies and handouts are available via Moodle

    Lab Classes

    The exercises for the lab session can be accessed via Moodle.
    The labs are designed to prepare you not only for the coursework but also for the exam and your future careers as computer scientists.


    First semester coursework will be handed out in week four and week ten