Fall, 2004

Clayton Lewis

Acknowledgements: Many of the ideas in the course come from collaborations with Michael Main, John Gillett, and Zach Bergen. Other ideas come from John Bennett, whose robotics course is the model for many aspects of this one. The software we are using was collected and arranged by Michael Main.

Special note to students: I've been teaching 1300 for many years, and almost every time there's significant innovation in the course. This time is no different! There'll be a number of experimental aspects of the course this summer, and I'll need your feedback and suggestions to make the course work well, and to learn as much as we can to guide future versions of the course.

Thanks in advance for your help, Clayton

Course overview

We won稚 assume any prior knowledge of or experience with computers. You値l learn what programming is and how to do it. Most of your work will be with the C programming language, but you値l get a little exposure to how computers work, including the idea of machine language, and C++, a more advanced version of C that is learned in later Computer Science courses.

Course features and rationale

Use of C. C is a good first language because it is easy to understand what is happening in the computer when you run a C program. Working in C gives you a solid conceptual foundation for any work you do with computers.

No textbook. I致e never found a textbook that approaches programming the way I believe is best. So I will be providing self-contained notes that cover all of the key material in this course. You may want to buy a book as an extra reference, but don稚 rush into this before you really know what you want. You can find reference information on the C language online at

Competitive team projects. For many people, friendly competition is fun, and a good source of motivation. Being on a team means that there are people to help you if needed, and vice versa. And almost all software work you'll do in the "real world" will be done on a team. In this course, your final project will be done in teams, and you will work together with other students on most of the work in the course.

Computer games and education. Your final project will be to create a program that plays an educational game. You'll have the opportunity to learn about how games can be used in education.

Encouraging mutual support by students. As I've already mentioned, computing is a team activity, and in real life you'll succeed or fail in large part according to how well you can support the people you work with. In the here and now, you will all accomplish and learn far more by helping one another learn, than by working as a bunch of loners. Part of the reason for this is the old saw, "The best way to learn something is to teach it."

So, in this course you are encouraged, and often required, to work together on all work except quizzes (called language and programming checks). You値l be able to support one another in learning as much as you can.

Because there is a body of knowledge and skill that you must master to go forward after this course, we will need to check along the way that you are learning what you need to learn in. During these language and programming checks you'll be showing what you can do on your own, but preparing for them will be a group activity.

Learning to debug. Writing programs is one thing, and finding problems in them is another. Both skills are needed as you go forward, and our experience is that we need to give you a stronger start on debugging here at the beginning of your studies. In this course we値l focus on the logic of isolating problems in your programs, and we値l have a challenge of your abilities in this.

Problem decomposition. The way to write programs that solve big, hard problems is by breaking down big, hard problems into small, easy problems. You'll learn how to do this.

Intro to C++. As you go on in Computer Science courses you値l learn the C++ language. It痴 a more advanced version of C, and I値l give you a head start by expaining some of the differences between C and C++.

Extra project opportunity. If you are caught up on required work, you値l have the chance to propose and carry out an extra project, exploring something of interest to you. This could be learning Flash, a system often used to add interactivity and multimedia to Web pages, PROLOG, a programming language unlike any other, researching the role of communications and computing technology in politics, medicine, or education, or you name it. An extra project is required to earn an A.

Evi Nemeth certification. Evi is a distinguished computer scientist, recently retired from our faculty, who built a great reputation as a teacher of programming. You'll have the opportunity to do some Evi-style programming exercises, if you choose to, to see if you measure up to Evi's demanding standards. Getting your Evi Nemeth certification will count towards an extra project.

Using your own computer

You'll have access to computer labs on campus whenever space is available, not just during the one hour of scheduled lab time each week... you do not have to have your own computer. But if you have your own computer you can install the course software on it; you can download the software from Note that this site has various exercises and notes on it, in addition to the software; you can use these if you find them useful but they are NOT assignments for this section of the class. If you need help with downloading or installation, classmates or course staff can give you a hand. Unfortunately our software will not work on Macintosh machines (although it will probably run on a PC emulator running on your Mac.)


Your grade will be based on your individual performance on language checks and programming checks, the contributions you make to your team's project work, and your extra project (if you qualify).Your grade will NOT be affected by how well your team fares in the competition.

  • To earn a C-, the minimum grade needed to take courses for which CSCI1300 is a prerequisite, you need to pass all language, design, and programming checks, and participate in your team's presentation of its final project program, but you may not have completed all of the programming exercises or contributed effectively to your team's work on the final project.
  • To earn a grade in the B range you must have met the requirements for C- AND completed all of the programming exercises, including contributing effectively to your team's attempts on the project milestones.
  • To earn a grade in the A range you must have met the requirements for B AND proposed and carried out an extra project.

Notice that there is NO CURVE in this course. Your grade depends only on your work.


This course carries four credit hours. Normal workload for undergraduate course includes the scheduled class meetings PLUS two hours of work out of class for each hour in class. Since this is a 4 credit hour course, that means I expect you to spend about 8 hours on work outside of class. I値l be asking you to indicate how much time you have spent on the course on each item of work you submit.

This course is designed for people with little or no computer background. If you do have background, I will be asking you to do some extra work if necessary to keep you engaged in the course it has happened too often that people who have programming experience fail this course because it is too easy at first.

If you read this note, you are entitled to a worthless prize at the second class meeting if you can tell me that 兎ggplant is the magic word. Please don稚 tip off your friends about this!

Do you need accomodation for a disability?

If you qualify for accommodations because of a disability please submit to me a letter from Disability Services in a timely manner so that your needs may be addressed. Disability Services determines accommodations based on documented disabilities (303-492-8671, Willard 322,


I will not take attendance formally. BUT it is very unlikely that you will do well in this class if you do not attend regularly, because you are almost certain to fall behind if you are not in class. Also, you are responsible for knowing about any announcements (such as changes to assignments or dates) that are made in class.

Do you have a conflict with a religious observance?

Let me know ahead of time so that I can do my best to meet your needs.

How to turn in your work, including time reports.

We don稚 have a good way to print in our lab. We値l get around this issue, and save some trees, by using email to submit all assignments. Send your work to, with a copy to , and be absolutely sure you write CSCI1300 at the beginning of the subject line, with the first four letters in caps. If you do not do this you may not get credit for your work, because it may get lost in Clayton痴 horrendous tangle of email.

I STRONGLY encourage you to work with other students on the exercises, BUT I need an email submission from each person individually, even if the submissions include the same material.

On each submission, you must include the following time report, with the blanks filled in: 的 started work on this assignment on ___ (date), and I have spent ___ hours outside of class working on this. I also spent ___ hours working on _______, which is related to the course, since my last submission.


If you are unable to complete an exercise, or if your submission has problems, you must complete or correct your work and resubmit it. There is no penalty for this, BUT I do require that you submit something, however incomplete, when the assignment is originally due. And I expect you to provide a resubmission within a week (your grade may be affected if resubmissions are later than that.)

Language Checks

To prepare for further CS courses you need to master the key features of the C programming language. You will satisfy this requirement during the semester by passing a series of quizzes. A language check you do not pass may have to be retaken; all language checks must be passed by the last regular class meeting before the final.

Design Check

Because problem decomposition is a key part of program design, you'll have one quiz that requires you to demonstrate that you can break up a big problem into smaller ones in a sensible way.

Programming Checks

It's possible to know the features of a language well enough to pass a paper and pencil test, but not be able to use your knowledge to write a working program. To make sure this does not happen, you'll be given two programming exercises to complete as programming checks. A programming check you do not pass must be retaken; both programming checks must be passed by the last regular class meeting before the final. You must schedule a time to take your Final Programming Check whenever you are ready, after passing Programming Check 1.

Important points about the language, design, and programming checks:

  1. Unlike traditional exams and quizzes, the checks only cover material you must master to pass the course. Getting 70% (or whatever) is not adequate you must get 100% to pass.
  2. There is no "curving" of grades in any aspect of the course, so you cannot possibly lower your own evaluation by helping other students to do well (other than by neglecting your own work.) My fondest wish is that everyone in the class will earn an A.
  3. Unlike homework, all of the checks MUST be completed on your own, without assistance, under the terms of the CU Honor Code, which I support fully. If the Honor Council finds that you have violated the Honor Code in this class, I will assign an F.

Project competition

In the latter part of the course you will join a team that will develop a program that plays an educational game called "tic-tac-toe products". The last event of the course will be a competition in which the programs from all of the teams in the course will be matched against each other. This competition will be held at the final meeting, Saturday, Dec 11. Attendance is REQUIRED.

Extra Project Requirements and Ideas

A brief proposal is due by email on or before Nov 8. To be qualified for an Extra Project you must have passed all Language Checks and Programming Checks that have been given up to this date (but not the Design Check or Final Programming Check.) The proposal must describe your topic, say why you are interested in the topic, describe the work you will do, and include a timeline for completing the work.

A brief progress report is due electronically on or before Nov 24. Outline the work you have done, and any changes in your work plan.

Here are a some sample project ideas:

Submit a brief report on how computer games could be used as educational tools. Alex Repenning of CU is an expert on this; you may want to contact him for leads.

Submit a brief report on how technology can promote community (or harm it.) Robert Putnam of Harvard has written about the decline of community in the US in a paper (and book) called 釘owling Alone. His work is an interesting starting point, and you can find other interesting work on the Web.

Learn to use Javascript and complete a programming project using it.

Learn to use PROLOG, a very unusual programming language.

These ideas are just examples: I want you to come up with something that connects to your own interests.

Your Work Status

will be recorded here once the course gets under way.

Miscellaneous notes and examples

discussed in class are posted here.

Work Schedule

The typical timeline for topics we cover, after some startup, will generally, but not always, be this:

Friday: Introductory presentation and discussion in class; after class, read the notes and attempt the exercises.

Monday: Discussion, some hands-on

Tuesday (Lab): Hands-on work on exercises

Wednesday: Discussion, some hands on

Friday: Exercises due; Language check(quiz) on topic; intro to next topic; after class, read notes on next topic, and so on


Note: :: means 殿fter class today; LC means Language Check; DC means Design Check; PC1 is first programming check


Aug 23 Intros, pictures :: read syllabus, read/try Notes 0

Aug 24 (Lab) work on Notes 0; turn in Exercise 0-0.

Aug 25 How computers work :: read/try Notes 1 "How computers work"

Aug 27 How computers work, cont.


Aug 30 turn in Exercise 1-1; Compilation

Aug 31 (Lab) Lab Notes on Compilation ::read Notes 2 "Information holders"

Sep 1 Information holders

Sep 3 Information holders; Turn in exercises 2-0 through 2-3


Sep 6 NO CLASS (Labor Day)

Sep 7 (Lab) Lab Notes on Information Holders; work on Notes 2

Sep 8 dry run of LC1 on Information Holders

Sep 10 turn in exercise 2-4; LC1 on Information Holders ;Control Flow:: read Notes 3



Sep 13 Control Flow

Sep 14 (Lab) Work on Notes 3; retake LC1 if necessary

Sep 15 Control Flow

Sep 17 turn in problems in Notes 3;LC2 on Control Flow; Intro to Functions :: read Notes 4


Sep 20 Functions

Sep 21 (Lab) work on Notes 4

Sep 22 Functions

Sep 24 turn in ex from Notes 4; LC3 on Functions; More Pointers and Functions :: read Notes 5


Sep 27 Files and character strings

Sep 28 (Lab) work on Notes 5

Sep 29 Files and character strings; turn in solutions to problems 5-1 through 5-3.



Oct 4 Files and character strings

Oct 5 (Lab) PC practice run

Oct 6 turn in solutions to problems 5-4 and 5-5.

Oct 8 Review


Oct 11 Review

Oct 12 (Lab) PC1 :: read Notes 6 (Note: this is a change妖o this before Weds class)

Oct 13 Intro to problem decomposition (see these special notes)

Oct 15 Problem decomposition


You can make an appointment to take the Final Programming Check whenever you are ready, once you have passed PC1. Read these notes to prepare.


Oct 18 Problem decomposition

Oct 19 (Lab):: turn in ex from Notes 6 after lab today

Oct 20 DC; Intro to gamelet programming::Read Notes 7

Oct 22 Gamelet programming



Oct 25 Gamelet programming

Oct 26 (Lab)Work on Notes 7

Oct 27 Gamelet programming

Oct 29 Turn in Ex from Notes 7::Read Notes 8 (short) and Notes 9


Nov 1 C++; work on debugging

Nov 2 Debugging contest

Nov 3 C++

Nov 5 Turn in Ex from Notes 9; read Notes 10 (game AI)


Note: A list of Clayton's projects for which he is seeking undergrad help is here.


Nov 8 Extra Project proposal due; LC4 on C++

Nov 9 Work on Notes 10

Nov 10 Discussion

Nov 12 Turn in Ex from Notes 10 ::read Notes 11 competition rules

Nov 15 Finalize teams for game competition; design critiques

Nov 16 Team work time

Nov 17 Team work time

Nov 19 Game AI


Nov 22 Team work time

Nov 23 NO LAB: Thursday schedule in force

Nov 24 The Wig Story; Extra Project Progress Report due

Nov 26 NO CLASS: Thanksgiving


Nov 29 Program testing

Nov 30 Team work time

Dec 1 Program testing contest

Dec 3 Discussion/Team work time


Dec 6 Discussion/Team work time

Note: Evi Certification notes now posted.

Note: be sure you have noted the change in requirements for Notes 11.

Dec 7 Discussion/Team work time

EXTRA times to take Final Programming Check: Weds Dec 8, 830-930, 1-3, all in DLC.

Dec 8 Team entry for game contest due, as described in Notes 11; !!LAST DAY to pass Final Programming Check!!


Dec 11, 1030-100(SATURDAY) Final meeting (team competition and extra project presentations; extra project reports due) Note: there is no final exam, but attendance at this meeting is required. Feel free to bring your friends.