Khan Academy Launches Computer Science Curriculum 146
joabj writes "Expanding beyond math and the physical sciences, Khan Academy has added a set of computer science courses to its popular collection of learn-at-home instructional videos. For the project, Khan tapped jQuery creator John Resig, who chose JavaScript as the first language to teach students. The initial set of tutorials cover drawing, programming basics, animation and user interaction."
-1 Flamebait (Score:1)
Queue Javascript bashing in 3...2....1....
Resig === The Man (Score:1)
His book Secrets of the JavaScript Ninja got me to love JavaScript. He wrote the framework that made JavaScript a pleasure and now he is educating young people. I only have one man-crush and it is on John Resig.
Fail (Score:1)
JavaScript is completely unsuitable to teach CS. It may have some suitability for a scripting-language course, but doing algorithmics, interfaces, architecture, clean design, etc., can only fail with JavaScript.
Re: (Score:2)
Why, exactly is this the case? Why can't you teach algorithms or architecture or clean design in Javascript? Interfaces are tricky, sure; at best you have to resort to something like duck typing in asserts if you want to be sure that something implements an interface, but the rest seems completely doable in JS.
Re: (Score:2)
The problem is that novice programmers will struggle with the language most of the time and will not see the things actually taught. A language for teaching must stand in the way as little as possible, be clear, orthogonal, little clutter, etc. The best for teaching algorithms and data-structures I have seen so far was Haskell. After the students have actually understood the concepts, and have seen one language, move to C and teach them about the other side, but keep using the same data-structures and algor
Let me be the first to say (Score:2)
Getting paid to listen to lectures (Score:2)
I love my job. I love the internet & online teaching. Why spend money when you don't have to? :-) (I also love all the other free stuff online like magazines & audiobooks & music & news & .....)
World's Most Misunderstood Language (Score:1)
Before you blindly dis' javascript, listen to Crockford
http://www.youtube.com/watch?v=gz7KL7ZirZc [youtube.com]
"Lisp in C's clothing"
"Lousy Implementations" to blame
And the prototype model is more pragmatic and less crazy than the object-fetishists will ever admit. You can do functional-style programming in javascript pretty well too.
Could it be that javascript is a language whose time has come, and the Khan academy have made a smart choice? Let's face it - it wouldn't harm to have more well-trained javascript program
Needs some other name than Computer Science. (Score:3)
I disagree with Kahn calling these Computer Science courses, but I have to admit that I am at a loss as to what to call them. Computer Fundamentals perhaps?
It is a disservice to those looking at these to think that Computer Science is making an iPhone app or game. It really trivializes how powerful computers are and the concepts they embody.
Re: (Score:2)
I'm waiting for the Khan Academy course on how to use a hammer.
Re: (Score:2)
Into to Software Development?
Re: (Score:2)
I disagree with Kahn calling these Computer Science courses, but I have to admit that I am at a loss as to what to call them.
When you figure it out, you should be able to apply the same term to any grade school course the subject of which they hand out graduate degrees. Math, English, Biology, Physics, History, etc. These beginner courses provide the lingua franca (programming languages) which we use to *begin* teaching Software Engineering (well the parts that aren't just pure engineering principles). If you want the academic, abstruse term, how about "Fundamentals of Algorithmic Expression".
Desktop / admin IT work needs a other name then CS (Score:2)
Desktop / admin IT work needs a other name then CS.
As some people think that CS = ALL IT or sys admin / desktop work.
When you also have MIS / tech / trades schools (that have differnt over all names for there tracks for there courses)
Also there are a lot of NON degree classes out there as well that just go on there own.
The S stands for Science (Score:3, Interesting)
What is this "real world" you speak of? (Score:2)
Different educational institutions have different goals. If you want to go be a programmer and hack source code to make games, apps, real world things, etc. than traditional University education is probably not for you.
Real world things? Like database engines, operating system kernels, compilers, enterprise distributed systems, parallel computing, algo-trading, animation/rendering engines that must run in uber-clusters? Yeah, sure, a CS education is not probably not for you </rolls eyes>
Unless you are writing a physics engine from scratch, your use of math is probably limited and often CS degrees require a lot of math.
Been working on software (both commercial/enterprise, systems development and for the defense sector), and in each I've had to constantly use CS-related mathematics to do my work. Even on the commercial sector, I've had to use num
Re: (Score:2)
I'm afraid that attempting to explain to unwashed masses the difference between Computer Science and Programming (and web page design) is equally futile to explaining the difference between hacker and cracker (and a script kiddie).
SICP (Score:5, Interesting)
Computer science is about processes and structures, not computers, and not programs. LISP is still the ideal vehicle for learning about the important parts.
On a personal note, a friend of mine had a CS 101 intro course some years ago that was Javascript based. It was absolutely terrible. I know that it was terrible, because I ended up re-teaching him each of the concepts using random old textbooks that I had lying around. He had no problem learning concepts in other languages (Fortran, BASIC, C, even some MIX when I used Knuth) and then applying them to back to the Javascript that he had to do the problems in.
I know that Javascript wasn't entirely to blame there, but it sure didn't help. But why try to polish that particular turd?
Re: (Score:2)
it's for kids, relax. there has to be an element of fun in it
Re: (Score:1)
And if they are 7 yo? Throw linear algebra at them?
Talk about out of touch.
Re: (Score:2)
I entirely agree.
Scripting languages should not be taught to first year students for a variety of reasons. I think in my opinion the primary one is that scripting languages do not expose the connections between information structures and the algorithmic complexity of those structures in enough detail to provide a good foundation to learn other concepts such as machine organization and operating and compiler theory.
-Hack
Re: (Score:2)
We learned ALGOL68 back in the day. I still think its clarity is unsurpassed. Understanding that "REAL a;" means "REF REAL a=LOC REAL;" and that "REF REAL a=HEAP REAL;" is something very different makes you appreciate the difference between a constant and a variable with a storage location behind it. Coming from BASIC and FORTRAN that was a real eye opener.
No wonder most newer languages like the PASCAL and C families are derived from it.
go with C (Score:2)
Not working (Score:2)
Does anybody know what the player requirements are?
The presentation style courses hang at "Loading audio..." for me. Chrome, chromium or iceweasel on Debian wheezy.
Can we stop the Slashvertisements? (Score:3)
This is the 2nd mention of the Khan "Academy" in the last week or so.
Re: (Score:1)
Only on Slashdot does an AC get modded Informative for pointing out that the LHC is in Europe.
and modded as 'Insightful' for pointing out that Europe is not part of America.
Computer Science Curriculum (Score:2)
Teaching basic coding skills is not computer science. Even teaching more advanced coding skills is not computer science. It's teaching coding.
Re: (Score:3, Funny)
Khaaannnnnnnnnnn
If the compiler/interpreter can add semicolons (Score:1)
Why have the freaking semicolons in the language in those positions anyway? Clearly they add no information.
Violation of minimalism.
Re: (Score:1)
You need them if you put the sequence on the same line:
alert(1) alert(2)
will not work, but
alert(1)
alert(2)
will. The language does not require a semicolon there and it is not a mistake to omit it. This is a deviation from the "type of whitespace doesn't matter" style of C style languages, but since it allows the semicolon in these places, what's the problem? You can make the type of whitespace irrelevant if you always use semicolons, or you can make whitespace "semantic" by omitting them.
Re: (Score:3)
the problem isn't that it helpfully adds semicolons where you forgot to add them. that would be great if it's all that it did. however, the problem is that it sometimes adds semicolons just when you don't want it to add them. what's worse is that it's impossible to know the difference between the two unless you're familiar with the language spec.
for example, like to word-wrap long lines in your code? be careful, javascript might just put a semicolon before your line break. in C all whitespace in code is equ
Re: (Score:3)
Not disagreeing with your analysis of what JS does... But seriously, if you hard word wrap, you're a moron.
Re: (Score:2)
I'm not talking about hard word wrap, I'm talking about manually formatting lines. Here's a simple example, but there are many variations, some much subtler...
return
SomeLongExpression() +
AnotherLongExpression();
Re:Mighty broad definition of "language" there (Score:5, Informative)
JavaScript can be an ugly language to work with, but the interactive editor [khanacademy.org] they have looks really good and nicely works around all the issue one frequently runs into when using raw JavaScript (catches missing semicolon, catches typos of function names, allows editing color values via GUI, automatically runs the code on each change, etc.).
Re: (Score:2, Insightful)
Which part of "Academy" confuses you?
Re: (Score:1)
Re:Mighty broad definition of "language" there (Score:5, Insightful)
This really doesn't sound like "computer science" when you read the description. Where are algorithms, data structures, computability, complexity theory, etc? Programming != computer science. Even if they really meant that they were teaching programming, teaching a fad language used at an application level (not same as high level language) is not really the best way to teach programming. And what does "drawing", "animation", and "user interaction" have to do with programming or computer science?
Way to go Khan to dumb down computing even more than it already is.
Re:Mighty broad definition of "language" there (Score:4, Insightful)
moreover, as part of web 2.0 is seems to have kicked Silverlight and Flash's collective asses
and it's extensions into JSON seem to ensure that it will be around for another 20 years
Maybe javascript != computer science, but it is certainly a programming language that is widely used and probably an easier introduction thatn perl/php/c/java
getting a computer to do anything at all is major step for a beginner -why do you think logo with its drawing is such an attractive tool to teach kids?
-I'm just sayin'
Re: (Score:2)
Yep, and it's there for the same reason as other entrenched bullshit is still around -- Not because it's any good at all, just because it's what we have available to work with. As someone who uses JavaScript as well as nearly all other "popular" languages, from C++ to Perl, to PHP, Assembly, I must say, JS is my least favorite to work with -- Let me just repeat that: I MAINTAIN PHP CODE, AND THINK JS IS WORSE!
It's a crappy language, with designs that needlessly screw performance, that was never intended
get off your high horse (Score:1)
'And what does "drawing", "animation", and "user interaction" have to do with programming or computer science?'
gee, i dunno. maybe to get KIDS INTERESTED?
maybe you can wait a few fucking days before they get introduced to factory methods?
from your sneering ivory tower, do you even remember what childhood is?
Re: (Score:2)
What does childhood have to do with it? I thought Khan Academy tought serious academic subjects? This doesn't sound like a serious subject, it sounds like overly broad introduction to something not really at all like computer science.
Re: (Score:1)
What does childhood have to do with it? I thought Khan Academy tought serious academic subjects?
Like basic spelling? I guess it, along with application development doesn't meet your personal criteria for a "serious academic subject". Probably too useful and productive in real situations. After all, it's not a "serious academic subject" unless it involves studying dead people is it?
Re: (Score:1)
Do you people have CS degrees and know what they are, or are you just going around calling people elitist?
Yes, there is a typical curriculum that one expects from a decent university CS program, and no, it does not include "animation". I'll take an algorithms course any day over learning how to draw from the guy who created jQuery.
Re: (Score:1)
And what does "drawing", "animation", and "user interaction" have to do with programming or computer science?
What does computer science has to do with "drawing", "animation", and "user interaction"?
Re: (Score:2)
Nothing much... what's your point? Is it that what people want to learn is drawing, animation and user interaction? If so, they want to do a programming course, not a CS one. Just like the academy is teaching a programming course, not a CS one.
Re: (Score:1)
I made a rocket ship for the man! (Score:2)
Re:Mighty broad definition of "language" there (Score:5, Insightful)
Every language has its ups and downs. Javascript has the advantage that it bears some similarities to non-scripting languages and will produce instant results without getting too heavily into theory.
Re:Mighty broad definition of "language" there (Score:4, Insightful)
It also has a number of rather large disadvantages: requiring an understanding of closures, no real notion of classes (objects are just glorified key-value stores), implicit variable scoping, implicit insertion of semicolons (in ways that can actually cause errors in some cases), and the confusing (ab)use of the plus operator for string concatenation... and that's just the language itself. As soon as you start adding in the brain damage that is the DOM, it quickly becomes one of the worst programming languages you can possibly use to teach young minds, posing a very real risk of turning them off to programming rather quickly as soon as they try to step outside the narrow confines of the lecture material.
Want to make someone swear off programming for good? Make them write any sort of complex web-based text editor using ContentEditable. It makes my i386 assembly days seem sane by comparison; you spend more than 99% of your time working around bugs in one browser or another, and less than 1% of your time actually writing code that actually does something useful.
Re:Mighty broad definition of "language" there (Score:5, Interesting)
Let me tell you where I'm coming from ... I hated JavaScript ... HATED IT ... for ten years, I endured it. A while back, I decided to finally wrap my head around it and actually study it the same way I studied languages like Java, C, and Objective C. Once I dropped the notion that it wasn't a class based language and that I needed to think differently in order to use it, I found it remarkably freeing.
In fact, I grew so accustomed to it that I actually find class based languages constricting.
Yes, it does have some dangerous gotchas, so the trick is to avoid those areas of the language, and then use static analyzer like JSLint for backup. It also helps to "use strict" on all your scripts
The true irony is once I've come to enjoy the old dog, I've decided to move out of development. Maybe next lifetime :)
Re: (Score:2)
Yes, it does have some dangerous gotchas, so the trick is to avoid those areas of the language
No "the trick" is to get people to overlook the bullshit rather than use a better language or actually fucking fix it... If you have to avoid an area of the language then the language is BROKEN.
Re: (Score:2)
But no true Scotsman would be caught dead writing JavaScript!
(Before you flame, I should mention that I've been using it myself since 1997, and it's still my first true love amongst programming and scripting languages.)
Why is understanding closures bad?? (Score:2)
It also has a number of rather large disadvantages: requiring an understanding of closures
Why is this bad?
I think closures are an important fundamental concept to understand, they help you think about what is going on when a program runs at a whole other level...
And yes I think they are good to start getting a handle on at the outset of learning.
Closures do not have to be hard to learn at all; an introduction to CS at Rice University used Scheme and taught closures to introductory students.
Re: (Score:3)
In principle, yes. In practice, it's a heck of a lot harder to properly document and verify the expected behavior of code if you have to write complex regular expressions just to get a complete list of all the different possible keys. I've fixed bugs in Perl code (which obeys that same design principle) where some subtle misbehavior was caused by a simple typo in the name of a key—an error that went undetected for months, yet would have been
Re:Mighty broad definition of "language" there (Score:4, Insightful)
Name a language that is easier to get started in. You already have a browser that runs Javascript, regardless if you're on MacOS, *nix, or Windows (or whatever system you use most likely), now all you need is a text editor, which is built in on most systems. I don't know of any other language that doesn't require you to download and install some sort of compiler, interpreter, SDK, or whatever, all of which are barriers to entry. Plus, you have the advantage of using one of the most widely used languages on a platform that can distribute your code very easily and very portably.
You may not like Javascript--and granted, as a language, it's got plenty of warts. (Note that you can fix a great deal of these warts on modern browsers by simply including a "use strict" declaration at the top of your code). But it's a great language to start out in, if for no other reason than that the start-up cost is very close to negligible, and it's a useful language that enjoys a level of ubiquity that most other languages only dream of.
Re: (Score:2, Insightful)
Name a language that is easier to get started in
C
I don't know of any other language that doesn't require you to download and install some sort of compiler, interpreter, SDK, or whatever, all of which are barriers to entry.
You are allegedly learning "computer science" or at the very least "computer programming". Being able to perform rudimentary tasks, such as file download and software installation on a computer is a reasonable prerequisite.
Just as someone taking a course in "toaster repair" or "toaster de
Re: (Score:2)
I felt that same way about "semantic whitespace" 12 years ago when I first learned python. The idea just reminded me of too many crawling horrors like RPG and FORTRAN on punch-cards (#include <std_you_kids_get_off_my_lawn.h>) but seriously, an hour into it and you don't even notice it any more. It's really just enforcing what you should be and probably already are doing in C/Perl/C++/Java etc.
If you haven't really given python a go, I'd really encourage you to do so and don't let the "whitespace thi
Re: (Score:3)
My objection to semantic whitespace is that it frequently gets trashed when doing copy/paste type operations to and from other sources.
Its also more fragile when doing code maintenance, refactoring, editting, etc.
Re: (Score:2)
I have to agree that this is a legitimate complaint. For example, posting python code here on slashdot is a virtual impossibility it seems.
Re: (Score:2)
I had to use "semantic whitespace" pre-Python on Occam. It was very painful because I was using VI and it insisted on optimizing and sticking in tabs if I shifted lines, and I had to hunt down the settings to fix this (back then docs on vi were scarce to nonexistent). Emacs similarly wanted to put in tabs by default and I just didn't have the patience at the time to come up with an Occam mode for it. My overall impression was that the spacing was an interesting idea _experimentally_ but that actual pract
Re: (Score:2)
The good news is that our documentation and editors are much better these days, so those pains are much lessened in today's working environment.
I hear you with respect to the rabid fandom. I try to avoid evangelization, but also approach such discussions with my preferences and biases stated up front. I dig python, you may not, and I'm totally cool with that! :-)
No you do not get used to it (Score:1)
an hour into it and you don't even notice it any more
I was with you on the crawling horror bit, especially special columns in FORTRAN code (not even on punch cards) that indicated the line was a comment...
But then you lost me with "you don't notice it any more".
I had to maintain some python code for a while. I hated the semantic whitespace angle, hated it. Over weeks and months I only grew to hate it more.
I know and have used for real work, dozens of computer languages. I consider myself very open minded
Re: (Score:2)
Hence the YMMV at the end. No worries. :-)
Re: (Score:2)
Semantic whitespace is the ultimate consequence of the myth of human-readable code.
Myth? Myth? Myth?
Yes, myth. I cannot read code without an editor -- it's just a series of hexadecimal codes until such time as the editor maps it to a character set. And those hexadecimal codes have to be interpreted from a series of bits by a computer, reconstructing them from binary digits according to the endianness used by the system. And those bits are determined by reading the polarity of tiny magnets.
All code edito
Re: (Score:2)
Well, if you define abstraction as myth, then all computing tasks are built on layers upon layers of myth. As a pro-Romanticist, I rather like your definition, frankly. There are even more layers of myth above your editor, as either the GUI or the character renderer turns those characters into a raster format to be fed across a signal line to the monitor, which will cause photons in a narrow but well-defined band of frequencies to be emitted, whereupon those photons are focused on your retina, activating r
Re:Mighty broad definition of "language" there (Score:4, Insightful)
Name a language that is easier to get started in.
CoffeeScript. Granted, it introduces an additional dependency (CoffeeScript) on what is otherwise the simplest and easiest development platform. Which leads me to the following:
You already have a browser that runs Javascript, regardless if you're on MacOS, *nix, or Windows (or whatever system you use most likely), now all you need is a text editor, which is built in on most systems. I don't know of any other language that doesn't require you to download and install some sort of compiler, interpreter, SDK, or whatever, all of which are barriers to entry. Plus, you have the advantage of using one of the most widely used languages on a platform that can distribute your code very easily and very portably.
You may not like Javascript--and granted, as a language, it's got plenty of warts. (Note that you can fix a great deal of these warts on modern browsers by simply including a "use strict" declaration at the top of your code). But it's a great language to start out in, if for no other reason than that the start-up cost is very close to negligible, and it's a useful language that enjoys a level of ubiquity that most other languages only dream of.
^^^ This. This is the reason (a really good reason) to use JavaScript as an introductory programming language with virtually zero barrier of entry (in terms of development env. setup.)
Obviously, people will complain - argh, real devlupers use <insert toolchain> with <insert IDE/editor/whatever>. And on a real CS-oriented, full-blown and complete programming course, this is true. But we need to notice that Khan's materials are not full-blown courses, but tutorials with the explicit aim of being as accessible to the masses as possible.
Whether this (and/or the choice of JavaScript) will turn people unsuitable for programming into legions of useless code monkeys is a non-issue. After all, the typical CS programs at brick-n-mortar universities have been producing useless code monkeys since the dot-com.
What a system of programming tutorials as implemented by Khan's academy will do, however, is to make the learning of programming more accessible to those that already have the potential of being good developers. Perhaps this could reach them early on before they finish their secondary education (or allow currently enrolled CS-students to use them as add-ons to their formal curriculum.)
JavaScript is a god-awful language, but its development setup makes it a decent first-language. Yes, it does not have true OO, but neither did BASIC. And good and bad developers will become so whether they use JavaScript, BASIC or Haskell (yes, there are atrocious Haskell programmers.)
Re: (Score:2)
Re: (Score:2)
Name a language that is easier to get started in. You already have a browser that runs Javascript, regardless if you're on MacOS, *nix, or Windows (or whatever system you use most likely)
Not if you haven't installed a full UI, you don't.
Most non-GUI browsers don't do javascript.
I don't know of any other language that doesn't require you to download and install some sort of compiler, interpreter, SDK, or whatever, all of which are barriers to entry.
The shell you use is also a full language with an interpreter. No installation needed in linux/unix, because there will always be a shell. Even on embedded systems.
And I've seen programs written in shell that are quite large and advanced.
Why use shell? Ease of maintenance, more than anything.
If you have a bottleneck, singling out that part for a compiled program that can be called with parameters or piped from a s
Re: (Score:2)
Why do you need one that's easy to get started in? Khan Academy labeling itself as "advanced topics simplified for busy people"? Does it teach physics and calculus the same why by skipping the hard stuff?
Re:Mighty broad definition of "language" there (Score:5, Funny)
.
Real Programmers must spend their first year writing Pascal code to create hypothetical schedules for students at a university, followed by implementing every data type in a fat textbook from "Associative Array" to "Weight-Balanced Tree." Second year, the same thing - in Scheme. Final year, same thing - in assembler - and with runtime complexity proofs.
Congratulations, the both of you remaining are done.
What is this? Use of libraries? Graphics? User interaction? Heresy I say!
Re: (Score:2)
Real Programmers must spend their first year writing Pascal code [...]
Okay, I'll bite. [pbm.com]
Re: (Score:2)
Khan tapped jQuery creator John Resig, who chose JavaScript as the worst language to teach students.
FTFY
Oh please. Visual basic. Intercal. Assembly language / raw machine code. Cobol. Pascal. Awk !
Re: (Score:2)
Nearly 20 years after the class I still cringe thinking about it.
Re: (Score:3)
You NEED to teach assembler at some point or you end up with graduates who are unable to understand the basic computing model. That doesn't mean they ever need to use it in a job but if they don't know it they will be impaired and possibly end up like the useless sorts of programmers who don't think efficiency is important or that you can solve it by getting faster computers.
Re: (Score:2)
With the exception of COBOL those might be fine things to teach kids. They get the basics down without corrupting their ideas. It's pretty easy to go from basic to something like Java because you just relearn everything and the better structures mean you like it more and don't have to unlearn all the crap you learned. You just learn an entirely different form. You're not going to corrupt somebody's ideas by having them write out a factorial program in assembly.
Re: (Score:3)
Assembly language
Actually, I have, in fact, taught students Assembly language as their first language.
It was a bit of a fluke of scheduling as they were first year engineers and had to cover C++, MATLAB and microcontrollers (i.e. assembler) in the first year. Due to the number of students and sizes of the labs, some of them happened to get assembler first.
It's actually not a bad way to start It depends very much on the student.
Some of them click with high level languages and can get going straight away. Som
Re: (Score:2)
I completely agree. BASIC was my first language. C was my second, and before I could fully learn it I delved into Assembly.
It wasn't until Assembly that I met the man behind the curtain, we shook hands and he imparted his "wizardry" to me. I went back and mastered C in a week. All other languages became simply syntax rules and a new API -- A few weeks work to get proficient in the language and then just having API docs available. I can more quickly understand the high level languages like Haskel, C++,
Re: (Score:2)
Re: (Score:2)
Then why not something like Smalltalk? Javascript is unsuited to this task. In fact, I'm having a hard time thinking about a more unsuitable language. Maybe Brainfuck?
Re: (Score:2)
At least Javascript is just simple C scripts.
But really, I'd start on Python, Ruby, C, or BASIC, depending upon your inclination.
Re: (Score:2)
LOGO, then BASIC then whatever you want but that's the way I'm planning to teach my son. LOGO gives instant gratification and BASIC is well, as easy to understand as a Turning complete language can probably be.
Re: (Score:2)
BASIC -> python / ruby / javascript / shell script -> Visual Basic -> Java/C# -> C++ -> C
Then you're free to try crazy things like smalltalk, obj-c, haskell, brainfuck, etc. on your own.
Re: (Score:2)
damn autocorrect...
Re: (Score:2)
I like Javascript, it offers some very elegant ways to solve complex problems, but it's definitely not a language for a beginning programmer.
Javascript makes it very easy for a programmer to hang himself and requires a lot of self-discipline and knowledge of what features to use and which to ignore.
I rarely use Perl or Python, but those would probably be far better languages to start with.
Java and C# are rather clean too, but perhaps a bit too complex to start out with.
Re: (Score:2)
Re: (Score:2)
Re: (Score:1)
careful, you are stepping on some toes, saying that free market works. This doesn't fly here, on /.
Re: (Score:1)
iTunes U has a whole series of videos on Introduction to Algorithms from MIT OpenCourseWare. The videos can also be found from MIT here [mit.edu].