CS 307: Foundations of Computer Science (Honors)


Gordon S. Novak Jr., novak@cs.utexas.edu, Office Hours: MWF 10:00 - 11:00 in TAY 4.140C.


Tal Tversky, tal@cs.utexas.edu, Office Hours: Tues. 10:00 - 12:00 in PAI 3.08 .


Max Hailperin, Barbara Kaiser, and Karl Knight, Concrete Abstractions, Pacific Grove, CA: Brooks/Cole, 1999.

Course Notes:

Strongly recommended. Obtain at Welch 2.228.

Web Page:


FTP Directory for Scheme Tutor and Software:

ftp.cs.utexas.edu /pub/novak/cs307/

Course Description:

CS 307 introduces Computer Science concepts, recursive programming, and data structures for students who have had a year of programming (e.g. in Pascal) in high school, or CS 303E or CS 304P. Students also must have a strong math background (M 305G (Precalculus) or equivalent test scores).

CS 307 will use the programming language Scheme, a dialect of Lisp. The Scheme implementation we will use is DrScheme. Toward the end of the semester, there will be an introduction to Java.

This course will emphasize CS concepts such as recursion and recursive processing of lists and trees. We will do a lot of programming and work hard; hopefully we will learn a lot and have fun. The course philosophy is to teach CS concepts by having students write many programs (one per week) that do interesting things.

Grading Policies:

Students are expected to complete all programming assignments. This course has a heavy programming load. Class attendance is expected; failure to attend class will result in a reduced grade.

Programming projects must be individual work. Students may discuss concepts or help with specific problems in another student's code. However, sharing program code, working together, or examining someone else's code is not allowed. Students may not work together on program design or flowcharts. Note that the typical penalty for scholastic dishonesty at UT is an automatic F in the course; also, students who do not do the programs themselves will not be able to pass the Final Exam.

Late programs may be turned in, with a 10% late penalty, at the next scheduled class period after the program is due; after that, late programs will not be accepted except for documented non-academic reasons such as illness.

Grades are averaged using the following weights:
Attendance 08%
Midterm Exams 20% Oct. 5 and Nov. 2, in class
Final Exam 36% Fri., Dec. 14, 9-12 AM
Programming Assignments 36%

Course grades are assigned on the scale A = 90-100, B = 80-90, etc. based on the average, unless the final exam grade is low. If the final exam grade is below 65 or is more than 15 points below the average excluding the final exam, then a lower course grade may be assigned at the instructor's discretion. A grade check web page is provided to allow students to see their grades to date and estimated final grade.

Programs are assigned letter grades, which are numerically averaged as A+ = 100, A = 95, A- = 93, B+ = 88, etc. A program that satisfies the assignment and has no errors will typically be given a grade of A-; grades of A and A+ are given to programs that have something extra, such as extra work or especially nice code. Note, however, that a grade of A- receives a score several points higher than the bottom of the A range; for example, a student who made 89 on exams and received A- on all programs would have an average above 90 and receive a grade of A.

Course Topics:

  1. Introduction:
    1. The Computer
    2. Computation
    3. Programming
    4. Computer Science
  2. Scheme syntax and functions
  3. Conditional statements
  4. Recursion
  5. List structure; Sets
  6. Trees
  7. Arrays
  8. Applications: graphics, search, cryptography, symbolic algebra, program generation
  9. Object-oriented programming
  10. Lisp, Pascal, C++, Java, and language translation
  11. Lisp Interpreter