CSci 1901, Spring 2006: Syllabus

Class Staff

Dr. Maria Gini
EE/CSci 5-213, (612) 625-5582, Office hours: Monday 4:00-5:00 and Friday 1:15-2:15 or by appointment, Email: gini at
Teaching Assistants:
Richard Barnes
Email: barn0357 at
Matt Beckman
Email: mbeckman at
John Chilton
Email: chil0060 at
Alex Dean
Email: dean0131 at
Tae Hyun Hwang
Email: thwang at
Michael Rose
Email: rosex232 at
Matt Soukup
Email: souku024 at
Shana Watters
Email: watters at
All TA office hours will be in 4-240 EE/CS For office hours, look at the Staff and Office Hours page.

Class Hours

Lectures:MWF 2:30-3:20pmEE/CS 3-210
Lab Sec 002:Th 8:00am-9:55amEE/CS 1-260
Lab Sec 003:Th 10:10am-12:05pmEE/CS 1-260
Lab Sec 004:Th 12:30pm-2:15pmEE/CS 1-260
Lab Sec 005:Th 2:30pm-4:25pmEE/CS 1-260
Lab Sec 006:Th 4:40-6:35pmEE/CS 1-260


Abelson and Sussman, Structure and Interpretation of Computer Programs, 2nd edition McGraw Hill Book Company, 1996.

Additional reference books


"The revised (five times) Scheme report" (pdf) or (html). This is the official definition of Scheme and the best place to find a precise description of all the system defined procedures in Scheme.

Hailperin, Kaiser, and Knight, "Concrete Abstractions", PWS, 1999. This is a full fledged textbook on Scheme with many examples and exercises. Highly recommended.

D. P. Friedman and M. Felleisen, "The Little Schemer", Fourth Edition, MIT Press, 1996. An excellent booklet which takes the reader through a sequence of exercises in increasing order of complexity. Highly recommended.

R. Kent Dybvig, The Scheme Programming Language, 1996, Prentice-Hall. An online book, useful for the syntax and examples of how to use system defined procedures.


Allen B. Downey, Jeffrey Elkner and Chris Meyers Learning with Python, from

Phyton Tutorial by Guido van Rossum.

Python for Lisp Programmers, by Peter Norvig, Director of Search Quality at Google.

Class Webpage

All handouts, assignments, announcements, and any additional material will be available through the class web page at

Software Required

You are required to use the 'stk' software package, which is installed on the IT Labs computers (which you are entitled to use through paying the IT Instructional Computing Fee). STk is public domain and runs under Windows, Linux and Solaris. You can find information about it from the STk Home page You may install stk on your own system, but TAs will NOT be able to assist you with managing your own computing environment. You'll be able to do most assignments through dial-up access, but for the assignments requiring the STk graphics you'll have to use a computer or terminal running the X Window system.

We will also use Python. Python is in the public domain and widely available for Unix, Linux, and Windows.


Using the above weights, a total of 90% and up will earn you some level of A, 80% and up some level of B, 65% and up some level of C, 50% and up some level of D. You need a C- or higher for the class to count for the CS or CE major.
Exams are open book and notes.

Learning Goals

CSci 1901 is a required course for CS and CE students that should be taken in the freshman year. It is one of the courses required for admission to the CSci major, and is the first class in the sequence for majors. 1901 offers an introduction to the fundamental principles of programming and to different programming paradigms, with emphasis on the design of abstract data types and recursive algorithms. Computer science students need to acquire the reasoning and abstraction skills needed for designing algorithms and programs. This course teaches how to think as a computer scientist, by teaching the process of building abstractions to hide implementation details, of decomposing problems into simpler problems, and of controlling the intellectual complexity of designing large software systems.
1901 does not assume any previous programming knowledge; however it does have a co-requisite of Calculus I. This means you should either have completed Calculus I successfully, or should be taking calculus I. Some material from Calculus I, such as differentiating polynomials, may be used in 1901; moreover, the mathematical and logical reasoning skills used in Calculus I also play a heavy role in this class. Upon completing this course you should be able to:
  1. explain what a computational process is and be able to express computational processes using procedures in Scheme;
  2. explain what an abstract data type is, how to create new abstract data types, and how to express them in Scheme;
  3. use recursion as a problem solving method;
  4. explain how the process of evaluation is performed from the perspective of the computer and how procedural objects are created and manipulated;
  5. explain and use basic principles of program design, such as abstractions to hide implementation details, and problem decomposition to control the intellectual complexity of the problem;
  6. explain how to use different programming styles (functional, object-oriented, data-driven);
  7. use good programming style in the programs you write;
  8. design appropriate data structures and algorithms to solve a given problem, using recursion whenever appropriate;
  9. design, implement, and test a Scheme program that solves a given problem, and have some basic understanding of the computational complexity of your program.

Class Schedule

For an uptodate class schedule look at the Class Schedule page.
Here is the preliminary schedule. You are expected to read required sections BEFORE coming to class.

Week Dates Topics Chapter Pages
1 Jan 17-19 Overview, Scheme Intro, Expressions 1.1 1-25
2 Jan 22-26 Procedures and Name Scope 1.1-1.2 26-50
3 Jan 29- Feb 2 Recursion and Iteration 1.2-1.3 50-66
4 Feb 5-9 Data Abstraction, Pairs, Lists 2.1-2.2 79-104 1st homework due Monday Feb 5
5 Feb 12-16 Procedures as parameters and as return values 1.3, 2.2 66-78, 105-107 2nd homework due Monday Feb 12
1st In Class Quiz:
Monday Feb 12
6 Feb 19-23 Hierarchical Data, Sequences, Mapping and Filtering, Design Patterns 2.2 (omit 2.2.4) 107-126
1st Midterm exam:
Monday Feb 19
7 Feb 26-Mar 2 Symbolic Data, Sets, Trees, Huffman Coding 2.3 142-169
8 Mar 5-9 Multiple Representations of Data 2.4 169-187
9 Mar 19-23 Assignment and Local State 3.1 217-236 3rd homework due Monday March 19
10 Mar 26-30 The Environment Model 3.2 236-251
2nd In Class Quiz: Monday March 26
11 Apr 2-6 Mutable Lists, Queues, Tables 3.3 251-273
2nd Midterm exam: Monday April 2
12 Apr 9-13 Agenda, Constraints 3.3.4 274-285
13 Apr 16-20 Python 4.1 359-393
14 Apr 23-27 Python 4th homework due Thursday April 26
15 Apr 30-May 4 Python 5th homework due Thursday May 3
Final Exam: Wednesday May 9, 1:30-3:30

Scholastic Conduct

All work submitted must represent your own individual effort unless group work is explicitly allowed (like with your lab partner). You are encouraged to discuss course material and approaches to problems with classmates, the TAs, and the professor, but you should never misrepresent someone else's work as your own. It is also your responsibility to protect your work from unauthorized access. Collaboration on homeworks, or exams is cheating and grounds for failing the course. Any student caught cheating will receive an F as a class grade and the University policies for cheating will be followed. For further information on academic misconduct see Note on Academic Conduct for New Students and The Office for Student Academic Integrity. If you have any questions about what is and is not allowable in this class, please ask the course instructor.


Incompletes will be given only in very rare instances when an unforeseeable event causes a student who has completed all the coursework to date to be unable to complete a small portion of the work (typically the final assignment or exam). Incompletes will not be awarded for foreseeable events including a heavy course load or a poorer-than-expected performance. Verifiable documentation must be provided for the incomplete to be granted, and arrangements for the incomplete should be made as soon as such an event is apparent.

Expectations from students

This course is part of a Bush Foundation study to improve learning in large classes. As part of this project, a number of activities will be done during the semester. Activities will include some questionnaires to get your opinions, group activities, active participation to class, pop quizzes, and the creation of a Student Managment Team. We hope you'll be willing to collaborate to this important project, which will benefit students who will take the class in the future. Thank you in advance.

Class Attendance

Attending class is very important to learn the material, to clarify any misunderstanding, and to keep up with studying. To encourage attendance there will be 10 unannounced short quizzes or class activities during the semester. Each of them will be worth 1% of the final score.

Student Management Team

To increase communication between the students and the teaching staff, a Student Management Team will be created. The Student Management Team will include 2 students per lab and will be made up by students who volunteer to be part of the team. The team will meet outside of class 5-6 times during the semester to discuss student concerns, ways to improve the course, etc. No credit will be given to participate in the team, just the reward that comes from being able to discuss critically with others what is happening in the course and how to make it a better educational experience for everyone.


In the weekly 2-hour lab meetings, students apply concepts covered in lecture and in the textbook by creating working programs that solve a variety of problems. The general format for the labs is as follows:
  1. Typically a student works with another student on the labs. In some situations, such as an odd number of students or broken machines, with instructor consent, a student may work alone or in a group of three.
  2. Each lab is broken down into several steps that are graded by a lab instructor as they are completed. Students are allowed to re-do each step once for a higher grade before moving on to the next step. Steps not completed can be completed after the lab (with the lab partner) before the next week lab, using the University public computing labs or the student own computer. Work submitted for grading must run on the University computers because that is where they will be run and graded. All grading must be done in person with a TA unless another arrangement has been announced.
  3. In order to do well on the exams, students need to learn programming and problem solving skills that are developed by doing the lab work. As a rule of thumb, class performance will largely be determined by the amount of effort put in on the labs, in addition to reading the text and attending lectures.
  4. Each lab section has multiple lab instructors that are there to help as well as grade the lab steps as they are completed.
Copyright: © 2000-2007 by the Regents of the University of Minnesota
Department of Computer Science and Engineering. All rights reserved.
Comments to: Maria Gini
Changes and corrections are in red.