Gas station without pumps

2012 August 3

What comes after AP CS?

Filed under: home school — gasstationwithoutpumps @ 14:29
Tags: , , , ,

A parent on one of the home-school mailing lists I subscribe to asked my advice about computer science courses past AP CS (in private e-mail, not on the list).

My high schooler is looking for recommendations on possible paths beyond AP CS.  They could be online or classroom (SF bay area) or hybrid.  I am aware of the eIMACS University Computer Science 1 and 2 courses that use Scheme, but not sure about usefulness of learning Scheme.  Also, in eIMACS progression, these courses are pre-requisites for their APCS course, so I wonder if these may be suitable after AP CS.  Other than these I am aware of Udacity/Coursera, etc.

This is a hard request for me to answer, because my son’s journey through computer science has been highly idiosyncratic.  He has been programming for about 6 years and is fairly skillful now in Python (including doing some multi-threaded code, some work on GUIs, and optimization with Pyrex), but has not learned Java yet (he’ll get that this coming year, so he can take the AP CS exam, which is highly Java-specific).  My son did do a course using Scheme in 2009–10, and I think it was a valuable addition to his programming knowledge.  It wasn’t the eIMACS course, so I can’t comment on those courses.

Generally, learning very different programming languages helps students build “notional models” that are abstracted away from features of specific languages, making it easier for them to learn new languages in future.  Learning a LISP-based language (like Scheme) often provides a better understanding of recursion, linked lists, trees, and pointers than an Algol derivative like C, Pascal, or Java.  So the eIMACS courses may be useful even for someone who has done well in a Java course.

The usual advice after AP CS would be to take a data structures course, since the heavy load of Java syntax in AP CS usually means that the students have learned almost nothing about how to use data structures, just the syntax for them.  If the student is already familiar with lists, trees, and hash tables, then an algorithms course would be appropriate.  For students thinking of a computer engineering career, it would be best to take a computer architecture class that includes both C and assembly language programming.  (My son has had a little C and C++ programming on the Arduino, including some work with interrupts, but has not gotten into assembly language yet.)

A more theoretical path would suggest taking an applied discrete math course (combinatorics, mathematical induction, Boolean algebra), followed by analysis of algorithms.  I think my son will be taking applied discrete math (as well as picking up Java) in the coming year, since he still needs 2 more years of math in high school, and he has already finished single-variable calculus (the Art of Problem Solving online course, followed by the AP Calculus BC exam).

I’ve seen lots of links for online courses:

I don’t have the time or the energy to look through all these (and undoubtedly many more) sites for suitable courses—especially as my son hates video lectures, so there is no point in looking at 95% of the online courses.  The Saylor courses look interesting, as they seem to rely mostly on reading and doing exercises, with only a few video lectures.  They also seem to follow the standard CS undergrad curriculum.

What I recommend for someone in the SF Bay Area is much simpler: take community college classes.  They are very cheap, and diligent students who come to every class can usually get in before the add deadline, even when there is a waiting list, because so many students stop attending.



  1. Note that Art of Problem Solving also has computer classes. Their intro class is in Python. Their second class is also in Python, but uses Game Programming to introduce software engineering, AI, and graphics.

    AoPS also has a Java programming w/ data structures class, which is NOT meant to be an introductory programming class, although it is for Java novices.

    I’d be surprised if some of the links above (like Annenberg Learner) had useful computer science courses.

    I recently read _97 Things Every Programmer Should Know: Collective Wisdom from the Experts_ by Kevlin Henney. Several different people mentioned that it was worth it to learn a new language every year, just to see how learning that language changed the way you programmed in your everyday language.

    Comment by Jo in OKC — 2012 August 3 @ 15:32 | Reply

    • Didn’t I include AoPS? My son will be doing their 2nd CS class this year, because it is one of the few Java-after-Python courses I’ve found, and because he was real happy with the content and format of the AoPS math classes he’s had (Precalculus and Calculus). I suspect that AoPS class will be a bit slow for him, but he’ll probably welcome having an easy class along with everything else he’ll be doing.

      I’ve not checked the course listings of all the online providers I’d seen links to recently. It would not surprise me if several of those links turned out to have no appreciable CS behind them.

      Comment by gasstationwithoutpumps — 2012 August 3 @ 17:15 | Reply

      • My son will also be doing the AoPS Java class the fall, and is looking forward to it. Note that the outline (at is basically a data structures class, not an intro to the language syntax class. So in addition to prep for the CS AP test, it will provide some new or expanded programming concepts (at least for my son). I think data structures will be really good for him. It was the programming class I liked best.

        My son also liked the teacher for the first two AoPS programming classes he took. Python has been a good learning language for my son.

        Currently, he’s working on a Minecraft mod, which is done in Java. So, I think he’s learned a fair bit of Java doing that. He’s learning some rotational coordinate system math along with that.

        He’s going to be doing a C++ summer camp through iD Tech Camps at the local UC next week. I don’t know how that will go. It’s supposed to be somewhat self-paced. The age range is 12-17, so he’ll probably be one of the younger kids there. He’s done a little C with a robot programming kit, but hasn’t developed a big interest in that yet.

        Comment by Yves — 2012 August 4 @ 10:37 | Reply

        • My son did an idTech camp (on game programming) a couple of years ago, and we were not impressed by the quality of the instruction. Don’t get your hopes up too high for that being a great experience.

          I’m glad to hear of good experiences with the AoPS programming classes. I agree that the description of the Java class is more like a data structures course than a first programming course, but it doesn’t assume students already have Java syntax, so it will be much closer to a decent fit for my son than any of the other courses we’ve looked at. (All the local data structures courses assume students have already learned Java syntax.) I suspect that a lot of the data structure content will also be review for my son (he was implementing and measuring hash-table collision resolution algorithms over 2 years ago), but there should be a few new things and it will be good for him to have relatively easy programming exercises in Java.

          Comment by gasstationwithoutpumps — 2012 August 4 @ 12:46 | Reply

  2. By the way, since the textbook for the AoPS Java class is optional and expensive and there’s plenty of Java documentation online, I was planning not to get it. But, I noticed that you can get a used copy of the previous edition “Java 6 Illuminated” for less. It’s from 2008 vs. 2011 for the newer edition. Somewhere I found a review that said the updates were mainly for a few new features (which can be found online), more “real life” examples (whatever that means), and more extensive revisions to chapter 2 on “Java Basics” (which our sons probably don’t need).

    I got it for under $10 at Amazon. The current best price on Amazon is $53, but if you check other used book sites or wait for a better deal on Amazon, you can probably get a good deal.

    Comment by Yves — 2012 August 27 @ 10:33 | Reply

    • My son looked at the sample chapters of the book on-line and decided that it was far too slow-moving to be useful to him. He found some online references fro Java that should be all he needs.

      Comment by gasstationwithoutpumps — 2012 August 27 @ 16:31 | Reply

  3. Hello, sir i would like to ask that what is the scope of java training, what all topics should be covered and it is kinda bothering me … and has anyone studies from this course of core and advance java online ?? or tell me any other guidance…
    would really appreciate help… and Also i would like to thank for all the information you are providing on java concepts.

    Comment by christi parks — 2012 November 25 @ 23:58 | Reply

    • I don’t know anything about the wiziq course. Since Java is used for the intro courses in most computer science curricula these days (though I think it is a bad choice for a first programming language), you can look at the topics in the syllabi from almost any college to get an idea what topics are usually covered and in what order. If you are looking for a more complete description of a computer science curriculum, consider which is a draft for a new standard for computer science education.

      Comment by gasstationwithoutpumps — 2012 November 26 @ 09:09 | Reply

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: