Slashdot Mirror


Khan Academy Launches Computer Science Curriculum

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

146 comments

  1. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Yeah, Javascript is the language that includes the unexpected behaviour of automatically adding missing semicolons

  2. Alls I can think of when I hear stories of this web site is that Hank Hill's neighbor has finally hit his stride and is movin' on up. He's gotta be in a right proper mansion by now.

    "Kahn Souphanousinphone, we would be honored if you would join our country club."

    --
    (-1: Post disagrees with my already-settled worldview) is not a valid mod option.
  3. -1 Flamebait by Anonymous Coward · · Score: 1

    Queue Javascript bashing in 3...2....1....

    1. Re:-1 Flamebait by Anonymous Coward · · Score: 0

      Fr1st P0s4r beat you to it....

      Gotta refresh early, refresh often to get the prime spots under the bridge where trolls live.

  4. Re:Mighty broad definition of "language" there by grumbel · · Score: 4, Informative

    JavaScript can be an ugly language to work with, but the interactive editor 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.).

  5. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 3, Funny

    Khaaannnnnnnnnnn

  6. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    I thought it was the language that tries to automatically fix the programmer's omission of semicolons...

  7. Re:Mighty broad definition of "language" there by Intrepid+imaginaut · · Score: 4, 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.

  8. Re:Mighty broad definition of "language" there by timothyf · · Score: 3, 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.

  9. Re:Mighty broad definition of "language" there by timeOday · · Score: 4, Funny
    Heh, I noticed that too.

    .

    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!

  10. Re:Mighty broad definition of "language" there by vlm · · Score: 1

    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 !

    --
    "Science flies us to the moon. Religion flies us into buildings." - Victor Stenger
  11. Re:what is Khan for? by swanzilla · · Score: 1

    Self-study hyperlinks and take a look at the (free) wealth of info Khan has out there. If interactivity is your thing, the forums are far busier than office hours were in my university STEM classes.

  12. Re:Mighty broad definition of "language" there by Zaphod+The+42nd · · Score: 1

    There's something to be said for being able to make changes and see the updates in real time. When you're first learning especially, and when its just the most basic of basics, that's huge.

    --
    GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
  13. Resig === The Man by Anonymous Coward · · 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.

    1. Re:Resig === The Man by Anonymous Coward · · Score: 0

      When John Resig runs a piece of Javascript, any missing semicolons materialize themselves spontaneously.

  14. Re:Free market education by Zaphod+The+42nd · · Score: 1

    Its definitely true. Can we just use government public education money to build facilities to enable kids to log on to Khan Academy? I think that'd be a huge improvement.

    --
    GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
  15. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Thus making for sloppy "programmers." It's fine if it's an experienced programmer, but it makes for a harsh reality check when these budding coders pick up something more substantial.

  16. Fail by gweihir · · Score: 0

    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.

    --
    Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
    1. Re:Fail by timothyf · · Score: 1

      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.

    2. Re:Fail by Anonymous Coward · · Score: 0

      > Why, exactly is this the case? Why can't you teach algorithms or architecture or clean design in Javascript?

      I have never, ever, seen a good JS debugger. Nor good error messages for static errors.

      It is far too easy to get stuck on trivialities with JS. The language gets in the way most of the time.

    3. Re:Fail by Anonymous Coward · · Score: 0

      JSLint + Chrome dev tools.

    4. Re:Fail by gweihir · · Score: 1

      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 algorithms taught with Haskell. All those that survive this will be able to separate solution and tool used afterwards. They will be prepared to deal with atrocities like Java, because they will be able to design solutions in the abstract and only then map it to the concrete tool.

      Teaching a language is a very small part of the problem. But even that can easily be messed up. The problem with my proposed approach is not the students, but the challenge to find an instructor actually competent enough to do it that way.
       

      --
      Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
  17. Let me be the first to say by Zaphod+The+42nd · · Score: 1

    Awesome. I'm going to make everyone I know watch these. Time to get rid of the "Programming is just typing!" school of thought. And maybe teach some people how to think in new ways.

    --
    GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
  18. Re:Mighty broad definition of "language" there by Desler · · Score: 0

    What is this? Use of libraries? Graphics? User interaction?

    Clearly Javascript is the only language with such things. It's a good thing you were here to tell us all about how we should incorporate libraries, graphics and user interaction into other languages.

  19. Re:Mighty broad definition of "language" there by MightyMartian · · Score: 1

    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?

    --
    The world's burning. Moped Jesus spotted on I50. Details at 11.
  20. Re:Mighty broad definition of "language" there by craash420 · · Score: 1

    "Oh please. Visual basic. Intercal. Assembly language / raw machine code. Cobol. Pascal. Awk !"

    Nearly 20 years after the class I still cringe thinking about it.

    --
    Extra medication for all!
  21. Re:Mighty broad definition of "language" there by Tatarize · · Score: 1

    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.

    --

    It is no longer uncommon to be uncommon.
  22. Getting paid to listen to lectures by cpu6502 · · Score: 1

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

    --
    My AC stalker: " I personally agree with your posts most of the time, but that won't keep me from modding you troll"
  23. Re:Mighty broad definition of "language" there by Zaphod+The+42nd · · Score: 1

    Smalltalk? Are you kidding? GTFO! Smalltalk is the ugliest thing in the world, ugggggh. Please don't force messaging on newbies, that shit is awkward as hell. Smalltalk is what lead to this annoying world we live in where you have to write so much obj-c. Uggggh.

    At least Javascript is just simple C scripts.

    But really, I'd start on Python, Ruby, C, or BASIC, depending upon your inclination.

    --
    GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
  24. Re:Mighty broad definition of "language" there by dgatwood · · Score: 3, 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.

    --

    Check out my sci-fi/humor trilogy at PatriotsBooks.

  25. If the compiler/interpreter can add semicolons by presidenteloco · · Score: 0

    Why have the freaking semicolons in the language in those positions anyway? Clearly they add no information.

    Violation of minimalism.

    --

    Where are we going and why are we in a handbasket?
    1. Re:If the compiler/interpreter can add semicolons by Anonymous Coward · · 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.

  26. you're a damned liar, roman_mir by Anonymous Coward · · Score: 0

    your sock puppet claimed you could only post 3 times a day. will he come and support your argument in this discussion?

    1. Re:you're a damned liar, roman_mir by Anonymous Coward · · Score: 0

      No, you are a sock puppet.

    2. Re:you're a damned liar, roman_mir by Anonymous Coward · · Score: 0

      ya'll my cock puppets

  27. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0, Insightful

    (catches missing semicolon, catches typos of function names, allows editing color values via GUI, automatically runs the code on each change, etc.).

    Or you could acquire a little skill.

  28. Re:Mighty broad definition of "language" there by afidel · · Score: 1

    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.

    --
    There are 4 boxes to use in the defense of liberty: soap, ballot, jury, ammo. Use in that order. Starting now.
  29. Computer Science? by Anonymous Coward · · Score: 0

    I was excited until I saw the content.
    You can call that a programming course. But definitively not CS!

    Very nice programming course though.

  30. Re:Mighty broad definition of "language" there by Zaphod+The+42nd · · Score: 1

    Yeah, IMO the best method (more or less what I did):

    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.

    --
    GCS/MU/P d- s:- a-- C++++$ UL++ P+ L++ E+ W++ N o K- w--- O M+ V- PS+++ PE Y+ PGP t+ 5- X R++ tv+ b++ DI++ D++ G+ e++ h-
  31. Computer Science != Programming by Anonymous Coward · · Score: 0

    Just saying.

  32. Re:Mighty broad definition of "language" there by mwvdlee · · Score: 1

    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.

    --
    Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
  33. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    I like Javascript, it offers some very elegant ways to solve complex problems

    Such as?

  34. No Discrete Math, No Algorithms by Anonymous Coward · · Score: 0

    I've been looking for a good free online discrete math course and one in algorithms comparable to what you would get in a real CS program. I've checked Khan, Udacity, OCW, but haven't found anything yet. Any of you aware of a good source for learning discrete math and algorithms?

    1. Re:No Discrete Math, No Algorithms by Desler · · 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.

    2. Re:No Discrete Math, No Algorithms by Anonymous Coward · · Score: 0

      Thank You!

  35. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    For loops!

  36. Typical Slashdot elitism at work by Anonymous Coward · · Score: 0

    Let me guess -- is this where a bunch of neck-bearded elitists start calling down from their high horses about how Javascript isn't a real language, and that anybody who wants to use these lessons should go off and let the 'real programmers' do their jobs?

    This is Slashdot - so of course it is.

    Hint: at least half of you seriously overestimate your software development talent. The other half of you stay logged into World of Warcraft or Eve Online too much to write any code.

    1. Re:Typical Slashdot elitism at work by Anonymous Coward · · Score: 0

      What about those of us who write code while you and your dad give us blowjobs? Shut the fuck up, cock jockey.

  37. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Not everyone wants to be a professional or researcher in computer science. For those that just want to know how to program, Khan et. al. are empowering services that strengthen my hope in humanity.

    That said, the purpose of University studies is a liberal education. Most interesting software out there -- including your libraries, graphics suites and UI frameworks -- requires a firm grounding in theory to understand and extend. See The Daily WTF for few thousand examples of what happens when you understand the interface but don't have the necessary background to extend the implementation. In lesser extremes, look at over-engineered java pattern-oriented code: most horrible code written by professionals is the result of an inadequate grounding in type theory. Of course, you can always pick up what you need as you go along. Work long enough on interesting problems and you'll end up on the wrong end of that time trade-off :)

    So, hobbiest? Welcome to CS, it's a wonderful world and I hope you enjoy building neat stuff in your free time! Professional or researcher? Put a few years up front to learn the theory, or spend you career writing "yet another CRUD app" and/or playing catch-up.

  38. World's Most Misunderstood Language by blamelager · · Score: 1

    Before you blindly dis' javascript, listen to Crockford

    http://www.youtube.com/watch?v=gz7KL7ZirZc

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

    1. Re:World's Most Misunderstood Language by Anonymous Coward · · Score: 0

      "Lisp in C's clothing"

      Shit rolled in bacon is still shit.

      "Lousy Implementations" to blame

      Yes, because the design of your language sucked.

  39. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 2, Insightful

    Which part of "Academy" confuses you?

  40. Re:Mighty broad definition of "language" there by vux984 · · Score: 1, 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 design principles" should already be familiar with toaster operation.

    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.

    Because after a few course hours on Javascript your main concern is how to distribute your apps? That's pretty optimistic. ;)

    The problem with javascript is 2 fold:

    a) its a pretty warty language that's easy to hang yourself with, that's not a good teaching language.

    b) the DOM is still pretty messy as a platform. Javascript on its own isn't the worst thing in the world, but the last thing you want for while your are teaching programming fundamentals is to get side tracked by some browser specific DOM issue.

    The benefits of javascript that you highlighted are what make it a good language for consumer application development. But that is orthogonal to being a good language for learning how to program.

    The fact that its everywhere really has no bearing on it being any good to learn with.

    I'd honestly recommend anyone serious about learning to program start with something with a strong IDE (code formatting, syntax highlihgting) and an integrated debugger, good variable watch windows, good code stepping tools, accurate complilation error reporting, compilation warnings (unreachable code etc; assignment where equality testing is likely, etc), ability to set breakpoints/conditional breakpoints, and so forth.

    Keep the focus on writing code, and watching it run.

    A text editor and a browser and some "developer plugins"
      is simply NOT a good learning environment, nor a good development environment. It may be what a lot of us are stuck with in the real world, and it maybe everywhere but that's not important.

    if for no other reason than that the start-up cost is very close to negligible

    Any number of languages and environements are free Eclipse for Java; Visual Studio Express for C#.

    Like many of us here I self taught myself programming with Turbo Pascal after graduating from BASIC. And I consider Turbo Pascal to have been pretty much an ideal teaching language and environment.

    The university I went to taught its first year programming in Modula-2; which in hindsight was a fine teaching language. (The language itself was fine, the debugging tools we had access to were non-existent).

    Looking at the curriculum now, it appears they've updated to Python. I don't personally care for python as a language due to my objection to semantic whitespace, but that aside, I'd say its a decent teaching language and environment.

  41. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    It failed pretty hard when I tested that functionality... left out a semicolon... A-OK! Added the semicolon... "YOU'RE MISSING A SEMICOLON!" Any number of free IDEs/editors will provide the same functionality... and generally in better form, too.

  42. Needs some other name than Computer Science. by xanthos · · 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. 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.

    --
    Average Intelligence is a Scary Thing
    1. Re:Needs some other name than Computer Science. by Anonymous Coward · · Score: 0

      I totally agree. Computer Science is the study of computability and relies heavily on formal languages, automata, and algorithm analysis. These videos are about computer programming...... Why can't we just call them that?
       

    2. Re:Needs some other name than Computer Science. by Anonymous Coward · · Score: 0

      yep. it looks like grade 11 computers which would be fine if the content there didn't create the impression that computer science is just learning how to do programming. most kids can't understand AP computer science however there should be an attempt to show what computer science is really about

    3. Re:Needs some other name than Computer Science. by Darinbob · · Score: 1

      I'm waiting for the Khan Academy course on how to use a hammer.

    4. Re:Needs some other name than Computer Science. by LordLucless · · Score: 1

      Into to Software Development?

      --
      Just because you're paranoid doesn't mean there isn't an invisible demon about to eat your face
    5. Re:Needs some other name than Computer Science. by SpeedBump0619 · · Score: 1

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

  43. Re:Mighty broad definition of "language" there by luis_a_espinal · · Score: 3, 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.)

  44. The S stands for Science by jmasha · · Score: 3, Interesting

    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. 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. Remember that the S in CS stands for science. This is where the University education plays a role. They want to mould students to become scientists, researchers, and professors. A good portion of the science and research material requires strong mathematical backgrounds and im my experience doesn't require the ability to be a super elite programmer. Hell, lots of great ideas are proven and tested with MATLAB scripts. This also applies to the concepts such as runtime analysis and algorithm complexity that are core to developing and proving new approaches and systems. I applaud Khan for it's attempt, but unless there is a heavy math focus later in the curriculum, then they should advertise it as a programming class, not a CS class.

    1. Re:The S stands for Science by rastos1 · · Score: 1

      Remember that the S in CS stands for science.

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

  45. Re:Mighty broad definition of "language" there by ericcc65 · · Score: 2

    Ruby or Python.

  46. hypocrite by Anonymous Coward · · Score: 0

    like it or not, Khan academy is a more useful education resources than most public schools out there (if you care to learn).

    so says someone who attended one of the largest public universities in north america....

    1. Re:hypocrite by Anonymous Coward · · Score: 0

      It's not a choice, it's a lack of options.

    2. Re:hypocrite by Anonymous Coward · · Score: 0

      lack of options

      bull. shit. there are plenty of options in toronto. roman_mir could have even taken his own advice and not gone to university at all. instead he took advantage of public education and went to university of toronto. now the damned hypocrite wants to deny that option to nearly everyone else.

  47. SICP by Orgasmatron · · Score: 4, Interesting

    There is still no finer introduction to computer science than Structure and Interpretation of Computer Programs by Abelson and Sussman. Also, be sure to watch the videos.

    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?

    --
    See that "Preview" button?
    1. Re:SICP by Anonymous Coward · · Score: 0

      Pfft. SICP isn't that impressive. We got along just fine learning CS before it was ever written. Now get off my lawn.

    2. Re:SICP by circletimessquare · · Score: 1

      it's for kids, relax. there has to be an element of fun in it

      --
      intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    3. Re:SICP by rrohbeck · · Score: 1

      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.

    4. Re:SICP by Anonymous Coward · · Score: 0

      Why is pandering to kids acceptable?

      Why do we treat kids like they can't understand anything real, and need to be handed tinker-toy problems in order to feel like they've accomplished anything?

      Learning to master a tool is its own fun. The tool you master doesn't need to be how to draw a picture of a frog.

    5. Re:SICP by circletimessquare · · Score: 0

      And if they are 7 yo? Throw linear algebra at them?

      Talk about out of touch.

      --
      intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    6. Re:SICP by hackus · · Score: 1

      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

      --
      Got Geometrodynamics? Awe, too hard to figure out? Too bad.
  48. Re:Broad definition of "reading comprehension" by Anonymous Coward · · Score: 0

    Which part of "Academy" confuses you?

    Which part of "could acquire" makes you think I expect them to already be skilled?

  49. Re:Mighty broad definition of "language" there by arth1 · · Score: 1

    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 shell is the Unix/Linux toolbox way. Embedding the framework too is not.

  50. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    They're using a javascript port of language processing. See: http://processingjs.org/

  51. Re:Mighty broad definition of "language" there by rk · · Score: 1

    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 thing" stop you from trying it. I find it a fun language to work in. It works well on small projects and scales up fairly well. YMMV, of course.

  52. Re:Free market education by Anonymous Coward · · Score: 1

    careful, you are stepping on some toes, saying that free market works. This doesn't fly here, on /.

  53. go with C by KernelMuncher · · Score: 2

    I'd definitely recommend C as a starting point for anybody serious about learning how to program. You can do high level stuff (pointers, functions). low level (bit manipulation) and everything in between. Also C is the starting point for so many other languages. The knowledge picked up could be extended to Java, C++, C# pretty quickly. If C is considered too cumbersome, Python would be an excellent choice. The clean coding style required definitely builds good habits. But, God Forbid, don't start with Javascript !

    1. Re:go with C by Anonymous Coward · · Score: 0

      Pointers are high-level stuff? I suppose the advantage of starting with C though is you learn how to do buffer overflows early on.

  54. Re:Mighty broad definition of "language" there by serviscope_minor · · Score: 2

    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. Some of them seem unable to grasp how the magic incantations on the screen correspond to anything tangible. Those ones tend to click with assembler much more, since it is much more direct. There's nothing hidden, nothing magic. Each instruction corresponds to flipping some gates in a predictable manner.

    here's no awkward things like variables. Nothing like reference semantics which are really quite hard to grasp without understanding pointers. Instructions just move a fixed number of bits from one slot to another. In the case of something like a small PIC, the manual is thick, and but very complete and a person can have a grasp of the entire system (peripherals aside) in one go. And the apparently strange design decisions always have a good, solid reason behind them (always cost).

    Once they have a grasp of ASM, you can explain the basic concepts of C by pointing out how you would translate a for-loop into a bunch of compares and jumps. For certain ways of thinking it then becomes much more obvious.

    In other words, don't knock assembler as a first language. It's not for everyone, but then neither are high level languages.

    --
    SJW n. One who posts facts.
  55. Re:Free market education by Anonymous Coward · · Score: 0

    Help! I'm being oppressed!

    -roman_mir

  56. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Was Guido van Rossum too busy?

  57. Re:Mighty broad definition of "language" there by Darinbob · · Score: 4, 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.

  58. Re:Mighty broad definition of "language" there by Darinbob · · Score: 1

    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?

  59. Re:Mighty broad definition of "language" there by vux984 · · Score: 2

    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.

  60. Re:Mighty broad definition of "language" there by Darinbob · · Score: 1

    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 practical use showed that it was impractical. The only apparent benefit was enforced indentation, for those very few people who had yet to learn to indent code.

    Python overall is ok, but today seems dominated by style purists, plus I tend to avoid absolutely everything in life that is surrounded by rabid fans who proselytize.

  61. Re:Mighty broad definition of "language" there by Darinbob · · Score: 2

    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.

  62. What is this "real world" you speak of? by luis_a_espinal · · Score: 1

    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 &lt/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 numerical analysis (Lagrance interpolation polynomials to approximate performance behavior as a function of incoming traffic), probability/statistics and what not. The careful selection of algorithms is something that you can do blindfolded if you have a good grasp of limits, convergence and divergence, and pretty much the bulk of discrete mathematics and combinatorics.

    Barring the commonly trivial, like slapping a web page on front a db table, Unless the most complex thing you ever do is slapping web pages on front of a database table, you cannot simply do that in the real world without a grasp on CS mathematics. Heck, one doesn't even need a BS degree for that. I know that because I started my coding career with a AA (and worked my way towards a BS in CS and the grad school.)

    Once the level of complexity or size (or system longevity) increases, a firm notion, however implicit, of CS-math is essential. And it is typically lacking "in the streets". And that is why we see so much underperforming crap in the so-called real world despite the facts that we have known for more than two decades how to do coding of a sufficient quality.

    Oh nooo, we do not need mathematics to work in the real world. And then these code monkeys cannot understand why cartesian SQL queries are a no-no; or why using a retardedly synchronized java.util.HashTable is a goddamned stupid idea when a java.util.HashMap; or why their clustered applications flood the network with UDP packets (a combinatorial problem).

    The nicest (or actually stupidest) comment I've seen is when people tell me that if they do unit testing on everything, then their code is bug-free, or better yet, that their code is bug free because testing didn't find any bugs. Or, wait, it gets even better when these same folks ensure others that they have a process that allows their code to be bug free. Which is fucking impossible, mathematically impossible.

    And so on they go, coding crap, like code monkeys flinging shit at their monitors, and packaging/selling whatever sticks. Fixing that crap makes for a good living in terms of OT (because someone has to be hired to do the cleanup, and it's a good pay). But by God, it does makes working with software a living nightmare sometimes.

    Remember that the S in CS stands for science. This is where the University education plays a role. They want to mould students to become scientists, researchers, and professors.

    No, they want to mold people, be it Computer Scientists or Software Engineers (and/or both) who can code themselves out of invariant-executing for-loops.

    A good portion of the science and research material requires strong mathematical backgrounds and im my experience doesn't require the ability to be a super elite programmer.

    Barring the naturally gifted (most of us aren't), there is no such thing as a super-elite programmer who does not have an explicit or implicit mathematical background. There are people who can write a lot of code and get shit done, but only for the immedia

  63. Re:Mighty broad definition of "language" there by hguorbray · · Score: 3, Insightful

    In a field that is essentially less than 75 years old it seems specious to call a language that has been around and in heavy use for nearly 20 years a fad.

    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'

  64. get off your high horse by circletimessquare · · Score: 0

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

    --
    intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    1. Re:get off your high horse by Darinbob · · Score: 1

      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.

    2. Re:get off your high horse by LordLucless · · Score: 0

      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?

      --
      Just because you're paranoid doesn't mean there isn't an invisible demon about to eat your face
    3. Re:get off your high horse by Anonymous Coward · · 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.

  65. Re:Mighty broad definition of "language" there by WankersRevenge · · Score: 4, 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 :)

  66. Not working by rrohbeck · · Score: 1

    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.

  67. Can we stop the Slashvertisements? by Gothmolly · · Score: 2

    This is the 2nd mention of the Khan "Academy" in the last week or so.

    --
    I want to delete my account but Slashdot doesn't allow it.
    1. Re:Can we stop the Slashvertisements? by Zubinix · · 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.

  68. Re:Broad definition of "reading comprehension" by Jarmihi · · Score: 1

    To be fair, the way you worded it disinclines me to agree with you. Perhaps "they could use a different language so as to teach those skills" would enable people to "comprehend" your post better.

    --
    ~Jarmihi
  69. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    objects are just glorified key-value stores

    That's because objects ARE just glorified key-value stores. Your favorite OO language is just a tool you use to shield you from that basic fact. If you want to be a good programmer, you have to be thinking below your current level of abstraction.

  70. Desktop / admin IT work needs a other name then CS by Joe_Dragon · · Score: 1

    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.

  71. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    C? Seriously?

    I love me my C but let's see. I want to take user input in a form in C? Oh, no standard way to do that. Pick one of 600 libraries and then futs with it for several hours. Yea, a beginner is going to figure that out.

    Want to load an image? Find a library that compiles on your particular platform/compiler/memory model.

    Want to draw something? It's different on every system

    Networking in C? Ugh. Serialization in C? double ugh.

    JavaScript is the perfect language to start with. It runs everywhere. It has a large effectively standard library so lots of things are easy. You can share the results with your friends just by sending them a URL even if they are on a different OS. Its dynamic typing means no having to start with verbose declarations (similar to python, perl, ruby, etc..)

    Note: I write C and C++ all day long. As a programmer I love C. But I also love JavaScript. It's actually fun, instant gratification. Programming in JavaScript brings back the joy I felt in my 8bit days when you turn on the computer and code happened immediately. No compiler, no linker, just type some code and it runs. It's awesome!

  72. No One got to this?? by Anonymous Coward · · Score: 0

    KHAAAAAAAAAAAAAAAAAAAAAAAAN!

  73. Re:Mighty broad definition of "language" there by dgatwood · · Score: 2

    That's because objects ARE just glorified key-value stores.

    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 caught instantly in any programming language that requires you to actually define your classes.

    If you want to be a good programmer, you have to be thinking below your current level of abstraction.

    It is one thing to understand what's happening at lower layers of abstraction. It is quite another to provide no abstraction whatsoever, requiring the programmer to do significant portions of the work that the compiler should be doing for you. There's no good reason to take on that unnecessary cognitive load if you can prevent it by simply choosing a language that's a little bit more rigorous. Granted, a language can be too rigorous, but JavaScript is so far on the other side of that line that you can't even see the line from there....

    --

    Check out my sci-fi/humor trilogy at PatriotsBooks.

  74. Re:Mighty broad definition of "language" there by leromarinvit · · Score: 1

    Real Programmers must spend their first year writing Pascal code [...]

    Okay, I'll bite.

    --
    Proud member of the Ferengi Socialist Party.
  75. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    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.

    If you have followed Khan Academy at all, you would know that he usually starts doing videos about the trivially easy parts, and then goes up from there. Seeing as they only just added computer science, I wager that those topics will be coming in the future.

  76. Re:Mighty broad definition of "language" there by spongman · · Score: 2

    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 equivalent, not so in javascript, sometimes.

  77. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    I couldn't agree more. This is so disappointing!

  78. Re:Mighty broad definition of "language" there by trev.norris · · Score: 0

    Thank you for posting this. I've been programming JavaScript since 2007, and it's the only language I've ever really took the time to understand. So I can't comment from your vantage point. But what I can say is that once I had a full appreciation for JavaScript inheritance, first-class function, and the other things that make JavaScript great, it has been extremely easy to work with. Of course there are parts that will kill you if abused, but doesn't every language?

  79. Re:Mighty broad definition of "language" there by hwk_br · · 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"?

    --
    \m/
  80. Why is understanding closures bad?? by SuperKendall · · Score: 1

    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.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  81. Re:Mighty broad definition of "language" there by Zontar+The+Mindless · · Score: 1

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

    --
    Il n'y a pas de Planet B.
  82. No you do not get used to it by SuperKendall · · Score: 0

    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 on any language - but languages that assign semantic meaning to whitespace, I will never use again. This I vow.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:No you do not get used to it by rk · · Score: 1

      Hence the YMMV at the end. No worries. :-)

  83. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    I wouldn't consider it the worst, he could have chosen whitespace... (or it's predecessor but I'm not sure if that name would get past the filters or be appropriate for some who read /.)

  84. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Wow, are you kidding? Smalltalk the ugliest thing in the world? If I remembered my account details, I'd login just to down vote this. Please cite reasons why Smalltalk is ugly?

    You also immediately discredit yourself by then listening Ruby, which takes a lot of inspiration from Smalltalk, not just Perl. Smalltalk has influenced many languages, directly or indirectly. It is perhaps one of the prettiest, most beautiful languages ever written and is a lot less like Objective C as you imply despite the lineage. Objective C can be nice, but it comes off as a Smalltalk from people who never really understood the true benefits, and from people at the time who needed C like speed.

    Firstly, Smalltalk code reads like sentences. Secondly, it stresses clarity over programmer ridiculousness that we're so used to. For instance, please tell me how "Rectangle width: 100 height: 200" is less desirable than something C++-like such as new "Rectangle(100, 200)." Thirdly, please tell me how a language that has probably the least amount of built-in keywords of any major, non-joke language (like LOLCats or something) is complicated for a beginner and ugly?

    As Smalltalk's name implies, it is small and simple. Through this simplicity, an ironic elegance is achieved. It makes most languages today look stupid for introducing so many keywords, conventions, and ridiculous hacks (C++, Java, C# especially) to deal with nonsense. It may not mean much, but most of the time you can rewrite just about any code shorter in Smalltalk, and even shorter if you don't count the length added by named parameters. The collections APIs for example are beautiful and widely and poorly emulated in languages such as Python, Ruby, and C#. The beauty of the language is that just about all of it is implemented in itself, and it is consistent in most implementations just about all the way down.

    If you want to know how something works in Smalltalk, you have the source right in front of you. You can literally step through the low-level stuff in the debugger if you want and even override and change it. While yes, this can lead to stupid things, it's interesting not been much of a problem having people being able to override a built-in string class on the fly. You also have first-class blocks in the language which you can pass around as true objects. Really everything is an object, and it is still the pinnacle of OO design. Sometimes in other languages, I actually pop open Smalltalk if I need a decent idea how to implement something and look at its lower-level source. You can find great examples of design patterns implemented for a reason, not just for kicks. You can also find ways of doing things simply and elegantly rather than creating a big jumbled, leaky mess.

    Want TDD? You can actually program directly in the debugger and make changes on the fly. You can run unit tests that will pass/fail as you type. Productivity in Smalltalk is insanely high. Want to scale it out in the cloud? Simply deploy multiple virtual machines. Want object oriented source control rather than just buggy, pure-text analysis? It can be/has been done. Want a full IDE for free with auto-complete, unit testing built-in, website debugging within the web page, version control? It's there.

    What's bad about Smalltalk? Some of the same things that are good for sure. The Virtual Machine for instance is great and to this day IMO is the ideal way to go for development for so many reasons. Files make almost no sense for programming anymore and really create a huge loss of productivity, not to mention make code sharing hard. But at the same time, this distance from the file system and underlying OS can be a headache if you don't have the right libs or need to do something low-level. Fortunately there are ways to call C and plenty of libs to solve these issues, but it can't be denied and is one of the many reasons for its decline.

    What else is bad? Well, more on point for the article and previous comment, it teaches you a lot, but it also assumes you can become an OO pr

  85. Computer Science Curriculum by l3v1 · · Score: 1

    "Computer Science Curriculum"

    Teaching basic coding skills is not computer science. Even teaching more advanced coding skills is not computer science. It's teaching coding.

    --
    I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
  86. Re:Mighty broad definition of "language" there by rk · · Score: 1

    I have to agree that this is a legitimate complaint. For example, posting python code here on slashdot is a virtual impossibility it seems.

  87. Re:Mighty broad definition of "language" there by rk · · Score: 1

    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! :-)

  88. Re:Mighty broad definition of "language" there by beelsebob · · Score: 2

    Not disagreeing with your analysis of what JS does... But seriously, if you hard word wrap, you're a moron.

  89. Re:Mighty broad definition of "language" there by beelsebob · · Score: 1

    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.

  90. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Logo is the only "turning" complete language I know of. Basic is Turing complete, though.

  91. Re:Mighty broad definition of "language" there by Half-pint+HAL · · Score: 1

    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 editors now have bracket matching -- they understand code structure easier and quicker than we do as operators. Why should I indent? Why not have the editor do that automatically, thus highlighting logical flaws in my code?

    I mean, when we copy and paste code, the indentation at the paste point could be quite different from the copy point. I imagine the best IDEs will by now do indentation correction on Python. As they should do. So why not let them handle and render all indentation?

    --
    Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
  92. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Can you provide an example where that would occur?

  93. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    well, that was a bit harsh. But I agree that in 2012 you shouldn't hard word wrap ever. We have devices ranging from a 5 inch cellphone to a 50 inch screen and they all fit a different amount of characters on a line. So don't assume it's always 72 characters per line as if it were 1972.

  94. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    Well, to each his own. If you like bondage and discipline langages, more power to you - and it's true that statically typed languages catch stupid errors earlier, it's true that Java nags a lot more about these before running the program, it's just that then it by necessity then also nags about perfectly fine parts too. It's a fundamental result of computer science (Kahn doesn't talk about this part, though) that it always has to be like that - the halting problem.

    So to me the choice is between those:

    1) use a dynamic language and be able to express everything you want without having to hand hold the compiler that a product of two matrices indeed can be a scalar and that that's not a problem (if it ever lets itself be convinced) etc.

    2) use a static language and not be able to write half the programs you want to write because it doesn't get past the damn butler. Not to mention having to write so much boilerplate nobody cares about and a maze of special case this special case that. Not to mention that there are programs you can't (even in theory) write in a HM type system.

    Languages like Haskell make static typing more bearable but it still has so many moments where you can tell it just doesn't understand basic logic.

    So basically it depends on what you want to do. If you want to learn programming using 2), you better be a masochist.

    As for your perl example, I bet you only noticed the one time a typo was there and not the hundreds of places where it saved you Rube Goldbergesque workarounds (never thought I'd defend the godawful perl for something, ever ... heh).

  95. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    that happens sometimes, yes. However the solution is to fix the tools and not dumb the language down (hopefully I'll still be alive when we program in a 2 dimensional language - think visicalc - and not one limited by 1970 teletype simulation)

  96. Re:Mighty broad definition of "language" there by SoothingMist · · Score: 1

    My opinion is that there is way too much hype surrounding this unvetted and unavailable material.

  97. Re:Mighty broad definition of "language" there by afidel · · Score: 1

    damn autocorrect...

    --
    There are 4 boxes to use in the defense of liberty: soap, ballot, jury, ammo. Use in that order. Starting now.
  98. Re:Mighty broad definition of "language" there by Anonymous Coward · · Score: 0

    No, it starts with simple stuff. It certainly doesn't teach it by jumping straight to hard stuff...

  99. Re:Mighty broad definition of "language" there by spongman · · Score: 1

    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();

  100. Re:Mighty broad definition of "language" there by VortexCortex · · Score: 1

    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 to be used the way we NEED it to be used today. We'd be better off with ANY other scripting language. Hell, I'd rather use Lua in a browser than JavaScript. The only reason we use it is because nothing else has as broad support, not really on any merit of the language itself.

    JavaScript is the Microsoft of "Web" Languages.

  101. Re:Mighty broad definition of "language" there by VortexCortex · · Score: 1

    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.

  102. Re:Mighty broad definition of "language" there by VortexCortex · · Score: 1

    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++, Java, etc. now that I know what the hell is actually going on.

    I tried teaching my little brother JS, it didn't work out... So we tried C, he couldn't get "pointers" and their associated arithmetic. We tried Assembly and he took off! In my experience, the magic of higher level languages is only empowering if you grasp the sufficiently advanced technology on which the magic is based.

    Additionally, since I can run an assembly program on a sheet of graph paper it's been astounding to see software patents being granted...

  103. Re:Mighty broad definition of "language" there by rk · · Score: 1

    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 rod and cone cells in your retina, that in turn activate feature detection neurons in your retina and visual cortex, which then get passed off to higher order brain centers that take this information and turn it back into the information that was stored.

    And to bring it back down to less philosophical matters, yes, modern editors are all python aware and do a fine job of indenting for you if you are willing to accept the convention that the python no-op 'pass' will terminate a nested level. You bring up an interesting point about editors handling indentation, however. I think the reason why we don't is I think we as programmers like the idea of keeping our code in a form that can be read and understood by even the simplest tools. We could conceivably create a file format that has the indentation stored as an integer, followed by the line of code, and then just have our editors render it visually for us in the manner we prefer, then save it back out in the integer|line format. But I think a lot of programmers would chafe at that idea, and I don't think I could disagree with them. We already have holy wars over vi vs. emacs, Eclipse vs. NetBeans, Windows vs Mac vs Linux and whether a tab stop should be 2, 4, 8 or some other number of columns. :-)

  104. Surfed the site with Javascript turned off by Anonymous Coward · · Score: 0

    didn't learn anything

  105. Re:Broad definition of "reading comprehension" by Anonymous Coward · · Score: 0

    To be fair, the way you worded it disinclines me to agree with you. Perhaps "they could use a different language so as to teach those skills" would enable people to "comprehend" your post better.

    Yeah that's because you're either American or have been influenced by exported American culture.

    America is all about being selfish and shallow and then calling it individuality. As if those were the same. So anyway Americans say "I know that guy is wrong, because he's not me, and I never heard of benefit of doubt when there are multiple ways to interpret something, so I just have to find out how he is wrong .. ah-hah, I'll clutch at a straw and run with it!"

    You see it all the time on Slashdot. No one, and I mean no one, ever has thoughts like "say, that makes no sense at all ... ... ... maybe that means I have misinterpreted what the guy is saying." Oh no. That requires a (tiny) level of humility that is beyond their reach. If your first reading of something makes no sense, then your first reading is always the correct one intended by the post author, the other guy is a drooling idiot, you're much smarter than he could ever hope to be, you're as special as Daddy always said, and above all you're right and he's wrong.

  106. Re:Broad definition of "reading comprehension" by Anonymous Coward · · Score: 0

    To be fair, the way you worded it disinclines me to agree with you. Perhaps "they could use a different language so as to teach those skills" would enable people to "comprehend" your post better.

    Besides a different language would make it harder. You want to give them a language where those mistakes are easy to make. That's how they acquire the discipline of not making them.

    My point was that programming is a lot of disciplined, minute, must-be-exactly-right, details-matter-very-much type of work. A student should discover and understand that early on. It's not for everyone and that's okay. Let them discover that as early as possible.

    What I am saying is that to anyone who is ever going to be even a decent programmer (let alone great) then basic syntax is definitely a solvable problem. We should not see it as something to "protect" students from. In the real world, if their boss wants them to use such a language they are simply going to be expected to do it, not to have philosophical discussions about comparitive programming languages.

  107. I made a rocket ship for the man! by bartoku · · Score: 1

    I made a rocket ship for the man! ellipse(200, 330, 30, 100); ellipse(185, 370, 30, 30); ellipse(215, 370, 30, 30);

  108. Javascript? by Anonymous Coward · · Score: 0

    Javascript is a horrible language to teach programming. Its only benefit is that the student doesn't have to install anything, but come on. It's one big hack of a language. If it weren't in the browser, no one would touch it.

    > "" == false
    true