top | item 2901156

Show HN: Codecademy.com, the easiest way to learn to code

787 points| zds | 14 years ago |codecademy.com | reply

I've been a longtime member @ HN, but I haven't been a developer. In fact, my only HN submission has been one asking how to learn to code (http://news.ycombinator.com/item?id=820741). My cofounder and I decided to solve the problem by making a simple, interactive way to get started with Codecademy. We'd love your feedback. If you're interested in helping us to get more courses up (on any topic!), please send us an email at [email protected].

232 comments

order
[+] zds|14 years ago|reply
I've been a longtime member @ HN, but I haven't been a developer. In fact, my only HN submission has been one asking how to learn to code (http://news.ycombinator.com/item?id=820741). We decided to solve the problem by making a simple, interactive way to get started with Codecademy. We'd love your feedback. If you're interested in helping us to get more courses up (on any topic!), please send us an email at HN (at) codecademy.com.
[+] fredBuddemeyer|14 years ago|reply
this must be why you have such a unique empathy for the user. you've truly put yourself in the user's shoes instead of lecturing.

its obvious something is great when you instantly think why the hell hasn't everything been like this all along.

[+] beefman|14 years ago|reply
Awesome, thanks! I've always thought the use of books to teach programming was a bit ironic, especially for interpreted languages.

Back in the early '90s I had a book called Master C, which came with a floppy that ran a similar type of tutorial.

http://www.amazon.com/Waite-Groups-Master-Book-Disks/dp/1878...

Seems like a long gap between then and now.

Also, please let me request a course on Clojure. That would rule!

[+] stephenou|14 years ago|reply
I think this is going to be an interesting experiment:

I am going to test how many students at our high school can get interested in programming after trying out Codecedemy.

[+] HiroshiSan|14 years ago|reply
Any advice on starting something if you're not a developer, or how you gathered the resources to do it with your limited knowledge? I'm not a developer but I just started doing LPTHW, I'd love to create something of my own but I was never good at making something from 'nothing'.
[+] czzarr|14 years ago|reply
could you write about how you went from a non-programmer to be able to launch that web site? would be super-interesting.
[+] tolmasky|14 years ago|reply
Interesting feedback: I had my gf do it, and she got stuck in the .length portion, because she kept typing:

    "name".length.
This is because the prompt said:

    Well done! How long is your name? Find out by typing your name in quotes and ending it with .length.
    
    For me, that'd be "Ryan".length.
Apparently its not clear enough what is code and what isn't. While you and I can tell that the last period belongs to the sentence and not the code, it was a bit confusing for her. Perhaps putting the code in a different font (as well as the current highlighting) would do the trick?
[+] nicki_easy|14 years ago|reply
I am no one's girlfriend, and I am stuck on lesson five :P

I think that if this is aimed at beginners it needs to be dumbed down more--I am a reasonably intelligent absolute beginner curious about coding and whether I'm interested in learning some, and in this lesson you have completely lost me; I no longer understand what I am doing or why, and I don't know how to proceed:

Everything we've talked about so far has one value. But what happens when you need to store an ordered list of values? You use a data structure known as an array.

The editor now has an array named numbers with the numbers 1, 4, and 6 (look at how we set the values). To access a particular value, you can use the name of the array and its position, or index (they start with 0). To get the number 4 from the array numbers, you would write numbers[1].

Try writing a line that will set the value of a variable called six to third number in the array.

I feel like there is not enough building on the previous lesson and not enough practice/repetition for me to get a toehold on what I'm doing/learning before moving on to the next thing. Here you have already moved me up to a level of abstraction where I cannot continue the exercise without seeking outside help (from Google, a book, a friend...).

And my hint is: To do this exercise, you have to declare a new variable (using var six =) and set it equal to the value of the array (done with numbers[2]). Remember: array indexes start at 0, not 1.

I'm totally lost. This hint is not helpful to me and there are no more hints. I'm stuck and can't continue within the lesson itself without more hints, exercises or explanation.

Also, I think this is brilliant <3. Keep going.

[+] zds|14 years ago|reply
Changing this right now. Thanks so much!
[+] reemrevnivek|14 years ago|reply
Beautiful! But if I keep trying to explore after the "You've completed this lesson! Start the next one." message, I get

    ERROR: Cannot read property '_id' of undefined
In my opinion, exploration in this context is extremely important. The guided tours are nice, but I'm confident that you don't want to limit people's use of the site

Also, "You're doing great! To continue, you'll need to register or sign in. Otherwise all that awesome progress you've made will be lost. Sign In\Register (it's free)" was a complete surprise, and felt like a roadblock (in spite of the "it's free" message.

If a user types through enough of the pages to get this message, they probably are enjoying the site and want to keep working with it. Why not include a "Not now" option in this dialog?

That way they can choose to join when they step back when they are done and say "Wow, that's a nice site! I want to come back later and keep working on this. I guess I ought to register!", rather than a "Meh, I've only invested 2 minutes, guess not".

[+] jhen095|14 years ago|reply
Agreed with all of the above points. Beautiful and easy to use.

The "You're doing great! To continue, you'll need to register or sign in. Otherwise all that awesome progress you've made will be lost. Sign In\Register (it's free)" dialog is most definitely a road block as there were no links available to go back to the home page.

Only two options were sign in or register. So yeah, there should be a cancel, or return to homepage

[+] zds|14 years ago|reply
thanks! we're planning on opening things up - just made the change and will push it live in a few minutes.

we'll update the dialog as well.

really appreciate the feedback! feel free to email more to me - zach (at) codecademy (dot) com.

[+] revorad|14 years ago|reply
Very nice. Really well made. Love the fact that I could just dive in and engage with the product from the homepage without having to dance through the usual annoying sign up routine.

One thing I'd change is this error message which is not really an error message : "ERROR: Sorry, that's not correct. Please try again."

It appears every time I try some command which is not exactly the next step defined in the tutorial. It kind of feels like an old school tutor forcing me to follow a rigid book exercise and discouraging experimenting.

If you want me to complete the tutorial, don't move the progress indicator until I complete the next step, but please don't scold me with fake errors :-)

One thing I've been craving for is a place where I can jump in and get a quick primer on some random topic from another programmer. Think SO in real-time. I know there's IRC, but it's not very user friendly and I don't want to hop around different channels to ask different language questions.

If you build a truly social and interactive site for learning programming, I'd use it a lot.

Good luck!

[+] zds|14 years ago|reply
thanks!

we're opening it up to free programming asap and we're going to stop the fake errors thing.

this is exactly what we're planning on doing - let me know if you'd be interested in creating a lesson or if you have other feedback - zach (at) codecademy (dot) com.

[+] OmarIsmail|14 years ago|reply
I actually had a similar idea to this and you guys have executed wonderfully on it!

Starting with Javascript is definitely the way to go, as I strongly believe it's the language of the future (and right now actually). One request for courses would be intermediate/advanced javascript for people that already know how to program.

Also I think you should reach out to library developers (backbone, underscore, jquery, etc) so that instead of having a static readme/how-to they can create a course on how to use their library. I know that would get me up to speed on them a heck of a lot faster and would be super useful.

[+] reemrevnivek|14 years ago|reply
Agreed. Looks like you can submit courses from http://www.codecademy.com/programming-intro: There's a mailto link that points to contact at codecademy.com with the body "Hello, I'd like a create a lesson on ...". (Note that the OP asks here: http://news.ycombinator.com/item?id=2901163 that responses from this submission be directed to 'HN at codecademy.com')

@zds: Any plans to make this an online course submission, or do you want to filter everything through emails?

[+] rkalla|14 years ago|reply
This new fad of providing interactive/iterative consoles for learning technologies (e.g. redis[1], mongodb[2]) is brilliant.

I really well done flow (like this one) reminds me just how fun it is to learn something when it is presented well. I am ashamed to say that if I had to teach someone, say Java, I wouldn't know how to present it in a fun, non-crushing manner.

I am glad there are people out there working on resources like this.

[1] http://try.redis-db.com/

[2] http://www.mongly.com/tutorial/index

[+] zds|14 years ago|reply
thanks! we're hoping to help you learn a lot more than javascript soon.
[+] psychotik|14 years ago|reply
This is a wonderful start - kudos. If you're targeting beginners/novices, which it looks like you are, your current approach looks ideal. I wonder how this scales to more advanced topics/languages. I think there is a market (a much smaller market though) for advanced learning, and if done right a lot of beginners can be encourages to deepen/broaden their skills. Crowdsourced lessons, simplified to fit in with a successful learning framework like Khan Academy or Codeacademy.com is probably what will make this possible.

Any thoughts/plans to go that route?

[+] zds|14 years ago|reply
you'll see soon enough ;) thanks for the feedback!
[+] Hostile|14 years ago|reply
This reminds me of (what was previously _why's) "try ruby!" at http://tryruby.org/

I always loved that, and I think this has a lot of potential. Tomorrow being Whyday, I think I'll send this to some people to try and spread the joy of programming.

I do think that the parentheses and semicolon stuff might appear sort of abruptly for the completely non-technical, but it's hard for me to judge, really.

[+] zds|14 years ago|reply
thanks! we love tryruby too. thanks for celebrating whyday!
[+] Gring|14 years ago|reply
Too much social networking clutter on that homepage. All I see is "Email Facebook like 3K Send Tweet +1 715", then on the right another Facebook logo and another Twitter logo.

Imagine a customer that is really happy with what you provide. Do you really believe that this person is unable to recommend it to others without your help?

What these logos tell me is this: You believe your site isn't good enough that people will take the 2 minutes to talk about it, but you hope that if you make it easy enough to just click a button, masses of these low-involment-recommendations would somehow make up for it. Which they never do.

Great concept otherwise, congrats.

[+] jsharpe|14 years ago|reply
Lesson 6, exercise "Otherwise..." is wrong. Here's the code:

  var number = prompt("Guess what number I'm thinking of between 1 and 10!");
  if(number === 7) {
    print("You got it!");
  // Change the following line.
  } else if () {
    print("Close! Try guessing a little higher.");
  } else {
    print("You were way off! Sorry...");
  }
prompt returns a string, but then attempts to compare it with === with an int, which clearly doesn't work.

This is a really awesome site though, and I'm really excited to see it grow with more and more lessons.

[+] jsharpe|14 years ago|reply
It also seems a bit too eager to accept solutions as correct. For example, you can pass Lesson 6, exercise "Dot your I's and cross your T's" without fixing the = vs == confusion. I put this in to test, and it passed:

  var response = prompt("Do you like me?");
  if (response = "yes") {
    print("i like you too!");
  }
It passes because assignments return the value of the variable assigned, but it should fail the exercise, since it's conceptually wrong.
[+] tnorthcutt|14 years ago|reply
Lesson 6, exercise "Inequality" is wrong for the same reason. It tries to compare the string entered with the integer 5, which again does not work. If you "complete" the exercise as instructed, run the code and enter 5, nothing happens.
[+] ph0rque|14 years ago|reply
Great work so far! I would suggest that when you have enough lessons, you create a knowledge tree instead of just a list, similar to what Khan Academy does (http://bjk5.com/post/1664635835/constellation-knowledge).
[+] SudarshanP|14 years ago|reply
Hope it is possible to reuse the knowledge tree from khanacademy in your application directly... Maybe even the credits system... maybe even user accounts... just imagine a world where every feature does not have to be reinvented... All the best! Awesome product!
[+] zds|14 years ago|reply
That is indeed the plan - look for it to hit the site in the next few weeks!
[+] scelerat|14 years ago|reply
The hardest part of learning to program for me (thinking back many many years to THINK C) was learning the environment and what all the terms and messages meant.

I think basic programming is actually conceptually easy. I remember being frustrated by not understanding the lingo and I think that's where a lot of people starting off get hung up, too. What's the difference between a syntax error and a runtime error? Or an exception? What happens when the compiler spits out some gobbletygook, and now I'm digging through a manual written for people who already know how to program.

In this sense the Codeacademy poses similar hurdles. It will report an Error, without giving more context. Why is it an error? Did I quote something I shouldn't have? What does unexpected token mean? OH, I left off a quote.

i.e. instead of "Error: Unexpected token ILLEGAL", a better message (perhaps linked from the strict message) would be "The program interpreter couldn't understand what you meant because it was expecting to see some syntax or punctuation that didn't exist. Common reasons are unpaired quotes, braces or parentheses"

Because the environment is already somewhat controlled, the helpful messages can have a narrower, clearer scope. Overall Codeacademy is great; I'm recommending it to a lot of people.

[+] olivercameron|14 years ago|reply
You guys are onto something here, my Wife is trying to learn to code and finds books really tough to get instant feedback from. Also, that little intro on the front page getting people to code without them knowing is genius!
[+] primigenus|14 years ago|reply
This is really similar to the "getting started" feature in our product, Handcraft.com. It's a HTML prototyping tool so you have to write code, but we're aiming it at interaction designers so we've taken care to address the fact that some designers aren't too familiar with writing HTML to do prototyping.

We ended up initially putting you into an introductory prototype when you first start an account where we bring you up to speed on what our tool can do in terms of writing HTML before we go further and show you more about how our tool is special.

Strangely, after launching in the Chrome Web Store, we started getting a lot of feedback from people who had stumbled into it and were discovering HTML for the first time through our getting started guide. They don't have a clue what "HTML prototyping" or "interaction design" is, but they love learning about "how to make websites" with Handcraft.

Just thought I'd share. Great work with Codecademy! I'll be keeping my eye on it and might start forwarding people over if they get stuck with what we have on offer.

[+] peterb|14 years ago|reply
Well done. One suggestion is to use the Socratic Method (http://en.wikipedia.org/wiki/Socratic_method) like "The Little Schemer". I would love to see "The Little Schemer" implemented on your site.
[+] peterb|14 years ago|reply
I just completed the course and it is very well done. If you want to teach to young children (especially boys), then a Khan Academy approach could be used where you narrate the course. Most of Khan Academy's success comes from Sal himself, his personality. It is hard to find natural teachers who show heartfealt enthusiasm for their subjects. Ryan Bates of Railscasts also achieves this. Just my C$0.02. Again, thank you for your work. This is a wonderful direction for education.
[+] physcab|14 years ago|reply
This is definitely genius. Even for programmers the service could be very valuable in learning new languages. I love my O'Reilly books, but I would throw all of them away in a heartbeat if the content was wrapped up in an interactive console like this.
[+] SudarshanP|14 years ago|reply
Coffeescript and other languages that compile to Javascript could be an interesting starting point and would need the least work for u guys...
[+] zds|14 years ago|reply
thanks! let us know if there's any course you're interested in seeing.
[+] planckscnst|14 years ago|reply
It isn't completely clear what Variables -> CaSeS wants me to do. It seems like it's asking for:

    myFullName = "Thomas Edison"
But it's reminding me of making sure my variable names are correct, so maybe:

    myFullName = myName lastName
That doesn't work.

Because I'm a programmer, I know that the + operator concatenates strings, but I don't think everyone will think consider that, and it hasn't been mentioned at that point.

[+] zachshallbetter|14 years ago|reply
It was looking for var myFullName = "First Last";
[+] cadr|14 years ago|reply
I find it kind of odd that it doesn't actually say what language I am learning. (I mean, yes, I can tell, but if I were learning I wouldn't.)

Was that on purpose?

[+] jeffreymcmanus|14 years ago|reply
You have to get through the first lesson before it tells you that you're learning JavaScript. This isn't terrible considering the audience this seems to be targeting -- the name of the language is an implementation detail to a beginner.
[+] cwilson|14 years ago|reply
The lesson told me I was learning Javascript?
[+] zds|14 years ago|reply
we'll be adding other languages, so that's why the homepage doesn't explicitly state which language you're writing. we'll update it now. thanks!