Wednesday, August 20, 2014


Teaching AP CompSci: 

Quarter I Week 0 August Preparation
I started getting ready for the new AP Computer Science 20 hour lab requirement that's replacing the GridWorld Case Study using the 3 New Labs some time ago. If I recall correctly, all I had to do was goto the secure documents area of the APCommunity Teacher Audit site and download 3 zip files. Before downloading said files I had to click on some sort of acknowledgement pop up about using these labs or similar labs of my own design as part of the 20 hour requirement, that these files are indeed secure (ie: not to be posted publically) and that GridWorld is gone!

If that's all you think that you have to do for your students, I'd say that you're missing the point! The new requirement is to have at least 20 hours of lab time as part of your course. I don't think that's going to be a problem for most of us currently teaching APCS as I'm sure we probably provide more than 20 hours of lab time already. I know that I have lab time as part of every single class (that's why I teach in a PC Lab/Classroom). In 150 classes before AP Review and AP Exam Week, I probably have 100 hours of lab time! I can go many classes in a row without any formal lecture if we are in the throws of a particularly challenging problem set. I usually do a brief lecture at the beginning of a chapter. Then I give the students a pdf of the chapter to study at home privately via Edmodo or DropBox. Then I give my students a problem set for the chapter to hash out "together" (ie: in pairs but I help out at each PC or at the SmartBoard).

Now, if the 20 hours really means 20x60 minutes and not 20 periods, then the new requirement is more like 30 periods if your periods are 40 minutes long. So, if you did the New Labs all in a row, we're talking, for example, all of January and most of February.

When I heard of the demise of GridWorld, I was very happy as I could finally go back to using my own smaller "case studies" or projects that I never had time to do since the advent of College Board imposed Case Studies. I would only be able to do 1 or 2 of my own projects and varied them each year. I guess I'm a throw back to the time before AP Case Studies. Yes, there was such a time, and I enjoyed teaching that way.

Now the problem is to be able to cover the same material presented in the New Labs in those 20 hours. I was going to do my own thing or even just stick to GridWorld for a while. But now that I see the labs, I think my students may well enjoy this approach. I'll probably do a mix of a few of my own projects with the New Labs and the old problem sets from our textbook.

I've read the articles on (Maria and Gary Litvin) as well as on (Charles Cook) regarding the use of the 3 Labs. Gary makes the case that the New Labs will take too much class time to cover thoroughly. Charles talks about reorganizing the labs into 17-23 hours of class time to cover them all. BluePelicanJava includes a lot of APCS B aka CS II, so I guess we can cut some of that! I was originally 100% with Gary, but now I think I'm somewhere between the two. (Stacey Armstrong) even has a College Board approved syllabus with the New Labs integrated throughout the year. So, I guess she's on board too.

I haven't heard much from Cay Horstmann, or anyone else for that mater, on this subject.

You know, when we used to teach C++ in AP Computer Science, I used Gary Litvin's C++ for You++ as well as Owen Astrachan's Tapestry. Both of these C++ texts were masterpieces in my opinion! 

Now, I use Gary's "MP3: Mathematics for the Digital Age and Programming in Python 3.0" in my intro CS class and Cay's Big Java in APCS A aka CS I. I wonder what Owen has to say about the New Labs. He's probably too busy developing the new AP CS Principles course to weigh in on this. BTW, these two texts are masterworks as well! Keep up the good work!

Am I going to be able to fit in every single exercise from all 3 Labs the first year? Probably not, but I think I'll try to fit as much in as I can. As with everything else, it comes down to experience. WRT to the 3 Labs we are all NOOBS again, so this year we can do justice to some of the Labs, next year a bit more, then eventually we'll get it down. 

On a related note, if I had decided NOT to use the New Labs and substitute my own projects covering the same concepts, would I have had to resubmit my APCS Syllabus for audit? I was never clear on this point. I suppose it's moot now as I'm using the New Labs.

If you want ideas for your own projects, I like to use the StdDraw class from Princeton CS 126. I've also used How To Think Like A Computer Scientist in my intro course using Python. Some of the projects in there could easily be done with Java. Here's some nice lab ideas from the awesome Roger Frank!

Given enough time (obviously can't do all this but I wish I could), here's what I'm thinking:

CH1: Hello World 
(main, println, basic IO)
CH2: Using Objects 
(from existing classes)
CH3: Implementing Classes 
(our own constructors, accessors, mutators)
CH4: Fundamental Data Types
(Objects vs Primitives)
CH6: Decisions 
(if statements, boolean expressions)
CH7: Iteration
(for loops, while loops, for each loops)


PROJECT: RockPaperScissorsLizardSpock (IF)
PROJECT: ROT13 Encryption (Strings)
PROJECT: Lindenmayer Systems (Strings)
PROJECT: Pythagorean Triples (Loops)
PROJECT: Function Graphing Calculator
PROJECT: Parametric Graphing Calculator
PROJECT: Polar Graphing Calculator

CH8: Arrays and ArrayLists

(1D and 2D static arrays, Lists)

**PICTURE LAB** skip optionals

PROJECT: Polygons and ShoeLace
PROJECT: Iterated Fractal Systems
PROJECT: Number Base Conversions
PROJECT: Roman Numeral Arithmentic
PROJECT: Chess960 and Random Numbers
PROJECT: Complex and Mandelbrot

CH11: Interfaces and Polymorphism

CH13: Inheritance

**ELEVENS LAB** skip optionals except sim

CH18: Recursion

CH19: Sorting and Searching
PROJECT: Turtle Class
PROJECT: Turtle Class+Lindenmayer
PROJECT: Turtle Class+Koch SnowFlakes
PROJECT: Turtle Class+Ball/Ballistics
PROJECT: Turtle Class+nBody/Orbits
PROJECT: Our own Static Math Class


Linux Clusters, MPI4PY
Python, VPython, Cython

Python Samples to convert to Java projects:

Java Samples:

VPython Sample:

SAGE Samples: 
(4 video playlist)

Clusters and Scientific Computing Samples:
(6 video playlist)

Well, that's all folks!