f Computer Science 134C - Introduction to Computer Science


Introduction to Computer Science

Lectures | Labs | Homeworks | Resources


Instructor: Duane A. Bailey
Lab Instructors: Duane A. Bailey, Iris Howley, and Carl Rustad
Email: bailey@cs.williams.edu
Office: Physics 306
Office Hours:Duane (TPL306): T1-3pm, W7:30-9:30pm, R1-3pm
Iris (TCL308): W11-2pm
Carl (TCL206): R7-10pm
Lectures: MWF 9-9:50 Physics 203
Labs: M 1-2:30pm, 2:30-4pm, T 8:30-10am, 10-11:30am, 2:30-4pm, TCL 217a
Textbook: Think Python (2nd Edition), found at greentreepress.com and here
TAs:Taylor Beebe, Will Burford, Betsy Button, Peter Christie, Javier Esparza, Abby Fournier, Ariel Koltun-Fromm, David Lee, Grace Mazzarella, Maria Mejia, Dzung Pham, Alexander Smith-Bove, Alex Taylor
TA Hours:Sun-Thu 7-10pm, Tues 8-11am, Wed 10am-noon, Thu 9am-Noon (TCL 217a)

Course Description

We are surrounded by information. This course introduces fundamental computational concepts for representing and manipulating data. Using the programming language Python, this course explores effective ways to organize and transform information in order to solve problems. Students will learn to design algorithms to search, sort, and manipulate data in application areas like text and image processing, social networks, scientific computing, and databases. Programming topics covered include procedural, object-oriented, and functional programming, control structures, structural self-reference, arrays, lists, streams, dictionaries, and data abstraction. This course is appropriate for all students who want to create software and learn computational techniques for manipulating and analyzing data.

Organization. During lecture hours we will typically learn new concepts through the building of new tools to solve simple problems. While the learning process is initially supported by an online text, I expect a dynamic approach to the class that will allow us to steer lectures in directions of mutual interest. During formal lab hours, we will meet for 90 minutes to begin work on a more extended problem. I expect that this work will be continued outside of scheduled time. As the end of the semester nears, we'll individualize common projects to focus on topics of our own interest. On occasion, we may meet in lab during our lecture hours.

Work. You are responsible for reading supporting material and participating as the semester progresses. In addition, some topics may require you to investigate online resources (documentation, tutorials, and the like). Each week you will be responsible for completing a programming assignment (35 percent) in addition to a written homework (15 percent). There will be a midterm examination on October 16 (25 percent) and a scheduled final (T.B.A., 25 percent). We reserve the right to adjust grades by as much as 5 percent to reflect course participation.


Course Syllabus
Department Honor Code and Computer Usage Policy


Description | Labs | Homeworks | Resources

Date Topic
September 7Lecture 1. Hello, world.
September 10Lecture 2. Simple calculations.
September 12Lecture 3. Code reuse with scripts and functions.
September 14Lecture 4. Functions and conditional code.
September 17Lecture 5. The art of finding and hiding the details.
September 19Lecture 6. Iteration.
September 21Lecture 7. Catching up; strings.
September 24Lecture 8. Interpretation.
September 26Lecture 9. Lists and Tuples.
September 28Lecture 10. Dictionaries and Sets.
October 1Lecture 11. Files, memoization, oh my.
October 3Lecture 12. Generators.
October 10Lecture 13. Generators and iterators.
Midterm StudyMidterm Sample
October 12Lecture 14. Generators, the last lecture.
October 15Lecture 15. Presenting data.
October 16Lecture 16. Classes I.
October 24Lecture 17. Classes II (includes blueberry muffin recipe; see recipe.py)
October 26Lecture 18. Classes III - the K-means container object
October 29Lecture 19. Classes IV - Image filters
October 31Lecture 20. Classes V - Linked Lists
November 2Lecture 21. Classes VI - Finishing Linked Lists
November 5Lecture 22. Sorting
November 7Lecture 23. Sorting II
November 9Lecture 24. Sorting III
November 12Lecture 25. Sorting IV
November 14Lecture 26. Decoration.
November 16Lecture 27. Trees, pickling.
November 19Lecture 28. Java.
November 26Lecture 29. Java II.
November 28Lecture 30. Java III.
November 30Lecture 31. Java IV.


Description | Lectures | Homeworks | Resources

Date Topic
September 10 Lab 1. Introduction to the Python/git workflow
September 17 Lab 2. Computing the Age of the Moon
September 24 Lab 3. Building a Python toolbox.
October 1 Lab 4. Debugging.
October 15 Lab 5. Presenting Data.
October 22 Lab 6. Building an Oracle.
October 29 Lab 7. Building Image Filters.
November 5 Lab 8. Analyzing the Supreme Court Majority Decisions.


Description | Lectures | Labs | Resources

Due Date (place) Topic
September 10Homework 0. Data and algorithms.
September 17Homework 1. First bits of Python.
September 24Homework 2. Abstraction and Simplification.
October 1Homework 3. Indexing and simplification.
October 10Homework 4. Mutability, references, and debugging.
October 15Homework 5. Generators.
October 29Homework 6. Stacks and Queues.
October 31Homework 7. Class definitions.
November 7Homework 8. Sorting.
November 14Homework 9. Tree methods.
November 30Homework 10. Java. N.B. Due on Friday


Description | Lectures | Labs

The Text
Typical workflows
Duane's Incredibly Brief Intro to Unix and Emacs
Duane's Incredibly Brief Intro to Unix and Emacs
The Java Language Specification
The Java Application Programmer's Interface (API) Documentation
The Java Tutorials Page at Oracle