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
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