600.102: Foundations of Computer Science
Fall Semester 2005: September 8, 2005 - December 12, 2005
Contents
Catalog Description:
A broad introduction to computer science for both majors and
technically inclined non-majors.
Explores computer science through vignettes of
logic and algebra,
computer systems,
algorithms and data structures,
assembly language programming,
models of computation,
high-level programming languages,
software engineering,
information theory,
and selected applications.
Includes regular labs and extensive exercises through which
students apply lecture material in practice.
Prerequisite(s):
Familiarity with computers;
non-majors may want to take
600.101: Computer Fluency
before this course.
Academic Honesty:
It is your responsibility to adhere to the
Department
Integrity Code
and other applicable university regulations.
Feel free to email us your questions or concerns.
Discussion List:
cs102-discuss@bloat.org
(open discussion, but subscribe
here
first)
Staff List:
cs102-staff@bloat.org
(to contact all of us, but only staff can subscribe)
Submit Assignment:
cs102-submit@bloat.org
(we grade your last submission
before the deadline)
Instructor:
Peter Fröhlich
Office Hours:
Thursday & Friday, 4:00 pm - 5:00 pm
Location:
326
New Engineering Building
Lecture:
Monday, Tuesday, Wednesday, 1:00 pm - 2:00 pm
Location:
100
Shaffer Hall
Teaching Assistant:
Jonathan Lasko
Office Hours:
Tuesday, 3:00 pm; Thursday, 4:00 pm
Location:
225
New Engineering Building
Lab:
Tuesday, 10:00 am - 11:00 am
Location:
1
Shaffer Hall
Week 1: Introduction and Overview (9/12-9/18)
Lecture:
-
Monday:
Welcome to Computer Science
-
Tuesday:
Propositional Logic and Boolean Algebra
-
Wednesday:
Number Systems and Data Representation
Lab:
-
Introduction to Unix (and Linux), Part 1
Reading:
-
Required:
Behrouz
1: Introduction;
2: Data Representation;
3: Number Representation;
4.1: Arithmetic Operations
Deadlines:
-
Monday:
Grab Assignment 1 and get started.
-
Tuesday:
Introduce yourself on the course mailing list. (Graded)
-
Sunday:
Turn in your solution to Assignment 1.
Week 2: Computer Systems I (9/19-9/25)
Lecture:
-
Monday:
Out sick, sorry!
-
Tuesday:
Combinatorial Circuits
-
Wednesday:
Sequential Circuits
[Memory Cell PDF]
Lab:
-
Introduction to Unix (and Linux), Part 2
Reading:
-
Required:
Behrouz
4: Operations on Bits
Deadlines:
-
Monday:
Grab Assignment 2 and get started.
-
Wednesday:
Pick your favorite (recent?) story from
The Risks Digest
and briefly discuss it on the course mailing list. (Graded)
-
Sunday:
Turn in your solution to Assignment 2.
Week 3: Algorithms and Data Structures (9/26-10/2)
Lecture:
-
Monday:
Computer Architecture (Catching up from last week!)
-
Tuesday:
Computer Architecture (Still catching up, I just can't plan!)
[SCRAM Sketch PDF]
-
Wednesday:
Fundamental Concepts of Algorithms
Lab:
-
Computer Architecture (Interrupts, Memory Hierarchy)
Reading:
-
Required:
Behrouz
5: Computer Organization;
8: Algorithms
Deadlines:
-
Thursday:
Read up on memory
mapped I/O; on the mailing list, discuss with others how to design
the address decoding logic necessary for the memory map given in the
article; assume you have an 16-bit address bus and an 8-bit data bus
(the 6502
processor is an example) and that each chip has a special CHIP SELECT
signal. (Graded)
Week 4: Introduction to Assembly Language (10/3-10/9)
Lecture:
-
Monday: The MIPS Architecture
-
Tuesday: A Survey of MIPS Instructions
-
Wednesday: Algorithms on MIPS
Lab:
-
MIPS and SPIM and Examples
Reading:
Deadlines:
-
Monday:
Grab Assignment 3 and get started.
-
Thursday:
Pick a MIPS instruction (an actual instruction
like
beq, not a pseudo-instruction like la)
and explain its encoding as a bit pattern on the
discussion list; explain all the necessary bits and
pieces and include at least one example. (Graded)
-
Sunday:
Turn in your solution to Assignment 3.
Week 5: More Assembly Language Details (10/10-10/16)
Lecture:
-
Monday:
Arrays and Records, Implementing Records
-
Tuesday:
Implementing Arrays, Memory Layout, Functions and The Stack
-
Wednesday:
[Midterm 1]
[Solution]
Lab:
-
More MIPS and SPIM and Examples
Reading:
Deadlines:
-
Tuesday:
Grab Assignment 4 and get started.
-
Thursday:
In class I claimed that bounds checking for arrays can be done in
only one instruction on the MIPS. On the discussion list, agree or
disagree with this claim and explain why it works or why it doesn't;
maybe it only works some of the time? It's a good idea to review the
instructions we did not talk about yet... (Graded)
-
Sunday:
Turn in your solution to Assignment 4.
Week 6: Models of Computation (10/17-10/23)
Lecture:
-
Monday:
Holiday
-
Tuesday:
Introduction to Finite Automata
-
Wednesday:
Introduction to Lambda Calculus
Lab:
-
More MIPS and SPIM and Examples
Reading:
Deadlines:
Week 7: Introduction to High-Level Languages (10/24-10/30)
Lecture:
-
Monday:
Encoding Booleans into Lambda Calculus;
Overview of Compilers and Interpreters;
Introduction to Python
(arithmetic, comparisons, variables, if, while)
-
Tuesday:
More Python (strings, tuples, lists, dictionaries, for)
-
Wednesday:
More Python (files, modules, functions), Python Examples
Lab:
-
Using the Python Interpreter, Python Examples
Reading:
Deadlines:
Week 8: More High-Level Language Details (10/31-11/6)
Lecture:
-
Monday:
Introduction to Objects;
Abstraction Mechanisms (functions, modules, objects);
Designing a Circuit Simulator
-
Tuesday:
Inheritance in Object-Oriented Programming;
Modeling Geometric Shapes
-
Wednesday:
More on Inheritance and Modeling,
Modularity and Team Projects,
Outline of Configuration Management
Lab:
-
Python Examples (card game)
Reading:
Deadlines:
Week 9: Software Engineering (11/7-11/13)
Lecture:
-
Monday:
Configuration Management Overview,
Introduction to Subversion
-
Tuesday:
Software Design Case Study (Circuit Simulator)
-
Wednesday:
Software Development Processes (Waterfall, Iterative),
Basics of Software Testing (top-down, bottom-up, unit testing,
black-box and white-box testing)
Lab:
-
Playing with Subversion,
Circuit Simulator Discussion
Reading:
-
Required:
TBD
-
Optional:
TBD
Deadlines:
Week 10: Information and Coding Theory (11/14-11/20)
Lecture:
-
Monday: Review of Parity Bits, Run-Length Compression,
Huffman Compression
-
Tuesday: Hamming Distance, Basics of Error Detection and
Correction (Hypercubes), Reed-Muller Codes (Hadamard matrices),
Basics of Checksums
-
Wednesday:
[Midterm 2]
[Solution]
Lab:
-
Circuit Simulator Extensions
Reading:
-
Required:
TBD
-
Optional:
TBD
Deadlines:
-
Tuesday:
Grab Assignment 8 and get started.
-
Friday:
Post your opinion on the direction of the course for the next few
weeks on the discussion list. (Graded)
Week 11: Applications (11/21-11/27)
Lecture:
-
Monday:
Peter rants about the basics of computer graphics including
bitmaps, color models, API models, etc.
-
Tuesday:
Dan introduces the
Python Imaging Library,
Peter rants about filtering images using convolution matrices
and the basics of time-frequency transformations (FFT, DCT, etc.)
-
Wednesday:
Nobody in class because of Thanksgiving. Happy Turkey! :-)
Lab:
Deadlines:
Week 12: Applications (11/28-12/4)
Lecture:
-
Monday:
Mitch introduces PyGame,
Peter rants about tile-based game engines and scrolling in PyGame
-
Tuesday:
Arthur introduces PyOpenGL,
Peter tries to explain the basics of perspective projection
and vector transformations
-
Wednesday:
More on vector transformations, backface culling, and painter's
algorithm
Lab:
Deadlines:
Week 13: Applications (12/5-12/11)
Lecture:
-
Monday:
Compilers in 45 Minutes (Ad :-)
-
Tuesday:
Course Evaluations, Peter rants on Raytracing for a while
-
Wednesday:
The Trouble with Engineering Ethics
Lab:
-
Introduction to Raytracing and POV-Ray
Reading:
-
Required:
TBD
-
Optional:
TBD
Deadlines:
-
Friday:
Point out (on the discussion list) your least favorite
part about the
ACM Code of Ethics and Professional Conduct,
including an example of some computer-related ethical dilemma that you
think is not addressed very well.
(Graded)
Week 13+1: Review and Outlook (12/12)
Lecture:
-
Monday:
Review and Outlook
Reading:
Deadlines:
Books
First the recommended text for the course.
I'll frequently make reference to chapters in this one as we
go along.
Note that the course does not cover everything in the book
and that the book does not cover everything in the course.
However, I tried very hard to select a book that's a pretty
good match.
Next we have the closest competitor to the recommended text.
Also a decent match, but if you like this one better, you will
have to also match lectures to chapters yourself.
The following book also surveys computer science in a broad
way and touches on many of the same topics we will discuss.
However, the presentation is slightly more concise and not
always at a purely introductory level.
You can still get a lot out of it, and I will occasionally
point out chapters that contain some deeper results, but
you won't be at a disadvantage without the book.
The following book is a classic introduction
to computer science (although they don't call it that), well
worth attempting after you passed 600.102.
It's quite a bit more abstract yet, at the same time, quite a bit
more concrete than what we will be doing.
Appreciate the Zen-like nature of that statement. :-)
Here are two books on Python, in case you want something more detailed
or more permanent than our tutorials.
The first is an introductory text designed specifically for beginning
programmers.
The second is a concise reference, small enough to carry with you just
about anywhere.
Related Courses
Miscellaneous
Assignments (10): 40%,
Midterms (2): 20%,
Final (1): 30%,
Miscellaneous (unknown number): 10%.
Class Pictures
Updated:
$Id: index.html 125 2005-12-19 06:29:49Z phf $
Validate:
XHTML
CSS
Copyright © 2005
Peter H. Fröhlich.
All rights reserved.