Hacker News new | past | comments | ask | show | jobs | submit login
Learning Online (christinacacioppo.com)
219 points by christinac on Sept 29, 2014 | hide | past | favorite | 36 comments



I really enjoyed reading this piece. It echoed many of the thoughts I've had over the past ten years of teaching programming off and on, and many of the frustrations I've had with existing online learn-to-code tools. (I actually wrote one such tool back in 2007, an interactive learn-to-code webapp called the AppJet Learn to Program Guide.)

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!


This! Having a human being available to stress-test your assumptions and uncover hidden weaknesses in your mental model is one of the biggest failings of both the "hold-your-hand REPL" tools currently used by many learn-to-code programs and the "broadcast from above" approach approach to classroom-style learning that the MOOCs embrace (though are trying to alter to be more student-centric).

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/


Just reading through HN during my (very boring) introductory to programming class in high school and noticed the name seemed familiar. Thanks Christina for tutoring me over the summer! The way programming is taught in high schools needs some serious reform - and reading this gave me a lot of insight into how people learn how to code (and how I wish this kind of thinking & super cool editor was implemented in my programming class).


ha, amazing. hi theresa!


Hey, Christina.

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?


absolutely all high-aptitude. my thinking there, fwiw, is that making something high-aptitude students like is the only way to build something that less-inclined students like.

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.


That's helpful. I agree that engaging content works no matter your aptitude.

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.


yeah, i now spend 2 days/week in an AP CS classroom at a public school with TEALS (http://tealsk12.org), and the dynamic's very different. after 30 classroom hours, we're at loops and conditionals!

i suspect you're right about needing to hand-write code -- especially if you're used to things like code snippets and autocomplete. i suppose i feel about hand-writing code the way i feel about understanding compilerish: you'll probably have to do it at some point, and it's a skill worth practicing, but i don't think it should come first.


I do agree with that. I don't have them hand-write code for quite a while.

And I think we agree more than we disagree; teaching kids that they can code and how to think algorithmicly are far more important than getting them ready to pass a single exam.


yep. very much agree!


Seems like this is what Thrun and other learning entrepreneurs didn't do - sit with his students and teach them without a full blown website.

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.


"You’ll not be eaten by computers any more than folks were eaten by electricity 100 years ago."

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


"High test scores often grant college credit at a public university – which means, very tangibly, needing fewer credits and tuition dollars to graduate – or a “you took a hard class” gold star (though no credit) at a private university."

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.


I'm currently a freshman at an Ivy League school where no credit is offered for AP exams, and I believe that this policy is similar at many of our peer institutions. The exams can be used for placement purposes; however, they aren't really that necessary considering that prerequisites are very loosely enforced. I think the most important use for AP exams is actually during admissions. An applicant with an AP class on his or her transcript but with a low or missing AP exam score may cause an admissions officer to question the rigor of the class.

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.


> The exams can be used for placement purposes; however, they aren't really that necessary considering that prerequisites are very loosely enforced.

That may be the difference, then. At both my public universities, prerequisites were rigorously enforced.


I went to Rice which was rather generous with AP credit. I used AP classes to cover lots of my electives and some intro math and science stuff. I skipped all the calculus requirements via AP. Some classes however only allowed you to skip classes without actually any credit granted. I think this varies quite widely by private universities.


I looked over the schools I applied to (over a decade ago) and it seems like the Ivies have gotten a little pickier about giving credit for AP exams.

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 skimmed through some of the longer passages so maybe I missed it...but whatever video tool she's using is slick...The video crispness of the text looks nice enough it's as if she's using animated vector graphics, and the play-on-hover is an elegant touch.

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.


(i made the videos.)

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.


oh -- the tool that's being screencast is the thing i've been building; it's a web app that was running in chrome.


Looks like a customized version of http://www.videojs.com/


Looks like http://www.videojs.com/ to me.


Everyone seems very focused on the tech, but IMHO outcomes are mostly driven by very familiar factors. Here's another perspective on learning online: make it full-time and ramp up social engagement. I operate an online learn-to-code program that parallels a similar in-person program (http://www.hackreactor.com/remote-beta/) and educational outcomes (assessments) are on par between the two.

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 would agree that most AP CS students come from a background of CS. It was certainly less common for students in my high school (a private college-prep school) to randomly pick up AP CS to look good on their transcripts. Most had already an interest and experience.

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.


Christina,

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.

[1] http://www.eimacs.com/


yep, that might be true today. my hope's that it creates students who realize they can code, should they want to.

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.


Christina,

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.


This is similar to how I learned javascript in almost REPL manner. Started with poking around in chrome developer console with quick copy pasting of code examples from stackoverflow / w3schools. Repeating and customizing until console logged what I wanted. With occasional diversions to understand compilerish.

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.


The anecdote about electrical education 100 years ago is great, I never thought about the similarities. I think electricity was the high-tech industry of that time, all the cool guys were building generators instead of apps. A lot of big problems had to be solved (like connecting entire cities to a power grid), it seemed like a great and a rapidly developing industry to be in so it attracted people in the same way programming attracts some people now.


This is really cool. Have you thought about ways to scale this and make it available to others (not just students, but tutors / TAs as well)?


a bit, though not enough. if you have thoughts you're willing to share, i'd love to hear them! (c@christinacacioppo.com)


[T]he hardest part for these students was solving puzzles in English, not Java. Often, they’d skip to the Java, glossing over their logic.

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.


Is the software demoed in the video the "TeachAPCS" thing? The site is currently down, but it looks like it is based on the github? I'd say it looks pretty spectacular!


oops sorry -- http://teachapcs.com is back up. (and thank you!)

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)


and down again! would really love to play with this thing. it looks great.


Great tool and awesome writing




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: