Wednesday, March 2, 2011

The Great Computer Science vs Computing Science Debate!

The College Board is proposing a new course entitled CS Principles,, that students could take before the current AP CS course or instead of it. Wouldn't a course in Computing Science or Scientific Computing plus Discrete Mathematics be more useful to students wanting an alternative or an intro to the current AP CS course? 

I have spent this whole school year reworking my intro course to include a Computer Algebra System (SAGE) and a new programming language (python, new to my school anyway) and a new text on Discrete Mathematics (the Litvins' Mathematics for the Digital Age, I think my introCS students are getting alot out of this approach. It certainly sounds more rigorous than the propsed CS Principles. 

Sorry, I don't mean to offend anyone. I know alot of the people developing this course are top notch. I just don't see this as a good direction for the future of APs in Computer Science. I know the intent is a good one. We want more students to do more Computer Science in High School and Undergrad. If a student's first exposure to Computer Science is the current AP course, it may not always go well. Also, if a student only does one year of Computer Science, I think they are missing out. So, a program like CS Principles does have potential, but I would define the curriculum differently (see below).

If I had my druthers, I'd love to see the following sequence of courses.
Discrete Math with CAS as described above. My school used to call this course Computer Math. Some call it Computing Science or Scientific Computing. On the python edu-sig forum they are coining the phrase Digital Math. I've been teaching a course like this since the late 1980s. In fact, I've been teaching programming with some sort of BASIC (IBM BASICA, MS QBASIC, Visual BASIC, REALbasic, yabasic, etc) since 1975! I only just switched to python this year. Over the years, I've also used ForTran, Pascal, C, C++, Java, SAGE, Octave and R in this course. We've even played with html and applets for the web.
The current APCS course is mostly about algorithms and Object Oriented Programming aka APCS A. The current course, using java, is sufficient. We even do a little computer history, computer literacy and computer ethics! This course is especially beautiful given the right text. I highly recommend anything by Cay Horstmann. See 

APCS1 and APCS2 are usually followed by a Data Structures, Networking or Operating Systems course. Some schools do robotics or website design. I would follow APCS1 and APCS2, as described above, with APCS3 or APCS4 as described below.

The old APCS course that was canceled about Data Structures aka APCS AB should be brought back. A standard course in linked lists and binary trees would be great!
A new course in multicore, cluster, grid computing and clouds would be timely! I've been running a Computing Independent Study course, aka CIS(theta), for seniors who have already taken AP Computer Science as juniors. Lately we've been learning about SAGE, Octave and R. We've also set up clusters using PVM, MPI and openMosix doing some applications involving fractals, povray, blender and even some number crunching. We've also played with various Linux distros to get our cluster running: clusterKnoppix, BCCD, Quantian, OSCAR, Rocks, centOS, Fedora, Ubuntu, Cluster By Night, parallelKnoppix and pelicanHPC.

What do ya think? 

Teaching with Technology, 

No comments:

Post a Comment