Monday, March 19, 2018

Advanced Placement Computer Science is a necessary evil for #CSforAll

Two controversial assertions in that title. That APCS is necessary and that it is evil.  I thought about leaving this post at that and seeing what sort of conversation started but that didn’t work on Facebook so I figured it would not work here either.

To start things off I should say that I am not a fan of the AP CS program. It’s too limiting. It is too tied to an end of the year test for me. The AP CS Principles course has more freedom than the AP CS A course does but still depends on an end of year test (and two performance tasks). Those performance tasks take up a lot of class time. I really like project based learning and I would love to have more time for larger projects. APCS courses suck the air out of the environment for other, more interesting to me, long term (year long) courses. I think there are better ways to prepare students for later CS education and careers. That’s the evil part.

On the other hand, the Advanced Placement brand carries a lot of weight with school administrators, school boards, parents, and other interested parties. It’s often an easy sale to these people as an argument for a new CS course.  If  we want to see “CS for All” APCS can be very helpful. But is is still necessary?

We have some well accepted starter courses in high school CS. Exploring Computer Science for one. Code.Org’s CS Discoveries is gaining some fans as well. They’re both good starters. In some ways I think they may ultimately lead to more high school Computer Science than AP CS will. But we’ll always want an advanced course to be the capstone of sorts. Should AP CS be that course(s) or should we have something more open-ended and less constrained by an exam?

What would you like to see at the top of the high school CS curriculum? Is AP CS the right answer? Is it a necessary course?


Garth said...

I have never taught APCS so I have to be somewhat careful here. I have seen it taught and have looked at the curriculum, which is why I do not teach it. It depends on what we as teachers want our students that complete a high school CS program to be prepared for. If we want them to have an easy first year programming in a college CS program then I think APCS is a good way to go. It seems to be a good, solid but unimaginative programming course. Very few of my CS grads go to a college CS programs that require a heavy dose of high school programming. Not enough to justify the resources it would take to offer APCS. A local public high school had an APCS program. 1000 kids in the high school. About 40 would start on the freshman CS path (only one CS teacher and he taught mostly math). By senior year the number in APCS was 2-4 kids. There are more interesting ways to get the same result and keep the seats more full.

Hillary said...

I think you've made a very fair assessment. One of the issues I see with AP CS is that it requires learning basic programming structures as well as object oriented programming all at the same time. It's up to the school/teacher to provide earlier courses to provide enough foundation. With almost no CS in elementary or middle school it's still only going to be most likely considered by students who already know they are CS bound in college. AP CS Principles is great for all student to get a good background in the breadth of computing topics. However, I still think a CS course using Python or another language that does not require object oriented programming (but is still a programming course, not a survey course like AP CS Principles) would be a great option for students considering other STEM disciplines in college. Since, as you mentioned, AP holds a lot of weight with stakeholders, this would be taken more seriously as a an AP course. I too would like to see other project oriented options rather than single test (even with performance tasks). I think our educational system's obsession with exams is detrimental for our students growth and learning.

Brian Sea said...

In general, I agree with your assessment. I see AP CS and their ilk (ECS, BJC, CSP, etc) as starter kits to starting a CS program. Relative to other subjects, CS has few secondary teachers with the knowledge or experience to develop a curriculum unique for their student population. School districts gravitate to AP, because they can treat teachers as a cog they can replace easily -- teacher leaves, drop in a new teacher with the same curriculum -- and, if it doesn't work, districts can blame the College Board ("it's not *my* curriculum!"). This notion that college want APs is short sighted and a bit dishonest.

For the three instituions I've been at, I've developed three different CS programs -- each custom to that school's unique population. First step is to remove AP CS so students don't try to "collect them all." Next step is to broaden the introduction and bring everything down two or three notches. As the years progress and I train student, I raise the rigor. Every year, I tweak the curriculum to keep "relevant" with current knowledge. It's a five year plan. I then train teachers to take over if I leave or get hit by a bus. The AP curriculum just doesn't leave enough flexibility to accomplish this.

I've advocated removing AP CS A since 2007, and many CS teachers at the time looked at me as the enemy. CS A is not a CS exam; It's a programming exam (I was sad when they removed CS AB). Functional programming is given little exposure, CS concepts aren't really covered, and many topics in CS A are more appropriately taught in a Data Structures course (sorting, searching, algorithmic analysis, 2D arrays, recursion...), because that where the applications best demonstrate their need.

CSP is a good step in the right direction... It's too bad that it's at such a superficial level.