So you can scrub through the lesson and play and pause it, and the instructor can type code into the editor directly causing it to output on your screen in real-time. But the amazing outcome of this is that the viewer can pause the lesson at any time and fiddle with the code directly, instantly changing the outcome. The downside to this is that if the lesson is then resumed, your modifications are kept and the code will be out of sync with the teacher's.
Another cool thing is that the teacher can draw directly onto the program output section just like in normal Khan Academy videos.
Brilliant. I'd say it's almost just as good as having someone right next to you teaching you how to code. The virtual teacher is typing the code directly into your computer!
Awesome - glad you're enjoying it! One thing to note: If you make changes to the code and then hit play again right now the user's changes are lost (making sure that playback will continue to work). We definitely want to persist those changes in some way, automatically, although in the worst case the user can always make some changes and hit 'Save' and they'll be saved to their own account.
As long as you're here, I'd like to bring to your attention a UX issue that might deeply impact first impressions. If you visit the site for the first time and click the play button, there's a good chance that, immediately following this click, the mouse cursor will stray into the code area.
This causes the code to turn white, and so the viewer just sits there listening to the lesson and watching things change in the running-program frame, oblivious to the fact that the code is invisibly changing, too (one of the coolest parts of the product).
You might want to unfade the code and get rid of the "Pause" button if the cursor hasn't moved in a while, to ensure first-time visitors don't miss the awesome code-to-audio syncing.
Other than that, I'm super impressed with the site.
My ideal scenario would be to have the student's code saved in a sideboard, while the teacher's code would take over the forefront. Sort of like a really minimalist branch feature.
If you could make it work with the layout, it would be really cool to have the student's code window physically move off to the side, indicating that the teacher was taking over, but their code would still be there whenever they wanted to get back to it.
It is great, but in my opinion "almost as good" is a big stretch. Having a tutor right next to you is fundamentally different in a number of ways. For one, you can ask any question and likely have it answered immediately.
Of course, the KhanAcademy course actually exists whereas private tutors for all students do not. So my point only stands in an idealized world were we assume cost/time/space are no obstacle.
Methinks "Computer Programming" or "Information Technology" would be a better title for this section than Computer Science. They are more general and applicable to the content.
I disagree. We're working towards the goal of having a comprehensive Computer Science curriculum and this is just the first step. I talk more about our reasoning and methodology here:
http://ejohn.org/blog/introducing-khan-cs/
I really love what is being done here so far, especially the voice overs and live code editor, but I think it might be helpful to first-time visitors to put some more of that info on the khanacademy.org/cs page as well.
Right now, at first glance it just looks like the Khan "Computer Science" curriculum is solely about learning how to make drawings and animations with processing.js. It can be a bit confusing to the first-time visitor, who might be asking "What is this page going to teach me exactly?".
This. I appreciate the goal of the program most certainly, but I'm having a little trouble seeing a road map from the current spot to something like the theory of computation or complexity theory. It'd be cool if once the KA people have sort of a direction or loose map of how this is going to work that they could blog about it again.
It's cool, regardless, I'm just personally a bit of stickler for calling things Computer Science. I think the term is overused to the point of losing its original meaning.
This. Exactly. I was really confused. I've been trying to learn JS on an off for about a year. When I was shown the new CS program at Khan Academy today, I was instantly confused because...I was drawing pictures using processing.js. So..was I learning javascript or was I learning this processing.js that runs on top of javascript? As a beginner, I think it's super important you clarify this.
John, while I think that a lot of value will be derived from this (the environment is very cool!), your blog included the following:
"When I look back at how I became interested in programming, or ask other programmers about how they started to program, the answer is very frequently: “I was given a [Basic/QBasic/Python] compiler and a bunch of programs and I wanted to understand how it all worked so I could write my own!” It was only after digging in to the code that the student wanted to understand how to tackle certain programmatic challenges – but they then did so with great gusto!"
Which sounds great, but speaks directly to what cantankerous mentioned: this is more about computer programming than it is about hard Computer Science. Programming is just a subset of CS, and I've personally known several CS researchers who haven't touched code in years. This topic has been beaten to death, but this approach is conflating the tool (programming) with the study (CS). I realize that there's much more to come, but the introductory material that I've viewed thus far does nothing to dissuade me of this fact.
Again: I think that this is a laudable effort, and hopefully will encourage many more youngsters to get into programming. I was just hoping to see material more along the lines of computer numerical methods, computer architecture, data structures and so forth, that would be a true introduction to the wider world of what CS is.
Awesome work! But I have to agree with cantankerous. This is more about programming than computer science. If the premise is that a student should learn programming before computer science that's fine, but the curriculum should be labeled as such. The drawing tutorial video highlights this point for me when it makes a false assertion about coordinate systems in "computer science". More than just arguing semantics, this could create false expectations among students of what they are learning compared to university computer science programs.
Information Technology is not a good title. Incidentally, Knuth said that he was interested in computer science and had little interest in Information Technology. IT is subject to fads, such as ITIL, the Information Technology Indoctriation Library, which is an outlet for the frustrated British colonialist impulse, and all that implies.
Interactive numbers in the UI: seriously awesome. LOVE that they did this. Hopefully we'll get live updates to code in more systems, it's wonderful.
Lack of a 'course' to go through: ? I have no idea where to start. Nor can many of these be applied outside of the little editor with the 'tutorial'. Elsewhere, KA has a nice 'do this, then that (or that)' set of branching paths that give you a reasonable path to take. I see none of that here. Am I missing something?
I also really enjoyed the interactive numbers - I thought that it'd be overkill and not at all useful, but you're really more likely to try things out if it's dead simple.
Playgrounds are fun, and I've done a huge amount of learning in them (and building them for my own play).
I'm not convinced that they develop great foundational knowledge about a system; they tend to favor quick, narrow dives (to any depth), rather than mucking around in all the boring bits that actually make the whole system. Great for getting the gears turning and keeping interest levels up, not great for full comprehension.
This looks like it has more to do with programming than computer science. That's a good thing, in my opinion, since I think programming is probably more generally useful. But it's a little misleading as the title.
I would really like to see something like a Khan Academy for introductory computer science. As it is, it seems there's nowhere to learn computer science basics at a below university level.
I haven't checked out Coursera, but isn't it more of a college course that you can take online? Khan's videos seem much more accessible and are mostly aimed at a high school level. There are many people who browse through Khan's videos who don't have the time, motivation, or ability to take a Coursera course.
I think that basic computer science (or at least basic theory of computation) is at least as important to understand in the modern world as algebra or calculus, and I don't like that it isn't more widely taught. I looked at Khan Academy hoping to find a good introduction for someone and was disappointed when I found that all it had was an introduction to programming.
Coursera is more like college course in that it has lecturs and after that you have 'homework' but its much better then normal college stuff put on the net. It is made for the internet not for offline and thrown on the net.
I'm checking CS on Khan academy every few weeks with hope for something like this, the Python class was great, but this is really exciting, and having Vi Hart do the videos is cool (or someone with a very similar voice...) - correction: it's narrated by Jessica Liu, who is doing an amazing job too
I wonder why they didn't do the Computer Science class in Python, especially that now more schools are adopting Python. Isn't Python better for learning than Javascript? Did they choose Javascript for this one just because they already had a Python course and they wanted a Javascript one now?
It seems pretty clear that it's for practical reasons: you want that sort of rich in-browser experience, it's going to be easiest to provide using JS.
What I think is a more interesting discussion is why they're not using CoffeeScript or some other flavor of JS that glosses over a lot of the idiosyncrasies of the language and arguably offers a more beginner-friendly syntax.
I think that python is the better choice for an in-person class, but building an in-browser js interpreter is a lot simpler than an in-browser python interpreter.
Hmm. that makes sense. because browser have been handling js for a longer time and so there would be more support for a in-browser js interpreter. I have seen some python in-browser interpreters, which are good though.
Great work, but I have some feedback about the first video shown to everyone who visits the Computer Science page.
1) It jumps right into talking about syntax of programming instead of showing screen shots of what a person will be able to build after completing the lessons, the benefits of learning about Computer Science, some cool problems they will know the answer to, etc, like Udacity does.
2) It is spoken way too fast. It's going to turn off almost all non-native english speakers, as well as confuse many english speakers.
3) As if that's not bad enough, anyone who turns on closed captioning to get a transcript will be even more confused, as YouTube's transcription is both messy and flashes quickly. It's so useless, you should look into disabling the CC button for the videos while looking into other approaches in the mean time.
Example:
"according to a common just by out of the two facets to the front and we call this commenting out coat now the fun we skipped and sometimes this can get away with the land was for".
4) When re-recording it, I hope the speaker (who is female) says "men and women" rather than "dudes" when talking about programmers several times. Lots of women have contributed to software development. Otherwise, she made some great jokes!
Speaking slower would make the videos much longer, which would lose viewership. I'm in favour of having the presenter talk quickly, thus making the video shorter. The words are all spoken clearly; it's easy to pause and rewind if you need to.
It is spoken way too fast. It's going to turn off almost all non-native english speakers, as well as confuse many english speakers.
That's what the 'rewind' button is for. There is nothing more frustrating for those of us who do understand English than a slow speech track on a video.
Maybe a great solution would be to allow other users to record their own explanations for the lesson, so that the viewer could choose (and vote up) the ones they like better (by clarity, preferred accent, a different human language altogether, etc.)
It really improves on the classic style in two ways:
1. It's very easy to get started. There's no setup; just click a link.
2. The connection between the code and what it does is made very clear. The picture depends on the code, and changes when you change the code. There are sliders you can adjust for each integer literal. Bam!
For example: http://www.khanacademy.org/cs/booleans/839898911
So you can scrub through the lesson and play and pause it, and the instructor can type code into the editor directly causing it to output on your screen in real-time. But the amazing outcome of this is that the viewer can pause the lesson at any time and fiddle with the code directly, instantly changing the outcome. The downside to this is that if the lesson is then resumed, your modifications are kept and the code will be out of sync with the teacher's.
Another cool thing is that the teacher can draw directly onto the program output section just like in normal Khan Academy videos.
Brilliant. I'd say it's almost just as good as having someone right next to you teaching you how to code. The virtual teacher is typing the code directly into your computer!