CS117 Programming Methodology

What is this new course?

This is a mandatory one-hour course, to be taken as a co-requisite with the computer science department's programming language courses. Currently, these are CS137, Pascal; CS157, Fortran; CS167 C; CS177, C++. Java is being offered this Spring on Saturday, so it will not be a part of this arrangement. There are two aims for this course. The first is to improve each of the language courses by giving students important hands-on experience with basic principles of software engineering. Specifically, this means principles of code reading, program design, testing and debugging. The second aim is to free each of courses from the necessity of teaching these principles. Students who take more than one language course should not have to cover the same programming methodology again. It will be offered as a co-requisite every Fall and Spring semester.

Do I have to Take it This Semester?

Since the course is a co-requisite, you will need to add the course if you are enrolled or planning to enroll in one of the language courses. There are two situations where you will not need to take the course:

  1. You will not need to take it if you have already done so in conjunction with one of the language courses
  2. You will not need to take it if you have provable experience of writing programs of a medium-to-large size (in any language), or of working on a group programming project in a commercial, industrial or research setting. It is at the instructor's discretion to accept or reject proof that is offered. Typically a source-code listing will do the trick.

Who should take this course?

CS117 is a co-requisite for CS137, CS157, CS167 and CS177. Students who have not taken any language will take it concurrently with the language course. Students who have taken it once need not take it again even though they may choose to take another language course. Typically, a student will take CS117 and CS167 (C) in one semester and perhaps CS177 (C++) or Java later.

Why you should take this course?

The legalistic answer is that you cannot take a language course in the CS department without taking CS117 once. The more important educational answer is that learning to program is not just about learning the language. It is about problem solving, organization and communication. This course will give you enough skills to be a good programmer, not just someone who knows the language, whether it is Pascal, C, Fortran, Java, or C++.

Why not take software engineering?

The computer science department offers a course for CS majors called Software Development (CS371). In that course, students learn how to work on a large software project in small groups. This is the most important method of program development in industry. CS majors need to have a taste of this before tackling the real thing a their first job. However, many people are occasional programmers; they are not professional programmers, but need to write a program to carry out some special task in their own field. They might be biologists writing a simulation, engineers writing a control program, or almost anyone doing some form of data analysis. They very often work alone, so a full-blown course in software engineering is not appropriate. Moreover, there are some basic principles of programming that CS majors acquire during their 200 level courses that are assumed in CS371. It is these basic principles that are the subject of this course. Having completed this course, you will probably be ready for CS371, but in this case, you probably ought to be a CS major anyway.

Overview

The course is in five parts. They are:

  1. code-reading: this concerns syntax, program structure and layout
  2. hand simulation: the basis of all testing and debugging methods
  3. design: this covers both top-down and object-oriented methods
  4. testing: how to tell whether your program is working right
  5. debugging: how to track down bugs, using tracing, assertions, exceptions, and debugging software

Assignments

For each of the five modules you will complete an assignment that will incorporate the ideas from the module. These assignments will, of course, be specific to the language you are learning. They will form part of the set of assignments for the language course. Your grade in this course will be awarded according to your performance in these five assignments. The instructor for this course will work closely with the instructors in the language course to make sure that continuity is maintained.

It is the aim of the course to reach a good level of knowledge by week five of the semester, so that the principles learned here can be used in the subsequent assignments. The breakdown of the module assignments, by week is thus:

Week 2: design
Week 5: code-reading
Week 6: hand simulation
Week 8: testing
Week 11: debugging

So what do I do now?

CS117 is scheduled at 2:30-3:20 pm. on Mondays only, in SH102. If you interested in taking CS117 this semester, contact me, Roger Hartley, at 646-1218, or e-mail me at rth@cs.nmsu.edu. If you want to talk to me, my room is SH148.