
Khan Academy: Computer Science - keiferski
http://www.khanacademy.org/#computer-science
======
teach
High school CS teacher here.

I really hate taking shots at Khan Academy, because I love what they do and
his other videos have really helped a lot of my students in chemistry,
economics, etc.

However, he's moving through the material MUCH more quickly than I've ever
been able to do as a teacher. And I get nearly 5 hours a week of face time
with my students.

For example, his third lecture is on for loops. My students, on the other
hand, complete literally 80 assignments before beginning for loops. And they
still have some trouble.

Admittedly I'm using Java, and Python is simpler, but I think he's VASTLY
underestimating how slowly you need to move through seemly obvious concepts
for the average total beginner.

~~~
sethg
I’ve been programming professionally for over ten years, and when I have to
look at Java code that other professionals have written, I am constantly
irritated by how the actual point of the code is buried in… mquader’s “OO
ceremony” label elsethread is an apt phrase, although “Java ceremony” might be
more fair. It wouldn’t surprise me at all if high-school students learning
Java as their first language got confused much more readily than students
learning Python (which was, after all, originally designed as a language for
teaching OO concepts).

Of course, the College Board, in its infinite wisdom, has decreed that the AP
Computer Science tests be given in Java. I suppose we should be grateful that
they no longer do it in C++.

~~~
tikhonj
I think that just starting out with the assumption that OOP is the "one true
way"--AP CS really comes across that way--is flawed. A languages like Scheme
would be a much better choice for an intro CS class.

~~~
sethg
Worse than “OOP is the one true way” is “OOP is the one true way and Java’s
style of OOP is the one true OOP”.

I’ve heard of a CS curriculum that starts by teaching Scheme and ends with a
segment on “OK, now you know how to program in Scheme, here is how to do it in
Java”. I don’t know if that can fit in one high-school class, though.

------
danso
I've never used a Khan Academy video but that's out of pure negligence on my
part, not skepticism.

That said, I have always wondered how effective _video_ is as a teaching tool
for programming? I guess when I think about it, it's the same delivery tool as
an in-person lecture, but in some ways, more effective since you can pause,
rewind, etc.

See the comments on this article about how to do a Fibonacci recursive example
(which seems to be well done; the teacher takes it as slow as humanly
possible): [http://www.khanacademy.org/video/recursive-fibonacci-
example...](http://www.khanacademy.org/video/recursive-fibonacci-
example?playlist=Computer+Science)

The top comments are from people not knowing the difference between the
equality and assignment operators:

 _"Why do I get an error with a single equal, but not with a double? This is
what hung me up for a while."_

...I don't know the history of this particular user, it's possible he/she
skipped a bunch of the basic lessons and decided to learn recursion...but I
wonder if there's a better way to somehow make sure people get the basics
down, in an online teaching environment.

~~~
jcampbell1
Kahn makes a big mistake in pronouncing the assignment operator as "equals" in
the first video. The assignment operator should be pronounced as "gets".

~~~
nosignal
I think I'm going to steal this for my Python classes. I usually say "is" or
"is now", but "gets" I think is a more adroit phrasing. Cheers.

~~~
radq
Personally I prefer "becomes".

"David Gries recalled a time when he was lecturing with Dijkstra in the
audience when he read "x=a" as "x equals a". This is of course a short hand
for "assign a to x" and not a statement that x really is logically equal to a.
From the back of the room Dijkstra shouted "becomes" and the room fell silent.
Gries thought about it for a moment and said, "Thank you Edsger, for
correcting me. If I make the same mistake again, stop me." Everything went
fine until twenty minutes later he made the same mistake when the shout from
the back of the room came again - "becomes". Gries once again thanked Dijkstra
and claims to never have made the mistake again."

~~~
teach
I also say "becomes".

------
peripitea
That's awesome, but I think it would be much more accessible for newbies if
they included download links and installation steps. I have friends who might
be interested in this for whom just the installation could be a daunting
hurdle.

~~~
jwallaceparker
Agree.

To me the biggest hurdle in programming is not the programming itself but the
sys-admin effort to setup a development environment.

~~~
cantbecool
I know this is a shot in the dark, but if you're a Rails developer, use
Heroku. It takes a lot of pain out of an applications deployment.

~~~
latortuga
_development_ environment, not deployment. You're certainly right about
deployment but it's sort of a non-sequitor to the post you're responding to :)

------
frewsxcv
For the record, Khan Academy is going to eventually scrap all the Python
videos. John Resig, creator of jQuery, is going to redo all the videos
narrated by him and with the code written in JavaScript.

~~~
zerostar07
JS doesn't sound like a wise choice to me.

~~~
sequoia
Yeah that's slightly disconcerting. I'm not a compsci expert, I know enough
scripting to get by as a full-time web developer, but javascript seems like it
has a lot of hard-to-grasp idioms that would be hell for a beginner. I've read
The Good Parts and I still don't totally understand the intricacies of
prototypal inheritance. :p

I'd say stick with something a bit simpler, especially given that it's Khan
Academy, not Stanford, so it's likely to attract far more casual lay-users who
just want to know "a little bit about programming." The casual nature of the
engagement means there is probably a very low threshold for quitting if the
program is resulting in more confusion/frustration than "aha moments."

I think it's great they're doing it, tho! More people should learn "a little
bit about programming."

~~~
lukev
Prototypal inheritance isn't inherently more complicated than what we're used
to. Familiarity is not the same as simplicity.

In fact, it may be what holds us back from genuinely _better_ paradigms.

~~~
anonymoushn
Indeed. I find it a bit odd that prototypal inheritance (in some more powerful
form than JS's) isn't the normal way of doing OO in scripting languages.

------
Fargren
This is hardly computer science, it's only programming. Calling this computer
science is similar to saying that a course in grammar and spelling is a course
in literature. Programming, while vital to most forms of computer science, and
the most marketable skill of a computer scientist nowadays, is just a tool.

~~~
jQueryIsAwesome
It is a "marketing tool" so to speak; is much cooler to say "I am a self-
taught computer scientist" than "I am a self-taught programmer". And like you
may know, with kids, coolness matters.

------
olegious
I'm not a programmer - my biggest issue with all the tutorials that I've seen
for Python, Ruby and even js on codeademy.com is that none of them actually
teach you how to do things within a web environment.

I realize that this is meant to be an "intro to CS" class and not a web dev
class, but a product can teach me how to create a simple web app that connects
to a popular API, retrieves data and displays the data on a web page is the
product that will get my money.

~~~
jeffreymcmanus
For JavaScript that's a mostly valid point since 99.9% of all JavaScript is
executed in the browser. When we teach basic JavaScript we include a week on
accessing the DOM because we know that's where people are going to go with the
language.

For Python and Ruby, it's best to have a handle on the languages first before
throwing in Web stuff. That's the case for two reasons: first, particularly
with Python, the web might not be the student's ultimate objective. But more
importantly, you want to start in manageable chunks and throwing in web stuff
can muddle things early on.

~~~
aidenn0
And this is why PHP is used for web-dev. The "Hello, World" webapp in PHP is
trivial to anybody who has ever done any html markup, and is usually the first
example. That makes it a gateway like this: 1) Do some HTML to make a webpage
2) I want to add <something dynamic> 3) Oh, I just ad <?PHP ... ?> to my page,
that was easy 4) I want to do <something harder>, oh, cut and paste 5) Now I
need to tweak this...

Which is part of why PHP is so popular, especially among people with more of a
web background and less of a programming background. I agree that it's better
to have a handle on the langage first, then throwing in web stuff, but if you
take that tact, many people will instead use the language that starts with Web
stuff, then adds in programming.

------
Magnin
While I like Khan Academy in general for their Math lectures, the selection of
CS lectures leaves much to be desired IMO. What they call "Computer Science" I
call "Intro Programming".

~~~
Magnin
Also: If you want Programming Tutuorial Videos, check out
<http://www.thenewboston.com>

------
thinkbohemian
Does anyone know how you can become a video contributor to khan? I have
several years of teaching experience, two of them with online learning models
and have worked with the University of Texas. I've attempted to contact them
and offer my free services, but haven't heard anything back. Not even a 'no
thank you'.

~~~
mostly_harmless
hate to disappoint you, but they wont host your videos no matter how great of
a teacher you are. If you have looked at a bunch of their videos, you might
have noticed that they are all done by one guy! Hence the name Khan Academy.
The whole site is from the crazed brain of this one guy.

You can see him talk in person in this TED talk:
[http://www.ted.com/talks/salman_khan_let_s_use_video_to_rein...](http://www.ted.com/talks/salman_khan_let_s_use_video_to_reinvent_education.html)

------
jwallaceparker
Interesting that he uses Python to teach the examples. Python is what I
learned first.

Does anyone have an opinion on whether Ruby or another language is better
suited for teaching basic programming concepts?

~~~
cube13
For starting out programmers, I think it really doesn't matter which language
that's used, as long as the language supports strong type safety, the ability
to create data structures, and, ideally, also has garbage collection. Java,
Python, and Ruby all work for this. In a perfect world, the language would
also support C-style pointers, but GC is more important feature for a brand
new programmer.

Initially, the goal should be to learn primitive data structure concepts and
usage(i.e. ints, char, strings, pointers, etc.). After that, they should learn
more complex structures, like linked lists. These should be taught without
referencing the built-in standard library structures. After that, simple
sorting algorithms can be taught(including recursion), as well as OO concepts.

Teaching all of that in a GC language is nice, because it removes a lot of the
memory management that starting out programmers always get caught up with. It
lets the student concentrate more on the concepts than on tricky memory
issues. That can be taught latter.

~~~
biaxident
Actually research has shown that it does make a difference: [Why complicate
things?: introducing programming in high school using
Python](<http://dl.acm.org/citation.cfm?id=1151880>)

They found that students who were taught Python instead of Java scored higher
on their tests. Languages like Python and Ruby make it far easier for people
to jump straight into the code. If I'm learning about linked lists why do I
need this main method? Ruby and Python have lots of abstractions which make it
easier for someone learning to be able to focus on the problem at hand.

~~~
jmlane
Indeed.

As someone taking a data structures course in post-secondary school where the
facilitation language is Java, I've struggled more with the Java development
environment than I have with actually understanding the data structures and
the implementations. Even the Java specific implementations are simple once
you can get your package and classes playing nice and compiled to bytecode.

This is not a slam on Java, just an observation from personal experience that
some interpreted languages like Ruby and Python tend to make it easier to do
casual programming exercises or tasks than those needing any compiling prior
to execution, such as C, C++, and Java.

------
choxi
Khan Academy is interesting but imo it's not complete. Technology enables us
to make learning an interactive experience -- either interacting with another
person or with a REPL interface (like Codeacademy). Just posting videos online
in one place is kind of like the obvious step that took a surprisingly long
time to get to. It's definitely a step forward, but I can't imagine people are
learning enough about, for example, Biology to be able to do something
significant with what they've learned.

Computer science is a little different, because people have been learning CS
online since well before Khan Academy.

~~~
wyclif
I think if you read the comments here from Khan Academy employees, you'll
realise that Sal & Co. are quite aware it's not complete yet. Rome wasn't
built in a day.

------
Kilimanjaro
Personally, I don't like videos. So if I had $100M in my pocket I'd create
transcripts of all lectures in KA and put them together in the greatest
library online, sort of a modern bibliotheca alexandrina.

~~~
stevelosh
1\. Go to a video.

2\. Click subtitles.

3\. Click the subtitle widget.

4\. Click "subtitle homepage".

5\. Hover over "download subtitles".

6\. Click txt to download a plain-text transcript.

I'm pretty sure most of the Khan Academy videos have subtitles (at least
English ones).

Disclaimer: I work for universalsubtitles.org, the site that handles all the
Khan Academy subtitles.

------
mahyarm
Pretty cool! He has to do discrete math / mathematical logic & foundations to
fill out the 1st/2nd year of mathematics and most computer science math
requirements next.

~~~
sosuke
Does the mountain of other math videos and exercises on the site not already
provide that? I'm pretty sure they cover enough. They cover through Calculus
and maybe more. Which do you feel is missing?

~~~
Homunculiheaded
Usually a basic discrete math course covers: naive set theory, formal logic,
functions (khan covers under calc), relations, permutations and combinations
(covered by khan),and graph theory. Additionally you'll usually do a lot of
proofs with these since an understanding of how to do a proof is essential to
being able to study algorithms. Calculus and the like are actually the dual of
'Discrete math', which could be referred to as 'Continuous math'

------
swah
I wish he went more to the math/conceptual side. I can sense he giving a great
O(n) explanation...

~~~
anonymoushn
It might be best to leave the calculus in the calculus lessons.

------
cantbecool
Isn't Bill Gates creating schools where they primarily use videos in the Khan
Academy library?

~~~
frewsxcv
In Los Altos School District in the Bay Area, Khan Academy is being used as a
homework platform

------
gbeeson
That site is incredible and keeps getting better. Thanks for the post.

------
brador
Khan Academy has so much potential to be disruptive yet it feels squandered.
Why's it taking so long? What's the money being used for?

~~~
sosuke
What would you suggest to change that? I love Khan Academy as a learning tool
for myself but I wouldn't have the first idea on what to do next with it.

~~~
brador
Adaptive learning is the way forward. They've been planning it for ages and
it's taking way too long to roll out fully.

I'm gunning to compete with my own platform, but he's in as a non-profit which
means a for-profit doesn't stand a chance, especially with the timescales the
sector operates on.

The only way to create something to compete and light that fire under their
ass would be a "generous donation". I think I could do it though, within a
year tops, but unfortunately, I need to eat...

~~~
capnrefsmmat
What sort of adaptive learning do you mean? I'd guess you mean something like
ALEKS:

<http://www.aleks.com/about_aleks>

...but I'm not sure. The Khan Academy exercise framework is also open-source,
so presumably you can contribute that way.

~~~
brador
That's too basic to be competitive.

Try this link: [http://www.carnegielearning.com/higher-ed-
solutions/cognitiv...](http://www.carnegielearning.com/higher-ed-
solutions/cognitive-tutor-overview/)

~~~
jmcqk6
It's going to be a while before widely adaptive learning software comes
around. Learning Assessment is already a difficult problem, and when it's done
well, takes a lot of insight and wisdom on the part of the teacher.

As yet, there isn't a way to replicate that in software. One day it will be,
but until then, khan academy and those like it can't even come close to having
a good teacher.

That said, I can easily see how it could take the place of a bad teacher.

EDIT: I do see now that the CM software you linked to does have a human
component. That's an interesting aspect and I'm going to have to take a
careful look at this.

------
plessthanpt05
where are lectures about classes/OO programming? just gave the link a quick
glance and it seems good (i understand khan academy is for "gentle"
introductions), but doesn't look like it goes into OO programming at all
(which is kind of the point of python), no?

~~~
spacemanaki
Do you think that object oriented programming is really necessary for absolute
beginners? There's always this problem of coming up with examples with OOP
when being introduced to beginners, and you can end up with horrific "Cat
inherits from Animal" examples. GUI programming might be the best place to
introduce OO since it's a decent fit, however a lot of newbie GUI programming
would just be using a library, not building object hierarchies yourself.

Even the MIT "intro to programming and computer science" class (which uses
Python) doesn't touch OOP until lecture 14, after dynamic programming, divide
and conquer, bit of runtime complexity, recursion and more...

------
bjgraham
This is good. Everybody should be learning to program. Khan Academy and
Codecademy are benefiting everyone. I wrote about that here:
<http://goo.gl/cTcbp>

