Should I teach AP computer science, or just an introduction to Computer Science?
January 25, 2010 12:20 PM   Subscribe

Should I teach an AP Computer Science class, or an introduction to Computer Science? More details inside...

Some of you may remember my previous post on which programming language to teach an introduction to web design. I appreciate greatly the advice, but most of you were right in suggesting that we wouldn't get beyond javascript.

For next year, I've been invited to teach either an AP computer science class, or an intro to computer science. I'm admittedly torn.

Our school currently has no computer science classes. On the one hand, I'd like to teach them AP computer science so that they might be able to get college credit.

On the other hand, I would love to teach my kids about linux, console scripting, and Scheme.

So, friends, what do you suggest? Should I teach an AP computer science class in Java, an AP computer science class in some programming language other then Java, or a more general introduction to computer science?
posted by satori_movement to Technology (16 answers total) 2 users marked this as a favorite
 
In my experience, the other college kids who majored in computer science (like me) and did not take the intro course because they had tested out of it were at a disadvantage. They didn't know how things were done not only in our specific department but in college and computer science in general but were thrown into an intermediate level course under the assumption that they did. Don't get me wrong: there are a ton of computer geeks that do just fine, but at the same time, a lot of my college-mates would have benefited from having to take that intro class, even if some of it was repeat. However, if they aren't planning to major in computer science, getting college credit for a cs course would do any university student well. So really I have no solid advice, but just some things to think about.
posted by kthxbi at 12:25 PM on January 25, 2010


A friend of mine teaches AP Computer Science at a very good high school. They do it as a 2-year course (albeit at the same time, so the Intro CS kids and the AP CS kids are physically in class together). These are very smart kids and the ones who've never programmed before would not pass the AP after one year... and since that's the whole point, I would recommend against doing AP CS if these are first year kids.

(and how exactly are you planning on teaching an AP CS class in a language other than the AP CS curriculum is in?)
posted by brainmouse at 12:28 PM on January 25, 2010


Something I forgot to add. Linux and console scripting are things that I wish were taught at my university down at the intro level and aren't (you're expected to pick it up on your own) so any cs kid who comes in knowing a lot about that would DEFINITELY be at an advantage. I have a degree in cs and I still wish I had more console scripting tricks up my sleeve.
posted by kthxbi at 12:28 PM on January 25, 2010


I greatly enjoyed taking an AP CS class in high school. I didn't bother with the test because I didn't see the point (as nice as testing out of an intro class would have been, I'm sure I would have missed more school-specific stuff).

Early exposure to the theory is much, much more important than the mechanics of doing if you ask me. You can easily teach a good programmer a new tool, you can't teach an expert tool-user to be a good programmer.

I think what I'm trying to say is: cover a lot of theory, not shell scripting -- but screw the actual AP credits, any testing out of intro CS stuff in college is almost assuredly detrimental.
posted by wrok at 12:43 PM on January 25, 2010


I would think that to teach AP computer science, your curriculum for the course is largely going to revolve around preparing the students for the AP exam. An intro class will likely allow you a bit more freedom.
posted by ripple at 12:47 PM on January 25, 2010


Definitely some thoughts to ponder.

I think linux and shell scripting are VERY valuable to anyone, not just programmers. Spending a little time on a few simple exercises will benefit everyone in my opinion.

If I was going to teach an AP class in a language other then Java, I would, of course, teach them Java at the end. I would just pick another language to teach them OO fundamentals, and then we'd learn Java at the end.

I really like the idea of doing a two year course, one year as an intro and the second year as preparation for the AP test. I would have to be very organized.

These are first year kids, so I'm right now leaning to not trying to teach them AP stuff, I think that might just be asking for failure.

Lots to ponder.
posted by satori_movement at 12:51 PM on January 25, 2010


At my college we had the same problem that xthkbi mentions, which only got worse when the AP exam switched to Java--new students who skipped the intro class and hadn't already learned C or C++ on their own would not understand memory and pointers and then run into trouble. They also often had problems with style, which is heavily emphasized in the intro class at my school, not so much in other classes.

So I don't doubt that you can put together a curriculum that's more useful and interesting than the AP curriculum--the only thing is that you may get higher enrollment (and thus, more kids exposed to CS who otherwise would not have been) if the class is AP. If you end up with a curriculum that's close enough to AP you may want to provide info to help some of the more motivated kids learn the rest so they can pass and take the exam.
posted by phoenixy at 1:38 PM on January 25, 2010


Yea, I'm honestly not a big fan of Java, and would prefer to not teach the language if at all possible. I think C++ is a better introductory language, because it allows for low and high level expression.

I'd probably rather teach a class based on C++ or Scheme(I could follow SICP , *dreams*), but as you mention phoenixy, my enrollment would be lower.

I'm not sure how much room for teaching other topics there will be in an AP course, as the list of things to cover is pretty extensive.
posted by satori_movement at 2:03 PM on January 25, 2010


As an AP teacher, I'd just say: consider the amount of planning that's going to go into an AP course versus a non-AP. The College Board requires that every AP course taught be audited and approved by them. You have to submit a syllabus to them, proving that you are covering the required material. If that is not done properly, the school's AP program status in general is revoked (i.e., they may not use the College Board's registered trademark "AP" designation on their transcripts, which is a Really Big Deal).

If there had been an AP CS course previously at that school, you can get the audit approval extended to a new teacher, but it sounds to me like you're starting from scratch?

If you're already very familiar with the AP curriculum, how to prepare students for the test, and so on, and you feel that would best serve your students (i.e., a lot of them would like to do an AP course), then I would do it, but otherwise it's not necessarily worth it, at least at first.

The CB does offer a lot of teacher-training workshops and so on to help new/experienced AP teachers.
posted by lysimache at 2:21 PM on January 25, 2010


I think AP is valuable in that it ensures a teacher's syllabus is generally in line with what's expected in the field. In my high school, the only available "computer" classes involved mostly electronics, networking, CAD, even some Unix sysadmining -- useful stuff, but not what's expected of college-bound students. I think an AP program would have provided some much-needed focus for those teachers.

On the other hand, the training and preparation required to teach an actual AP class is pretty intense. It's probably not worth getting qualified just to teach for one year.

Perhaps you could reach a happy medium by teaching an AP-test-appropriate, but not-actually-AP-certified, class? Ambitious students could choose to take the test, and you'd have more freedom to include a lecture or two about shell scripts.

I've attended two universities with good CS departments now, and while they both consider AP credits as a factor in admissions, neither actually counts AP CS as fulfilling any kind of major requirement.
posted by miyabo at 2:45 PM on January 25, 2010


Oh, also, if you choose to do Scheme consider using the textbook How To Design Programs. It's a bit like SICP but written for average high school students rather than MIT freshmen.
posted by miyabo at 2:50 PM on January 25, 2010


Another vote for teaching just computer science. I was one of those AP CS students, and while I learned c++ well enough, one year of it did not prepare me that well for the AP exam. Also consider that that is all I learned: Programming. Whereas with the non-AP CS class you propose, you can still teach some programming basics via scripting. Not only that, but I think learning additional concepts such as Linux and whatever you can fit in will be much more beneficial in the longrun, in part to kthxbi's point: My original major in college was CS, and the only thing we learned was programming where all of us tested out of the basic "how do I use office" class. And this was at a well respected liberal arts college. Looking back now, I would trade in that AP CS class for general Linux and scripting- lifelong skills that apply to many computer disciplines.
posted by jmd82 at 4:37 PM on January 25, 2010


When it comes to the choice of language, here are my thoughts:

1. Java: This is the language that I am most comfortable with, and have done the most development in. It's a suitable language if you want to prepare your students for industry, since it is widely used, and also makes picking up .NET languages quite easy. It allows you to concentrate on good OO design and concepts, and perhaps you can use it to teach some design patterns. The main drawback of Java as I see it, is there are better, more interactive languages out there which allow you to whip up a prototype or a script fast, and give you more flexibility. Which brings me to...

2. Python: I wish I had done more Python programming as it seems like a great language for just about anything. It has functional programming constructs, it is interactive so you can experiment and debug fast, and it allows you to teach OO principles. It is also useful in industry from what I can judge by frameworks such as Django (note that I haven't actually used the framework, but have seen good things written about it). The only drawback for me is that I grew up in Java and strongly typed languages, which still presents a challenge for me when it comes to debugging. I really like having a sophisticated debugger like the Java one in Eclipse.

3. Scheme: Scheme is pretty big at my university, and a joy to program in. However, I would only recommend it if you want to make your course really about computer *science*, and principles of computation. I don't claim to be an avid schemer, and I've never used it for anything useful, but with a book like "Structure and Interpretation of Computer Programs" it can be a really good introduction to computing. I haven't done any teaching at the high school level (I am a TA at my uni), but Scheme doesn't seem like a bad choice since your students will have plenty of time later to learn more practical languages. But, maybe they need to be smart...

4. C/C++: I regret not having good grounding in low level programming fundamentals, as I still struggle when I have to write complicated C code, but I've learned to deal with it. Granted, I am not interested in systems. i do regret not being able to write the fastest program for my experiments, but I think there are more interesting aspects of computer science. In any case, you can't go wrong with C/C++, I guess.

These are just some thoughts, I know I didn't give you an answer, but I hope some of that helps. I would probably go with Python if I were you.
posted by albatross84 at 7:44 PM on January 25, 2010


I think you are being overly ambitious if you really plan to teach kids another language during AP CS and then teach them Java before the test. For many of these kids this will be their first CS course ever and you may not remember how hard it can be to generalize some language concepts when you're first starting out, but it is hard. I would expect a very disappointing pass rate if you spend the whole year teaching them the concepts in something other than Java and then try to shoehorn it all into Java in the last three weeks. Also, I think most of my AP classes fell pretty far behind by the end of the year and failed to get to the last month of content...which would be your Java content. Don't try this. Really, don't do it. I can't think of a single good reason other than your personal objections to Java.

I am all for non-AP classes, myself. The "AP" designation can be intimidating to underrepresented minorities in CS who think that a "college level" course implies that they already have some grounding and will fall behind quickly...which is often true, most kids in the AP class at my high school did start with programming experience and I would most assuredly have fallen behind quickly if I'd worked up the courage to enroll. With a course you design yourself, you can recruit the best students regardless of background, and mold the curriculum to fit their needs and interests (how cool would it be if your kids were making money off their own FB, iPhone, etc apps by the end of the year? I guess if your passion ranges more toward scripting and Scheme maybe you don't think that's very cool, but I think it would be awesome if a high school computer science class led to a startup that was actually making nontrivial money). I don't know if getting more women and minorities into CS is something you believe to be worthwhile, but if it is, designing your own curriculum and recruiting your own class is the way to go.
posted by crinklebat at 9:44 PM on January 25, 2010


I can't remember where I saw this but the number of students who take the AP CS AB tests has tanked dramatically. Adding the AP label might also dissuade students who haven't decided college is for them, or have decided AP CS isn't for them (Also, if you teach AP CS A you would be basically dooming them if taught in anything other than Java.)

One alternative that my high school opted for was dual credit with a local community college. And like the many posting before me, I wound up not using it. I was repeatedly told a B would not transfer (it did). I ended up with an A in the course and a far better understanding of Java than I would have from a high school course. Still, if a lot of your students graduate to a local college/uni, this might be a good fast track option.

Here's my out of left field suggestion: Arduino. Your students have all of college to learn how to write Java apps and Object Oriented Principles, but few college students will risk a hands on embedded classes if it's not their end goal; risks hurting their GPA. Don't teach them bash, have them write their own Arduino shell! A similar project is offered as a final project at my alma mater's C for Engineers course, and having it run on an Arduino instead of seems infinitely more useful.

Finally, C++ is an unholy abomination, and its use in schools should be considered child abuse. If you insist on teaching students low level systems, have them write ASM for x86 or AVR and graduate them to C. Fundamentally, writing good OO code requires you to be good at writing algorithms in the first place.
posted by pwnguin at 10:30 PM on January 25, 2010


Would Intro to Computer Science be an elective or a requirement? At my school there was a computer requirement filled by typing, business computing (?) and CS. The golden rule of required classes: half the kids won't want to be there and will make it known. Are Scheme and shell scripting appropriate learning tools for kids who will tell you to take your iterator and shove it?
posted by spamguy at 7:11 AM on January 26, 2010


« Older Looking for headphones for listening stations   |   Recent German Luftwaffe movie? Newer »
This thread is closed to new comments.