Every private (US) university I applied to was willing to offer AP credit, given a high enough test score. The vast majority of my (private US high school) peers took AP exams, went to private universities, and received credit for their AP classes. One of them earned enough AP credit to enroll at Harvard as a sophomore.
I've never heard of AP exams being a "Public Universities Only" thing.
We do have one program that allows students to graduate early or earn a masters degree in four years. Most people here have enough AP credit to do so, yet they rarely elect to use it.
That may be the difference, then. At both my public universities, prerequisites were rigorously enforced.
I just spot checked some of the brand-name non-Ivy schools that my friends attended and all but one offer actual college credit for AP exams: Stanford, Northwestern (varies by college; I only checked one), Carnegie Mellon, Georgetown, Johns Hopkins, and NYU all give college credit for AP exams. Boston College only offers advanced placement.
I'm not a huge fan of learning via video...however, I've found that a long list of instructions with text and screenshots can be hard to follow...for a student to see the mouse moving and text being typed in makes for a smoother illustration of the steps, especially if the steps involve actually clicking on buttons and menu items, which can be difficult to explain via text and screenshots.
I've been working on a quick screencast-to-gif tool for myself, so that I can record myself doing some actions and then render it as a GIF (since sound isn't needed)...but whatever tool the OP is using to make the videos play upon hover, I'd love to use for animated GIFs.
it's all pretty simple: they're quicktime screencasts, converted to mp4s, and played with videojs. i just took off the player's chrome and rigged it to start/stop onmouseover/onmouseout.
Really thought-provoking article! I've been teaching students to code for seventeen years, and your experience dovetails with mine. (Disclosure: I'm also the author of 'Learn Java the Hard Way'.)
I must admit that I'm skeptical that any "regular" student could learn Java well enough to pass the APCS exam in only twenty hours.
Can you explain a little better about the population you're working with? These are high-aptitude students with prior programming experience, no?
their prior programming experience varied, though there's certainly bias in who would sign up for coding tutoring (free or paid.)
all were comfortable using computers, and they'd seen code before. about half had gone through a Girls Who Code summer program (http://girlswhocode.com/programs/), which is designed, i think, to overview technologies more than drill concepts. they all had computers had home (about 50-50 windows/mac) with new-ish chrome or safari.
i only had one student take the multiple choice questions; he would have gotten a 3 or 4 on that part. he's coming off SAT prep and is good at taking standardized tests; he was weakest on the test's particulars ("how many bytes in an int?") i spent very little time on those sorts of questions; my view is that a motivated student who can understands how computers think will learn those particulars if s/he wants a 5. and for those who don't, there's google and stackoverflow.
i asked students to answer old free-response questions in the editor that's shown in the fizzbuzz video. that worked really well; with the help of the compiler, they were able to ace those questions. (i know you don't get a compiler on test day, but it seems silly to cripple them when learning.)
sometimes i tutored in person; other times, i did so over google hangout. either way, i was working one-on-one with a student, and it was painfully clear when s/he was confused, whether it was over a CS concept or a tool i'd introduced. tutoring also meant it was my responsibility to "fix it", and i think that explains a lot of why i cut 160 classroom hours to 20 tutoring hours.
And I now see that you're saying that teacher "touch" time was 20 hours. Which seems doable if they're able to teach themselves with proper tools.
> "with the help of the compiler, they were able to ace those questions. (i know you don't get a compiler on test day, but it seems silly to cripple them when learning.)"
Oh. This is where we're going to have to agree to disagree. For the AP exam students must write code on paper with a pencil, with no computer in sight. It's been my experience that students that don't have quite a bit of practice doing that without any training wheels crash and burn on the exam.
the software demoed in the video is still fragile, so it's not fully public yet. let me know if you're interested in poking at it though (c@christinacacioppo.com)
In my experience, puzzling through problems with quick iteration and support from a mentor is the most effective way to learn programming. Especially in the early stages, as Christina identifies, the hardest task is simply articulating an algorithm in English:
> For all the hemming about programming languages, the hardest part for these students was solving puzzles in English, not Java. Often, they’d skip to the Java, glossing over their logic. This didn’t work, but “forget Java for a moment; what are you trying to do in English?” and “How would you explain what you’re trying to do to a 5 year-old?” were the two questions most likely to unstick them. Once they explained the logic – “go through all the letters. If you find an A, swap it with the prior letter” – the Java came easily.
Nearly all online tools I've tried come up short in this regard, because of the major stumbling block that is building an accurate mental model (an "intuition") for how computers run your program. None of these tools tell you how to correct your mental model, because none of them really identify your mental model in the first place. For this, a human teacher is very useful!
Tools like the one Christina is building -- tools that allow for quick iteration and quick communication between learner and teacher -- are critical in that they let teachers focus on the hard part, on developing that intuition.
Christina, I fully support your effort to create tools that help humans teach other humans how to program!
We noticed this awhile back and tried addressing it by setting up The Odin Project[1] to give students a way to self-organize around an opinionated and comprehensive curriculum. But, as the project grew, we found that many students dropped off due to lack of commitment and others who progressed far still had some major conceptual blind spots.
A combination of these realizations and our successful work with small remote teams who helped to build Odin (which is OSS) led us to try a much more people-focused virtual approach -- highly supported online classes comprised of small teams who pair program on project work. The Viking Code School[2], in our first cohort right now, has so far managed to short-circuit those familiar issues. Our students are progressing at a phenomenal pace, especially considering that many of them are holding down jobs at the same time. One student build CLI Tetris in Ruby in week 2...[3] But the key difference between this and what we saw before is the human-to-human collaboration.
Mental models are not learned one-way. We've invested a LOT of time trying to come up with the perfect way of explaining complex topics but no amount of videos, diagrams, and code can substitute for the 10 lines of back-and-forth you get when speaking to an instructor or another student which uncovers the true error of your thinking. All the other one-way teaching methods simply address the symptoms of the problem -- "You got this wrong, here's the right answer" -- when the real issue is almost always a slightly incorrect mental model. The future of online isn't better one-way tools, it's a conversation.
</rant>
[1]: http://www.theodinproject.com [2]: http://www.vikingcodeschool.com [3]:http://www.geminstallmichael.tumblr.com/
Firstly, I applaud your efforts, and I ask that you continue!
Now, I took APCS in 2012 as a senior in high school. It allowed me to place out of the introductory CS course at the University of Virginia, and it placed me onto a path of being a CS major.
We used a website known as eimacs[1]. This was quite similar to what you are doing (I believe). The textbook would introduce a concept, and then it would ask us to play with it in a built-in compiler. Immediate feedback was great!
Additionally, there would be a variety of the dry puzzles which you describe. Luckily, my APCS teacher realized the dullness of these tasks, and he assigned labs which were more fun.
I agree with the user "teach." Your process creates students who are 1) interested in coding and 2) can solve puzzles with code. It does not create students who are ready to take the AP CS exam. The difference is akin to students who do well in high school math courses but have difficulty with the SAT.
i see the AP test as a bit of a hack; while it'd be nice to teach everyone all of the codes, i found teaching high schoolers AP CS a more manageable place to start.
I would love to hear more about her work and insights.
This is the kind of schlep that most any entrepreneurs are afraid to do.
Although I enjoyed the post and agree with a lot of it, I disagree with comparing coding skills to humans having access to electricity. In think coding today is like writing was 500 years ago.
In the past you would hire a literate person to read your documents, write you letters, and so forth. Today we hire programmers to help us get the most of our computers. I think reading and writing code will be the new way to make the most of computers in the future. It may not necessarily be through the coding tools and languages we have now.
Then again, I'm no Ray Kurzweil
Some blog posts from current students regarding my program as well as others (Bloc, WGU, Thinkful):
http://www.chrisbradley.codes/an-education/ http://www.parsed.io/my-remote-learning-experiences/
I still owe you commentary on your site -- as soon as I get a chance.
There are a number of interesting things I picked out of your piece.
Overall, it was a great read and there's some really good stuff in it. Love the tools and I agree with a number of your key points.
Some food for thought though:
I think that the 20 hours vs 8 months is not a really good comparison. We do the AP course in less than one semester, so let's say 4.5 months.
20 hours maps to around 30 class periods. 4.5 months maps to over twice that but then our students are taking between 6 and 8 additional classes all with homework and other assorted assignments.
On the other hand, our kids have the benefit of time. I've seen plenty of kids go through cram programs, summer programs and the like and at the end they show of some pretty nifty stuff. Then it's all gone. It takes time for people to really "learn" something. If too much is compressed into to short a time, the learning is an illusion. I've seen it time and time again.
Now, working with a high-aptitude population mitigates some of this, but I've had to "save" enough kids coming through enough summer immersion programs to know that too much to quickly can do long term harm.
Another thing to consider is APCS itself -- not a great course. The College Board has done it's best to dumb it down and make it more and more vocational. It's much more of a programming course than a computer science one at this point.
That said, there are opportunities to get kids to think more deeply (see my post here for an example: http://cestlaz.github.io/2013/03/23/Who_won_the_election-Qua...)
Anyway, just some food for thought.
I think there are two types of CS students, which are quite often reflective of preferred learning styles and life schemas: those who are far more intuitive learners, and grow and retain knowledge through doing (experience and practice); and those who need the rules laid out, so that they may digest them, incorporate them into their operational styles, and then figure out how to use them, push them to their limits, and break them. Both of these types of students possess the ability to operate from a place of creativity, but some have yet to develop gut intuition, and feel safer and more confident starting from a place of concreteness, and from there, launching into a more nebulous space.
I applaud the author for innovating the CS (and AP CS) curricula and teaching methodology. I think that it may very well prove more functional and effective for many students.
And once it was working saving the code to the actual file.
My only regret was I discovered breakpoints a bit late. It was fascinating to pause code and just hover over different bits of code variables / parameters and see the data being transformed.
Not only students. This is also the part of the process that most often trips up experienced programmers. The only difference between a beginner and an expert is the level of detail that gets glossed over.