Proposal for New Subject

COMP1091 Computing 1C

Background

The essential aim of this subject is to provide an alternative to COMP1011 for non-major students undertaking substantial studies in Computing.

Some schools in the University either already teach intoductory Computing subjects or are thinking about doing so, in the context of new degrees they are developing (e.g. the new financial mathematics (?) degree offered by the Maths school). Many of these students will continue on with further studies in Computing, at least to the level of COMP2011, and the new flexible course structures being proposed by the University make this easier to do. Discussions with these Schools have suggested that they would like their students to be trained in C (or C++) programming.

In the past, this was (somewhat) handled by the COMP1811-then-COMP1821 strand in first year. However, there were many problems with this strand, not the least of which was the fact that it did not provide an effective entry point into further computing studies. The plan with this subject is that students would undertake COMP1091 and then enter COMP1021 and continue on the same path as our majors.

There are several ways this could be handled. (1) We could try to persuade them that Haskell-then-Java, was the most appropriate path for their students. (2) We could ignore them and let them go and teach introductory Computing subjects themselves (as already happens in some Engineering schools). (3) We could offer a servicing subject that meets their needs and integrates well into our own subjects.

Attempts at (1) in the past have failed. The offerings from (2) are dubious, and certainly don't assist students in continuing on with further computing studies with us.

There are several advantages to putting these students through a different program to our own majors:

The main disadvantage that I see: The first point is mitigated somewhat by the fact that the current COMP1021 offering does not draw heavily on Haskell knowledge. The second could be handled by offering a short certificate-course in Haskell for COMP1091 students who wished to undertake later year subjects that used Haskell.

Handbook Entry

COMP1091
Computing 1C
Staff Contact: ???
CP15   S1 or S2   L3   T3
Prerequisites: HSC Maths (?)
Corequisites: ???
Notes: Excluded COMP1011 (?)

Introduction to computers as workplace tools: operating systems, spreadsheets, databases, web searching and authoring, professional ethics in using computers. Introduction to problem solving via computers: defining problems, reasoning about problems, designing and testing solutions. Introduction to programming (in the C language): data, control, functions, libraries, fundamental algorithms. Practical work: laboratories and programming assignments.

Syllabus Discussion

Introduction to computers as workplace tools (3 weeks)
The aim is to introduce common tools that students across a wide range of occupations are likely to use. Start by introducing the idea of interfaces to computer systems (e.g. Windows, Unix/X), and basic concepts like files, folders, applications, ... Show correspondences between Windows interface model and Unix interface model. Then look at a couple of applications like: spreadsheets (Excel), databases (Access) and document authoring (Netscape Composer). Also say a little bit about effective use of the Web as a research tool.

Introduction to problem solving via computers (2 weeks)
Essentially, this is an introduction to software engineering. I'm not sure whether this should appear as a separate strand, or be integrated into the discussion of C. I certainly wouldn't suggest trying to spend a lot of time on this before they've had a chance to play with programming a little and see what the problems are. Then again, I guess you could always make the purist argument that we should spell out up-front the kind of methods they should use in dealing with C ... I worry about the motivation at this early stage though ...

Programming in the C language (8 weeks)
The standard introduction to C programming ... data structures, input/output, control structures and discussion of simple algorithmic paradigms (e.g. summing a list of numbers), packaging via functions, packaging functions into libraries, brief trip into algorithm comparison (e.g. via sorting). Throughtout this, we also ned to introduce them to some of the useful C libraries (string.h, ctype.h, ...).