CSCI1300
Fall, 2004
Clayton Lewis
Acknowledgements: Many of
the ideas in the course come from collaborations with
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’t assume any prior knowledge of or experience with computers. You’ll learn what programming is and how to do it. Most of your work will be with the C programming language, but you’ll 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’ve 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’t rush into this before you really know what you want. You can find reference information on the C language online at http://www.acm.uiuc.edu/webmonkeys/book/c_guide/
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’ll 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’ll focus on the logic of isolating problems in your programs, and we’ll 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’ll learn the C++ language. It’s a more advanced version of C, and I’ll 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’ll 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.
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 http://www.cs.colorado.edu/~main/cs1300/README.html. 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.)
Grading
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.
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’ll 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 “eggplant” is the magic word. Please don’t 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, www.colorado.edu/disabilityservices).
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.
We don’t have a good way to print in our lab. We’ll get around this issue, and save some trees, by using email to submit all assignments. Send your work to clayton.lewis@colorado.edu, with a copy to tanaraks@colorado.edu , 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’s 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: “I 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:
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
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.
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
Calendar
Note: “::” means
“after 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 1 FALL BREAK
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—do 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 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.