Title: Back to Basics in CS1 and CS2
1Back to Basicsin CS1 and CS2
- Stuart Reges
- University of Washington
2In a Nutshell
- Major redesign of the CS1/CS2 courses at the
University of Washington - New CS1 emphasizes procedural programming,
objects later - New CS2 includes OOP concepts and traditional
concepts (recursion, linked lists, binary trees)
with a collections theme - Student satisfaction up enrollment up female
admissions up
3- I used to believe
- Programs with sophisticated graphics and GUIs
would be more fun for CS1 students than console
and file based programs - I found
- They were often less fun
- I now believe
- Students enjoy writing complete programs
- Students prefer standard Java
- Graphics gets old fast
- Our sophisticated programs are fairly crude
- The problem solving challenge is more important
than surface appearance
4- Confession I have them write a program that
produces this (console output, ascii art) - /\
- //\\
- ///\\\
- ////\\\\
- /////\\\\\
-
- ../\..../\..
- ./\/\../\/\.
- /\/\/\/\/\/\
- \/\/\/\/\/\/
- .\/\/..\/\/.
- ..\/....\/..
-
- \/\/\/\/\/\/
- .\/\/..\/\/.
- ..\/....\/..
- ../\..../\..
5- I used to believe
- I could teach object oriented design in CS1
instead of procedural design - I found
- Java objects involve a lot of syntactic detail
- There are no 50-100 line programs where OOD helps
- Many object based assignments end up being paint
by numbers rather than problem solving - Many students dont get the object concept
- I now believe
- A large number of mid-level students who can
master procedural concepts (loops, conditionals,
methods, parameters, arrays) struggle with the
object concept - Therefore, it is better to start with procedural
programming if you have a broad audience
6Confession I have my students write code like
this (with static methods) public class
DrawFigure public static final int
SUB_HEIGHT 3 public static void
main(String args) drawLine()
drawTop() drawBottom()
drawLine() // Produces a solid line
public static void drawLine()
System.out.print("") for (int column
1 column lt (2 SUB_HEIGHT) column)
System.out.print("-")
System.out.println("") ...
7A few more CS1 details
- Students use objects early, define them later
- We use a custom DrawingPanel to explore objects
(Graphics, Color, ) - Scanner is helpful for console and file input
- while (input.hasNextLine())
- String text input.nextLine()
- Scanner data new Scanner(text)
- ltprocess datagt
-
- Input files make programs interesting
8Some objections
- Stuart is guilty of crimes against Java
- Ive been in trouble before
- Why not a procedural language like Python for
CS1? - Were using Java in CS2 and switching languages
is tough for mid-level students - Why do you have to use the s-word so much?
- Procedural Object Oriented Programming is a
slippery slope (look what it spells)
9A few words about CS2
- Eliminated some useful but less fundamental
topics (GUIs, junit testing, javadoc, streams) - Brought back emphasis on fundamentals (recursion,
linked lists, binary trees) including recursive
backtracking - Less emphasis on OO design, but basic OO concepts
included (encapsulation, inheritance, interfaces)
including a client view of data structures - Collections framework as a case study
10Results student satisfaction
Question C Mean Old Java Mean New Java Mean
The course as a whole was 3.71 3.30 4.06
The course content was 3.71 3.40 4.01
The instructors contribution to the course was 3.82 3.42 4.43
The instructors effectiveness in teaching the subject matter was 3.70 3.20 4.35
11Results CS1 enrollment
12Results female admission
13Conclusions
- New courses are working for us
- Impossible to tell which changes have helped the
most - Too early to infer long-term trend (particularly
with female admission) - We serve as an existence proof that back to
basics can work
14For more information
- http//www.cs.washington.edu/homes/reges
- Building Java Programs by Stuart Reges and Marty
Stepp, Addison Wesley, expected early 2007