## Weekly outline

### General

### 30 June - 6 July

## Week 1: Introduction to CS; Sets; Python Programming

### 07/01: Introduction to CS; Some Basics

- Work through Chapter 1 of Python book. Do the "challenges".
- Read Sections 1.1-1.4 and 2.1-2.4 of Discrete Math book. Do exercises 1.1, 1.2, 1.26, 1.27.

### 07/02: More Set Stuff

- Work through Chapter 2 of Python book. Do "challenges".2 and 3.
- Read Sections 1.5-1.7 of Discrete Math book.

### 07/03 Python Programming

- Work through Chapter 3 and 4 of Python book. Do "challenges" 3.1, 3.2, 4.2, 4.4. Submit them through Crossgrade by noon Sunday. Then crossgrade others' programs by class Monday.
- Read Section 2.5 of Discrete Math book. Do problems 2.7, 2.24(c).

### 7 July - 13 July

## Week 2: Algorithms, Math and Python

### 07/07: Numbers; More Python Programming

- Read Python book chapters 5 and 6.
- Do challenges 5.2 and 6.4 and submit them through Crossgrade for grading.
- Write a brief review of the course so far. Email it to instructor and cc TA. Due Thursday before class.

### 07/08: Proof, Recursion and Sequences

- Read Discrete Math book sections 1.8, 3.1--3.6.
- Do problems 1.25, 1.56, 3.7(a), 3.20, 3.30, *3.51(Hint: L is a good name).

### 07/09: Introduction To Algorithms; Trees and Graphs

- Read Discrete Math book sections 8.1, 8.2, 8.8 (first part)
- Give problem descriptions and algorithms for:
- Smallest non-negative element in a list of integers
- First repeated element in a list of integers

### 07/10: Implementing Algorithms in Python

- Read Sections 4.1-4.9 of Discrete Math book.
- Read Python PEP 8
- Do as many as possible of problems F1-F4 below. Turn in F2 for grading with Crossgrade by Sunday noon. Finish crossgrading by Monday before class.

### 14 July - 20 July

## Week 3: Formal Logic and Code Complexity

### 07/14: Propositional Logic

### 07/15: Formal Proof

### 07/16: First-Order Logic

### 07/17: Complexity and Python Performance

### 21 July - 27 July

## Week 4: Software Engineering Principles

### 07/21: Software Engineering; Git

- Read the official Git tutorial

### 07/22: Debugging; Modular Programming; V&V

- Read the official Python modules tutorial
- Enhance the 'teams' program (either mine below or your own) to assign teams numbers to teams and print an additional index mapping player numbers to team numbers.

### 07/23: Object-Oriented Programming; Testing

- Read Chapters 8 and 9 of the Python textbook

### 07/24: Exercise: Textual Analysis

Weekend Homework:

- Read Chapter 10 of the Python textbook
- Finish the Textual Analysis homework to your satisfaction
- Some sort of user requirements guidelines are in the class notes
- Also the Git URL of a corpus to play with if you don't have one of your own (see wiki)

- Complete the Coin War assignment below

### 28 July - 3 August

## Week 5: Consolidation

### 07/28: Parts of a Computer; GUI Building

Homework:

- Read Schaum's Chapter 5:
*Techniques of Counting* - Read up on Turtle Graphics:
- Do the "extra credit" portion of the Coin Wars assignment, by putting a GUI atop Coin Wars
- As time permits, continue to work on your Text Analysis code

### 07/29: Basic Counting; Turtle Graphics

Homework:

- Do Schaum exercises 5.40, 5.46, 5.48, 5.58, 5.70
- Do the Map Drawing homework below. This may take a while, but try to finish by class time Thursday
- As time permits, continue to work on your Text Analysis code

### 07/30: Low-Level Computing 1

Homework:

- Read
*The Story of Mel: A Real Programmer*(and optionally the Wikipedia page about Mel)

### 07/31: Low-Level Computing 2

- Read Schaum's Chapter 5:
### 4 August - 10 August

## Week 6: Probability; Languages

### 08/04: Midterm; Midterm Analysis

Homework:

- Read Schaum 7.1-7.7
- Arrange to obtain a copy of Levitin Second or Third Edition.

### 08/05: Random Numbers; Probability

Homework:

- Read Schaum 12
- Do the assignment below.

### 08/06: Regular Expressions; Languages

### 08/07: Working With Regexes

Homework:

- Read Levitin 1 (Introduction), 2.1-2.2 (Analysis), 3.2 (Sequential Search), 4.3 (Binary Search), 3.1 (Selection Sort), 5.1 (Insertion Sort)

### 11 August - 17 August

## Week 7: Algorithms and Data Structures

### 08/11: Complexity; Searching and Sorting

Homework:

- Read Levitin 4.1 (Merge Sort), 4.2 (Quicksort), 6.4 (Heapsort), 7.3 (Hashing)
- Read a file of integers, one per line, and selection sort them.

### 08/12: Fancy Sorting;

Homework:

- Read Levitin 4.4 (Binary Tree Traversals)
- Read a file of integers, one per line, and merge sort them.

### 08/13: Stacks and Queues

Homework:

- Read Levitin 9.1 (Prim's Algorithm), 9.3 (Dijkstra's Algorithm)

### 08/14: Hashing

Homework:

- Start on your project.

### 18 August - 24 August

## Week 8: Algorithms and Data Structures; Programming

### 08/18: Search Trees

### 08/19: Prim's Algorithm

### 08/20: Dijkstra's Algorithm

### 08/21:

*Project Presentations*### 25 August - 31 August

## Week 9: C/C++ Programming

### 08/25: Compilation, Assembly, Linking and Loading; C/C++ Basics

Homework:

- Read A C++ tutorial of your choice.

### 08/26: Pointers and Address Arithmetic; Memory; Linked Lists

### 08/27: Static Typing; OOP; Program Performance

Homework:

- Read Schaum Chapter 13

### 08/28: Finite State Machines; Turing Machines

### 1 September - 7 September

## Week 10: Final Topics

### 09/01: **Labor Day:* no class session*

### 09/02: Bit Banging

### 09/03: Legal and Ethical Issues

### 09/04:

*Final*