Schedule (Tentative!)
- Stuff listed in bold indicates a due date of some sort, attached to a grade item that will influence your final grade. See Assessment for more details.
- Assignments are due on the day listed before lecture! Tasks that don't have a more specific time attached are due before midnight that day!
Week 1: Introduction and Overview (January 28 – February 3)
Lecture:
- Monday: Welcome to Foundations of Computer Science!
- Wednesday: Propositional Logic and Boolean Algebra
- Friday: Number Systems and Data Representation
Lab:
- Tuesday: A Whirlwind Tour of Unix
Reading:
- Required: The Fundamentals of Propositional Logic; Computer Numbering Formats
- Recommended: Positional Notation; Numeral Systems; Numeration Systems @ Electronics Teacher; Boolean Algebra @ Electronics Teacher; Binary Arithmetic @ Electronics Teacher; Chapter 1: "Logic, Proof" and Chapter 9: "Boolean Algebras" from Miguel Lerma's Lecture Notes
Tasks:
- Monday: Grab Assignment 1 and get started!
- Wednesday: Introduce yourself on the course mailing list!
Week 2: Digital Circuits (February 4 – February 10)
Lecture:
- Monday: Combinatorial Circuits (including multiplexers, demultiplexers, adders)
- Wednesday: Sequential Circuits (including flip-flops, memory cells, and registers)
- Friday: Building a Simple Computer (Dewdney's SCRAM to be precise)
Lab:
- Tuesday: Unix Q&A, Binary Numbers in Twos-Complement, More on Circuits
Reading:
- Required: Logic Gates @ Electronics Teacher; Flip Flops @ Electronics Teacher
- Recommended: Digital Circuits @ Electronics Teacher; Chapter 9: "Boolean Algebras" from Miguel Lerma's Lecture Notes
- Optional: Karnaugh Maps @ Electronics Teacher
Tasks:
- Monday: Hand in Assignment 1 and relax!
- Monday: Grab Assignment 2 and get started!
- Wednesday: Pick your favorite (recent?) story from The Risks Digest and briefly discuss its importance on the course mailing list. And feel free to tell others (in a nice way) why their story is not that important after all. :-)
Week 3: SCRAM and MIPS (February 11 – February 17)
Lecture:
- Monday: Finishing up the SCRAM, Micro Programs for Instructions, Circuits to Implement Micro Programs
- Wednesday: (Another) Introduction to MIPS and SPIM, shift.s example
- Friday: More on MIPS and SPIM, Introduction to Functions, functions.s example
Lab:
- Tuesday: Introduction to SPIM and MIPS, example programs: hello_spim.s, pos_neg.s, factorial.s
Reading:
- Required: James Larus: Assemblers, Linkers, and the SPIM Simulator (PDF); read A.9, browse A.10; skim around the rest.
- Recommended: Bradley Kjell: Programmed Introduction to MIPS Assembly Language, 2004; browse around.
Tasks:
- Monday: Hand in Assignment 2 and relax!
- Monday: Grab Assignment 3 and get started!
Week 4: More MIPS Programming (February 18 – February 24)
Lecture:
-
Monday:
Using
.datafor memory (.word,.space, etc), Indirect addressing, Arrays and Records, Offsets and address computation, memory.s example, align.s example - Wednesday: Functions calling Functions, The Call Stack, funfun.s example, Introduction to Recursive Functions
- Friday: Recursive Functions, recfun.s example, Discussion of Towers of Hanoi, hanoi.s example
Lab:
- Tuesday: MIPS Q&A, Review of Arrays, Bubble Sort Algorithm
Reading:
- Required: James Larus: Assemblers, Linkers, and the SPIM Simulator (PDF); you should read the whole thing this week and ask about stuff you don't get.
- Recommended: Bradley Kjell: Programmed Introduction to MIPS Assembly Language, 2004; browse around as needed.
Tasks:
- Monday: Hand in Assignment 3 and relax!
- Monday: Grab Assignment 4 and get started!
- Friday: When dealing with an array that is n elements long, the valid indices go from 0 to n-1 (at least the way we defined arrays in lecture and lab). Say you have an integer in register $s0 and you want to ensure that it is a valid index. That is, if the index is outside the array (i.e. $s0 < 0 or $s0 > n-1), you wish to terminate the program because it would be a programming error to access memory that is not actually part of the array. It may seem that you have to perform two checks (two branches), one for the upper bound and one for the lower bound. Find a way to perform only one check, with one MIPS instruction, that will test both boundaries at once! Discuss this problem on the mailing list, even if you can't find a solution; maybe all of you together can find one after all... :-) Hint: Note that the index is a signed quantity...
Week 5: Architecture Wrapup, Models of Computation (February 25 – March 2)
Lecture:
- Monday: Computer Architecture Wrapup: Memory Mapped I/O and Address Decoding for Multiple Chips, Memory Hierarchy, Interrupts and Exceptions, including applications; Introduction to Models of Computation: computable and non-computable functions (example of halting problem), abstract complexity of computations (example of sorting by all permutations in n!*n steps vs. bubble sort in n*n steps)
- Wednesday: Alphabets, String, Languages, and Automata; Chomsky Hierarchy; Finite Automata (details); Pushdown Automata and Turing Machines (outline)
- Friday: Introduction to the Lambda Calculus, Church-Rosser Property
Lab:
- Tuesday: Caller Saved vs. Callee Saved Registers, Review of MIPS/SPIM Programming Problems
Reading:
- Required: Raul Rojas: A Tutorial Introduction to the Lambda Calulus [PDF], 1997; Chapter 10: "Automata, Grammars and Languages" from Miguel Lerma's Lecture Notes
- Recommended: Automata Theory, Chomsky Hierarchy
- Optional: Dave Keenan: To Dissect a Mockingbird: A Graphical Notation for the Lambda Calculus with Animated Reduction, 2001; The JFLAP Tool
Tasks:
- Monday: Hand in Assignment 4 and relax!
- Monday: Grab Assignment 5 and get started!
Week 6: Models of Computation, Algorithms and Complexity (March 3 – March 9)
Lecture:
- Monday: More Lambda Calculus, Encoding Integers, Encoding Booleans, Church-Turing Thesis
- Wednesday: Introduction to Algorithms, Pseudo-Code Notation (expressions, variables, if, while, for, functions, return, arrays), Linear Search, Complexity of Linear Search, Big-O notation, Spectrum of Computational Complexity (undecidable, intractable, tractable)
- Friday: Formal definition of Big-O notation; Asymptotic Analysis; Best, Worst, and Average Case Analysis; Binary Search; Recurrence Equations and Solving by Guessing; Brief outlines of Bubble Sort and Selection Sort
Lab:
- Tuesday: Turing Machines, Examples
Reading:
- Required: Raul Rojas: A Tutorial Introduction to the Lambda Calulus [PDF], 1997; Turing Machines @ Stanford Encyclopedia of Philosophy; Chapter 3: "Algorithms, Integers" Section 3.1: "Algorithms" from Miguel Lerma's Lecture Notes; Linear Search; Binary Search
- Recommended: Chapter 4: "Induction, Recurences" Section 4.3: "Recurrence Relations" from Miguel Lerma's Lecture Notes; Bubble Sort; Selection Sort
- Optional: Interpolation Search
Tasks:
- Monday: Grab Assignment 6 and get started!
- Tuesday: Hand in Assignment 5 and relax!
Week 7: Algorithms and Complexity, Midterm 1 (March 10 – March 16)
I am leaving early Wednesday morning for SIGCSE 2008 to learn more about teaching. Sorry I'll miss the exam, but I believe you'll be in capable hands... :-)
Lecture:
- Monday: Analysis of Bubble Sort and Selection Sort; Lower Bound for Comparison-Based Sorting; Outline and Analysis of Merge Sort (an "optimal" sorting algorithm)
- Wednesday: Review for Midterm 1 (Matthew Ziegelbaum)
- Friday: Midterm 1 (Matthew Ziegelbaum)
Lab:
- Tuesday: Introduction to Python, Examples
Reading:
- Required: Bubble Sort; Selection Sort; Merge Sort; Magnus Lie Hetland: Instant Hacking and Instant Python
- Recommended: Heap Sort; Quick Sort
- Optional: Guido van Rossum: Python Tutorial
Tasks:
- Monday: Hand in Assignment 6 and relax!
- Wednesday: Resubmit problems 3 and 4 from Assignment 6 if you feel like it after hearing Monday's lecture.
- Friday: If you feel like it, send us some feedback on how the course is going to cs102-staff@bloat.org. You can say whatever you want, we won't be offended and it won't affect your grade, we just want to know if we're on the right track and what we should change for the remaining weeks.
Week 8: Spring Break! (March 17 – March 23)
Have fun! :-)
Week 9: Programming in Python (March 24 – March 30)
Lecture:
-
Monday:
(Another) Introduction to Python;
details on lists, tuples, and dictionaries;
built-in functions
str(),int(),dir(),help(),range(),open(); built-in "operations"someList.append(item),someList.pop(),"some string".split()," ".join("some", "string"),"some string".replace("some", "your")someFile.close(); performing basic file input usingfor -
Wednesday:
Towers of Hanoi revisited;
built-in functions
chr(),ord(),len(),sorted(),reversed(); built-in "operations"" some String ".strip(),someDictionary.pop(key),someDictionary.get(key, default); thesysmodule, accessing arguments throughsys.argv; Counting occurances of letters in strings; Brief discussion of programming style; Brief discussion of scopes and block structure; Finding anagrams using occurance signatures; occurrences.py, anagrams.py, eval_anas.py - Friday: More about Python modules; Introduction to Objects, Classes, and Inheritance; objects.py
Lab:
Reading:
- Required: Magnus Lie Hetland: Instant Hacking and Instant Python
- Recommended: Guido van Rossum: Python Tutorial
- Optional: Reverse Polish Notation
Tasks:
- Tuesday: Grab Assignment 7 and get started!
- Friday: Read over (skipping whatever parts you don't get) Niklaus Wirth's classic paper Program Development by Stepwise Refinement and post your opinion of the technique he describes to the discussion list. Make sure you clearly state the main point of the paper as you understand it.
Week 10: Python Libraries, Design of Circuit Simulator (March 31 – April 6)
Lecture:
- Monday: Overview of Python Imaging Library; drawing.py
- Wednesday: Overview of Circuit Simulator Project; Designing the Classes for Circuit Components
- Friday: More on the Circuit Simulator Project...
Lab:
- Tuesday: Overview of PyGame; triangle.py, psychangle.py
Reading:
- Required: Guido van Rossum: Python Tutorial
- Recommended: Lorenzo E. Danielsson's PyGame Tutorials;
Tasks:
- Tuesday: Hand in Assignment 7 and relax!
- Wednesday: Grab Assignment 8 and get started!
Week 11: Software Development / Software Engineering (April 7 – April 13)
Lecture:
- Monday: Overview of Software Engineering Concerns; Primary Phases: Analysis, Design, Implementation, Testing; Development Processes (waterfall vs. iterative and incremental); Overview of Revision Control Systems
- Wednesday: Yet more on the Circuit Simulator Project... :-)
- Friday: Yet more on the Circuit Simulator Project, Introduction to Software Testing
Lab:
- Tuesday: Introduction to Subversion
Reading:
-
Required:
Waterfall Model,
Subversion Quick Reference Card [PDF] (forget the stuff about
svnadmin, you won't need that!); TBD - Recommended: Version Control with Subversion; TBD
- Optional: Rational Unified Process; TBD
Tasks:
- Friday: Pick one of the four central phases of software development we discussed in class (Analysis, Design, Implementation, Testing) and explain (in some detail, using examples if possible, quote your sources!) why that phase is the most important one in software development. You may want to take the development process that is used into account as well. As an added complication, you cannot talk about a phase that someone else already discussed, so post early to get your pick, but take some time to think about it before you write it up! (Conflicting requirements, eh? :-)
Week 12: Software Testing / Web Applications / Final Project (April 14 – April 20)
Lecture:
-
Monday:
More on Software Testing,
Python's
doctestmodule, Final Projects Discussion - Wednesday: More on Python and Django (Matthew Ziegelbaum)
- Friday: Final Project Requirements (all attend please!)
Lab:
- Tuesday: Introduction to Web Applications using Python and Django
Reading:
- Required: Simon Jessey's XHTML Tutorial (there are many others, this one's short and sweet); Django Tutorial (there's more than one part)
-
Recommended:
doctestdocumentation; Django Documentation - Optional: User Interface Flow Diagrams
Tasks:
- Monday: Hand in Assignment 8 and relax!
- Wednesday: Grab Assignment 10 and get started! (We skipped Assignment 9! :-) (The delay in posting Assignment 10 cannot be compensated for, sorry, we're pressed for time already...)
Week 13: Odds and Ends / Final Project (April 21 – April 27)
Lecture:
- Monday: Computer and Engineering Ethics
- Wednesday: Project Discussion; Copyrights, Patents, and Software Licenses
- Friday: More on Python and Django (Matthew Ziegelbaum)
Lab:
- Tuesday: More on Python and Django (Matthew Ziegelbaum)
Reading:
- Required: Django Tutorial (there's more than one part); ACM Code of Ethics and Professional Conduct
- Recommended: Django Documentation
- Optional: Whatever you can find that will help with your final project...
Tasks:
- Monday: Hand in Assignment 10 and relax!
- Monday: Grab Assignment 11 and get started!
Week 14: Review and Outlook / Final Project (April 28 – May 2)
Lecture:
- Monday: TBD
- Wednesday: Stump The Chump (Q&A session with candy)
- Friday: Final Presentations
Lab:
- Tuesday: More on Python and Django (Matthew Ziegelbaum)
Reading:
- Required: Nothing
- Optional: Whatever you think helps...
Tasks:
- Monday: Hand in Assignment 11 and relax!
- Monday: Grab Assignment 12 and get started!
- Friday: Hand in Assignment 12 and relax! Note: This is due before midnight, not before the final presentations. But you probably want to hand in earlier just so you can put it all behind you! :-)