

Learning Online - christinac
http://christinacacioppo.com/blog/learning-online

======
zamfi
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!

~~~
eriktrautman
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](http://www.theodinproject.com) [2]:
[http://www.vikingcodeschool.com](http://www.vikingcodeschool.com)
[3]:[http://www.geminstallmichael.tumblr.com/](http://www.geminstallmichael.tumblr.com/)

------
theresa
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).

~~~
christinac
ha, amazing. hi theresa!

------
teach
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?

~~~
christinac
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/](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.

~~~
teach
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.

~~~
christinac
yeah, i now spend 2 days/week in an AP CS classroom at a public school with
TEALS ([http://tealsk12.org](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.

~~~
teach
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.

~~~
christinac
yep. very much agree!

------
keeptrying
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.

------
ahmad19526
"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

------
pflats
"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.

~~~
godarderik
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.

~~~
vonmoltke
> 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.

------
danso
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.

~~~
christinac
(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.

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

------
shawndrost
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/](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.chrisbradley.codes/an-education/)
[http://www.parsed.io/my-remote-learning-
experiences/](http://www.parsed.io/my-remote-learning-experiences/)

------
zamansky
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...](http://cestlaz.github.io/2013/03/23/Who_won_the_election-
Quadratic_to_Linear_Time.html#.VCq1TN-c2Ak))

Anyway, just some food for thought.

------
skinnybatch
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.

------
ahstilde
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/](http://www.eimacs.com/)

~~~
christinac
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.

------
hu_me
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.

------
nikital
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.

------
vannevar
_[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.

------
marcelsalathe
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)?

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

------
acbart
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!

~~~
christinac
oops sorry -- [http://teachapcs.com](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)

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

------
shaohua
Great tool and awesome writing

