CSCI 134C

Introduction to Computer Science

Lectures | Labs | Homeworks | Resources

Home

Instructor: Iris Howley
Co-Instructor: Duane A. Bailey
Email: iris@cs.williams.edu
Office: Chemistry 308
Office Hours:Iris (TCL308): Tues. TBD, Wed. 12:30-2:30p, Thurs. 1-2:30p
Duane (TPL306): Mon. 2:30-4:30p, Tues. 7:30-9p, Thurs. 9:45-11:20a
Lectures: MWF 11-11:50 Chemistry 123 (Wege)
Labs: M 1-2:30pm, 2:30-4pm, T 10-11:30am, 1-2:30pm, 2:30-4pm, TCL 217a
Textbook: Think Python (2nd Edition), found at greentreepress.com and here
TAs:Noah Andrew, Chris Anton, Will Burford, Jimmy DeLano, Jacob Justh, Julia Kawano, Aidan Lloyd-Tucker, Grace Mazzarella, Nevyn Neal, Nathan Thimothe, Alex Trevithick, Linda Zeng
TA Hours:Sun. 4-9:30pm, Mon-Thu. 7-10pm, +Wed. 2-4p (in TPL312), +Wed. 4:30-6:30pm, Thu. 6-10p., + Thu. 4-5:30p (All office hours in TCL217a, unless otherwise described)

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, we 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. We expect that this work will be continued outside of scheduled time. There are also weekly written homework assignments to support lecture and lab learning.

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 March 5 (5:45pm or 8pm, 25 percent) and a scheduled final (Sunday, May 19 at 1:30 PM, 25 percent). We reserve the right to adjust grades by as much as 5 percent to reflect course participation.

Policies

Course Syllabus
Department Honor Code and Computer Usage Policy

Lectures

Description | Labs | Homeworks | Resources

Date Topic
February 1Lecture 1. Hello, world.
February 4Lecture 2. Variables & Assignment. | POGIL 1. Intro to Python. | POGIL 3. Arithmetic & Assignment.
February 6Lecture 3. Functions. | POGIL 12. None-Returning Functions. | POGIL 13. Value-Return Functions.
February 8Lecture 4. Booleans & Conditionals. | POGIL 5 & 7. Booleans & Nested Conditionals. | POGIL 6. If-Else Statements.
February 11Lecture 5. Loops & Abstraction. | POGIL 8. While Loops. | POGIL 9 & 10. For Loops & Nested Loops.
February 13Lecture 6. Lists & Mutability. | POGIL 16. Lists. | POGIL 11. Pre-defined Built-in Functions
February 18Lecture 7. Strings. | POGIL 18. More Lists and Strings.
February 20Lecture 8. Interpretation.
February 22Lecture 9. Tuples, Lists, and Encryption.
February 25Lecture 10. Dictionaries, Sets,and Memoization.
February 27Lecture 11. [More] Sets and Files. | POGIL 14. Reading from Files. | POGIL 15. Writing to Files.
March 1Lecture 12. Generators.
March 3Midterm Study Session, The Notes
March 4Lecture 13. Iterators. | Lecture 13 Notes.
March 6No lecture, due to evening midterm exam
March 8Lecture 14. Recursion & Classes.
March 11Lecture 15. Classes & n-grams. | Lecture 15. Notes.
March 13Lecture 16. Special Methods & Properties. | Lecture 16. Notes.
March 15Lecture 17. Data Structures. | Lecture 17. Notes. | POGIL 30. Linked Lists - Elements.
April 1Lecture 18. Images.
April 3Lecture 19. Hashing & Linked Lists.
April 5Lecture 20. Linked Lists III. | Lecture 20. Notes.
April 8Lecture 21. Sorting & Lambda.
April 10Lecture 22. Big-O Notation & Sorting. | Lecture 22. Notes.
April 12Lecture 23. Keys & Recursive Sorting. | Lecture 23. Notes.
April 15Lecture 24. Mergesort Binary Search. | Lecture 24. Notes.
April 17Lecture 25. Number Systems & HTML. | Lecture 25. Notes.
April 19Lecture 26. Binary Trees I. | POGIL 40. Binary Trees.
April 22Lecture 27. Binary Trees II.
April 22Lecture 28. Object Persistence. | POGIL 41. Object Persistence. | POGIL 28. Arguments

Laboratories

Description | Lectures | Homeworks | Resources

Date Topic
February 4 Lab 1. Introduction to the Python/git workflow
February 11 Lab 2. Implementing an Algorithm (Moon Age)
February 18 Lab 3. Building a Python Toolbox
February 25 Lab 4. Faculty Trivia Lists
March 4 Lab 5. Visualizing Data
March 11 Lab 6. Building an Oracle
April 1 Lab 7. Image Filters
April 8 Lab 8. Sorting & Supreme Court
April 15 Lab 9. Jupyter Sorting Algorithms | Quicksort Partition
April 22 Spring Mountain Day. No lab!

Homeworks

Description | Lectures | Labs | Resources

Due Date (place) Topic
February 4 (in-class)Homework 0. Data and algorithms.
February 11 (in-class)Homework 1. Arithmetic.
February 18 (in-class)Homework 2. Abstraction.
February 25 (in-class)Homework 3. Strings.
March 4 (in-class)Homework 4. Mutability.
March 13 (in-class)Homework 5. Generators.
April 3 (in-class)Homework 6. User-Defined Data Structures.
April 10 (in-class)Homework 7. Hashing & Recursion.
April 17 (in-class)Homework 8. Sorting.
April 24 (in-class)Homework 9. Hexadecimal & Trees.

Resources

Description | Lectures | Labs

Item
The Textbook
Typical workflows
Duane's Incredibly Brief Intro to Unix and Emacs