CS111 Syllabus


Course Overview

CS111 is an introduction to the problem solving foundations of computer science. Computer science is the study of imperative ("how to") knowledge, which is at the heart of any problem solving activity. Imperative knowledge is expressed via algorithms, which are descriptions of computational processes that can be encoded as programs written in a programming language. Programs communicate imperative knowledge between people; they can also be executed by computers.

In this course, you will learn "big ideas" about solving problems, developing algorithms, and organizing programs. These ideas include:

You will get hands-on experience with these ideas by reading, modifying, debugging, designing, writing, and testing programs. Example programs will involve graphics, user interfaces, and text manipulation.

This semester we will be using the Java programming language as our main tool for exploring the above ideas. Although you will learn a significant amount about Java along the way, the focus of the course will be on the big ideas, not on the details of Java programming.


Week 1: January 27 - 31

Lec #1 -- Monday, 1/27:

Lecture Topics:
  • Big ideas in CS111; divide/conquer/glue, abstraction, modularity
  • Our first Java program
  • Administrivia
Assignments:

Tuesday, 1/28:

Assignments due:
  • None
Assignments handed out:
  • None

Lab #1 -- Wed., 1/29:

  • Introduction to Macintosh, FirstClass, Fetch, Puma
  • Introduction to Code Warrior, textfiles
  • Our first Java program
  • main()
  • System.out.println()
  • strings
  • debugging

Lec #2 -- Thurs., 1/30

Lecture Topics:
  • string examples
  • simple vocabulary
  • introduction to object oriented programming
  • expressions
  • statements
  • variables
  • comments

Week 2: February 3 - 7 

Lec #3 -- Monday, 2/3:

Lecture Topics:
  • run()
  • Introduction to Buggles and BuggleWorld contracts
  • state of objects
  • instance methods
  • class methods

Tuesday, 2/4:

Assignments due:
  • None
Assignments handed out:
  • Problem Set #1: Writing Java code (Due: Tuesday, 2/11). Available on the assignments page.

Lab #2 -- Wed., 2/5:

  • run()
  • Writing simple Java Code: Buggles
  • comments
  • debugging

Lec #4 -- Thurs., 2/6:

Lecture Topics: Methods I
  • writing methods
  • the Java Execution Model (JEM)
  • inheritance
  • black box abstraction
Assignments:
  • Reading: To be announced.

Week 3: February 10 - 14

Lec #5 -- Monday, 2/10:

Lecture Topics: Methods II
  • parameters
  • scope
  • JEM with parameters

Tuesday, 2/11:

Assignments due:
  • Problem Set #1: Writing simple Java code
Assignments handed out:
  • Problem Set #2: Methods with parameters (Due Tuesday, 2/18)
Lab #3 -- Wed., 2/12:
  • Writing methods
  • The Java Execution Model
  • Debugging
  • Style

Lec #6 -- Thurs., 2/13:

Lecture Topics: Methods III
  • methods that return values
  • PictureWorld
  • Invocation Trees
Assignments:
  • Reading: To be announced.

Week 4: February 17 - 21

Monday, 2/17:

Presidents' Day -- NO CLASS!

Lec #7 -- Tuesday, 2/18:

Lecture Topics: Methods IV
  • PictureWorld examples
  • Divide/Conquer/Glue examples
Assignments due:
  • Problem Set #2: Methods with parameters
Assignments handed out:
  • Problem Set #3: Writing methods II (Due Tuesday, 2/25)

Lab #4 -- Wed., 2/19:

  • PictureWorld
  • Divide/Conquer/Glue
  • Invocation Trees

Lec #8 -- Thurs., 2/20:

Lecture Topics: Conditionals I
  • boolean expressions
  • conditionals

Week 5: February 24 - 28

Lec #9 -- Monday, 2/24:

Lecture Topics: Conditionals II
  • Buggle examples
  • flow diagrams
  • pseudoloops
  • overriding

Tuesday, 2/25:

Assignments due:
  • Problem Set #3: Writing methods II
Assignments handed out:
  • Problem Set #4: Conditionals (Due Tuesday, 3/4)

Lab #5 -- Wed., 2/26:

  • Conditionals
  • Review for exam

Lec #10 -- Thurs., 2/27:

  • EXAM # 1 -- In class. Covers material through Lecture #7, Problem Set 3 and Lab 4.

Week 6: March 3 - 7

Lec #11 -- Monday, 2/3:

Lecture Topics: Recursion I
  • recursive buggle methods
  • the Java execution model revisited
Reading:

Tuesday, 3/4:

Assignments due:
  • Problem Set #4: Conditionals
Assignments handed out:
  • Problem Set #5: Writing recursive methods I (Due Tuesday, 3/11)

Lab #6 -- Wed., 3/5:

  • Recursion
  • Recursive JEM

Lec #12 -- Thurs., 3/6:

Lecture Topics: Recursion II.

Week 7: March 10 - 14

Lec #13 -- Monday, 3/10:

Lecture Topics: Recursion III.
  • Recursive methods that return values

Tuesday, 3/11:

Assignments due:
  • Problem Set #5: Writing recursive methods I
Assignments handed out:
  • Problem Set #6: Writing recursive methods II (Due Tuesday, 3/25) 

Lab #7 -- Wed., 3/12:

  • Recursive methods that return values

Lec #14 -- Thurs., 3/13:

Lecture Topics: Recursion IV.
  • functions (static methods)
  • recursive functions
  • classic recursion examples

Week 8: March 17 - 21

Spring Break - NO CLASS!

Week 9: March 24 - 28

Lec #15 -- Monday, 3/24:

Lecture Topics: Lists I
  • linked lists
  • IntList contract
  • box-and-pointer diagrams
  • simple list recursion

Tuesday, 3/25:

Assignments due:
  • Problem Set #6: Writing recursive methods II
Assignments handed out:
  • Problem Set #7: Lists (Due Tuesday, 4/1 (no joke :-))) 

Lab #8 -- Wed., 3/26:

  • Lists

Lec #16 -- Thurs., 3/27:

Lecture Topics: Lists II
  • more Intlist recursion
  • lists of lists
  • lists of objects
  • primitive data wrappers and casts

Week 10: March 31 - April 4

Lec #17 -- Monday, 3/31:

Lecture Topics: Iteration I
  • tail recursion
  • while loops
Assignments:
  • Reading: To be announced.

Tuesday, 4/1:

Assignments due:
  • Problem Set #7: Lists
Assignments handed out:
  • Problem Set #8: Iteration (Due Tuesday, 4/8) 

Lab #9 -- Wed., 4/2:

  • Iteration

Lec #18 -- Thurs., 4/3:

Lecture Topics: Iteration II
  • More while and for loops
  • Nested for loops
  • Looping and lists

Week 11: April 7 - 11

Lec #19 -- Monday, 4/7:

Lecture Topics: Java Graphics

Tuesday, 4/8:

Assignments due:
    Problem Set #8: Iteration  
Assignments handed out:
  • EXAM #2 -- Take home. Covers material through Lecture #18, Problem Set #8 and Lab 9. (Due Tuesday, 4/15) 

Lab #10-- Wed., 4/9:

  • Java graphics

Lec #20 -- Thurs., 4/10:

Lecture Topics: Objects I
  • building your own objects
  • instance variables
  • constructor methods

Week 12: April 14 - 18

Lec #21 -- Monday, 4/14

Lecture Topics: Objects II: Animation World

Tuesday, 4/15:

Assignments due:
  • Exam 2
Assignments handed out:
  • Problem Set #9: Object diagrams, Graphics, Simple Animations (Due Tuesday, 4/29)

Lab #11 -- Wed., 4/16:

  • Animation World

Lec #22 -- Thurs., 4/17:

Lecture Topics: Arrays I

Week 13: April 21 - 25

Lec #21-- Monday, 4/21:

  • Patriots' Day -- NO CLASS!

Tuesday, 4/22:

Assignments due:
  • none
Assignments handed out:
  • none

Lab #12 -- Wed., 4/23:

  • Arrays

Lec #23 -- Thurs., 4/24:

Lecture Topics: Arrays II

Week 14: April 28 - May 2

Lec #24 -- Monday, 4/28:

Lecture Topics: Objects III
  • Data Abstraction

Tuesday, 4/29:

Assignments due:
  • Problem Set #9: Object diagrams, Graphics and Simple Animations
Assignments handed out:
  • Problem Set #10: Arrays, Data Abstraction, Animations (Due Tuesday, 5/6)

Wed., 4/30:

  • Ruhlman Conference -- NO CLASS!

Lec #25 -- Thurs., 5/1:

Lecture Topics: Microworlds Revealed
  • TurtleWorld (Inheritance)
  • PictureWorld

Week 15: May 5 - 7

Lec #26 -- Monday, 5/5:

Lecture Topics: CS111 Jeopardy

Tuesday, 5/6:

Assignments due:
  • Problem Set #10: Arrays, Data Abstraction and Animations
Assignments handed out:
  • None.

Lab #13 -- Wed., 5/7:

  • Last day of class.
  • Final exam review.


End of Classes

Final Exam--Scheduled During Regular Exam Period