

Show HN: Codecademy.com, the easiest way to learn to code - zds
http://www.codecademy.com
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 HN@codecademy.com.
======
zds
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.

~~~
beefman
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...](http://www.amazon.com/Waite-Groups-Master-Book-
Disks/dp/187873900X)

Seems like a long gap between then and now.

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

~~~
MrKurtHaeusler
<http://www.try-clojure.org/>

~~~
dstein
(+ 3 3) is really how arithmetic is performed in Clojure? Okay, I'm done with
learning Clojure.

~~~
Natsu
It may look like a weird way to type things, but it has hidden advantages when
you try to do more complex things, like treating data as a program... or
programs as data.

It's a small price to pay, really, for the power to make some really complex
things a lot easier, even if it's a bit weird at first.

After a while, it won't even seem weird any more.

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

~~~
WiseWeasel
The way I would describe an array to a novice is that it's a more complex and
potentially useful type of variable, similar to the ones you've been making so
far, only instead of having a single "slot" for data, they are organized in a
way that allows for multiple slots for information, and you can reference each
slot by their position in the array, starting with position 0 (0, 1, 2, etc.
describing the first, second and third. etc. positions in the array).

An array is a variable declared with square brackets around all the data, with
a comma in between (delimiting) each positioned slot of data.

Example:

    
    
        var array = ["data1", "data2", "data3"]
    

In this case, we've created an array containing text strings. It could just as
easily contain integers, or as you will see demonstrated a little later in the
course, other variables, including other arrays.

Then, in order to retrieve or modify a piece of information from the array,
you reference the array variable with the array position you want in square
brackets.

Example: To get the "data1" string from the above array, use the variable like
this:

    
    
        array[0]
    

To get an alert dialog with the "data2" string, the code would look like:

    
    
        alert(array[1])
    

You can easily modify a piece of data in the array using this technique. For
example, to change the string "data3" in the array to "third", the code would
be:

    
    
        array[2] = "third"
    

If you would like to add a new piece of data to the array, you could do the
following:

    
    
        array[3] = "fourth"
    

Note that this would require that you know the size of the array and that the
position [3] is an available slot. A simpler method of adding data to an array
is to use the .push function as such:

    
    
        array.push("fourth")

~~~
buff-a
I need some milk! Let me add that to my shopping array.

Back in the real world, I see non techies deal with lists every day. Ordered
lists. Given a list, with numbers in the margin, they can easily answer "Who
came first?" or "What's next on the list?", or "What's item 5 on the agenda".

But noooo. We have to call them arrays. Lists are something else. o_O

 _The way I would describe an array to a novice is that it's a more complex
and potentially useful type of variable_

Fuck me no!!!! Shut up Moss!

~~~
WiseWeasel
That's because arrays do get more complicated than flat lists like the example
I gave above. You can actually have multiple organized data points in each
position of the array as well, making arrays function more as a 2D relational
database than as a flat list of data.

For example, I could make an address book array with multiple data points as
such:

    
    
        var addressbook = [{"firstname": "John", "lastname": "Doe", "phone": "555-555-5555", "email": "johndoe@host.com"}, {"firstname": "Jane", "lastname": "Smith", "phone": "666-666-6666", "email": "janesmith@host.com"}]
    

Then, I can retrieve a piece of information like Jane's phone number like
this:

    
    
        var janesnumber = addressbook[1].phone
    

Arrays are very powerful tools, especially once you start referencing other
arrays in them, as it allows complex organization of data without always
needing to resort to a database solution, with a whole new language to learn.

------
reemrevnivek
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
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

~~~
faramarz
Nope, not a road block for me. By the time you get to that point, the user has
already got a taste of the fruit; it's decision time. I registered.

I love this. Keep doing what you're doing, expand the library in a few months
and contact foundations like Rockefeller for financial support if you need it.

Kudos! I'm excited.

~~~
zds
awesome. we're adding the option to skip registering but we hope most people
do what you do.

~~~
morrow
good idea, but just a thought - why not have registration go through the
terminal as well? It seems you're only collecting email and password - why not
just prompt for that without interrupting the flow of the lessons?

~~~
zds
thanks, morrow, this is a great suggestion. we'll implement it once we finish
adding more capacity and rewriting some of the stuff to lessen load.

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

~~~
revorad
For now, I'll be selfish and only want to learn and seek help when I get stuck
while programming.

Are you on twitter?

~~~
zds
yep, i'm @zsims and we're @codecademy.

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

~~~
zds
yep, expect online course submission in the next couple of days (with some
other cool stuff sprinkled in). we're taking emails now so that people who
want to get started right now can do so (we haven't built the form but we'll
show you how to get started). feel free to shoot us an email if you want to
get started before we have it built out.

------
rkalla
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
thanks! we're hoping to help you learn a lot more than javascript soon.

------
psychotik
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
you'll see soon enough ;) thanks for the feedback!

------
Hostile
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
thanks! we love tryruby too. thanks for celebrating whyday!

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

------
ph0rque
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
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!

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

------
chetan51
Excellent work! This is the first interactive coding tutorial that I actually
like.

Small bug: On <http://www.codecademy.com/programming-intro/4#!/exercise/3>, it
says "We've given you an example for the first one", but there is no example.

~~~
zds
looking into and fixing this now. thanks!

------
amasad
Awesome! This is using my console library, jqconsole
<https://github.com/amasad/jq-console>

~~~
zds
indeed it is, thanks so much!

~~~
amasad
Glad you like it. Feel free to submit any bug reports and/or feature requests!

------
peterb
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
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
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
Coffeescript and other languages that compile to Javascript could be an
interesting starting point and would need the least work for u guys...

------
planckscnst
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
It was looking for var myFullName = "First Last";

~~~
planckscnst
Why does the hint suggest making sure case is right then? I can't imagine a
mistake someone would make where that would be a helpful hint.

~~~
zachshallbetter
Dunno, I didn't write it. I actually refreshed once because I thought there
was an error. I then realized it was my fault after looking at the previous
question.

~~~
zds
Looking into fixing this tomorrow as soon as we get the load under control.
Thanks!

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

~~~
pnathan
No, it is absolutely not an implementation detail.

When I was setting out to learn programming, I bought every book I could lay
my grubby teenaged hands on about the language. Knowing the _name_ of the
programming language allows you to ask questions about it of other people and
the Internet.

~~~
jeffreymcmanus
It's an implementation detail _to a beginner_.

~~~
pnathan
I _was_ a beginner.

------
cksk
When I click on "Get Started", nothing happens. It made me think it was just a
stub site. Is it just me? Chrome on OS X 10.6.

~~~
reemrevnivek
In Chromium, an alert bar stating "Follow the directions in the console to
begin" pops up, and the console is highlighted while everything else is grayed
out.

It's a CLI-based interface, not a click-based interface, which is a welcome
change and a good thing for beginning programmers to learn.

~~~
cksk
Oh, thanks. It's odd, the CLI doesn't even appear here. Had to go to Firefox
to see it. Probably some blocking extension getting on the way.

But still there were problems: the CLI did not recognize my keyboard layout. I
could not type quotes, so I couldn't even say my name... Too bad, looks cool.

~~~
zds
looking into this now - hope you'll check us out again in a day when we have
it fixed!

------
mshafrir
Looks great guys. It might be useful for new developers to be able to reset
the code in the textarea to its original state if they mess up or get lost (I
was looking at <http://www.codecademy.com/programming-intro/7> when this
thought came up)

------
FuzzyDunlop
I love tools like this. I was using a mongoDB one the other day which was
pretty nice, too.

No better way to learn than by example, and you can take a lot more from it
than reading a 20-odd page tutorial.

This may be a matter of opinion, but I think the order in which new concepts
are introduced could be tweaked. You're first introduced to string literals.
Then variables are introduced. Then it's back to string literals. Then some
variables. Then a tiny bit on numbers which suddenly shifts back to string
literals in the same lesson.

It seems that introducing the concept of variables is a little premature in
those first four lessons considering they're rarely, if at all, manipulated,
and aren't applied consistently enough to really understand what they're for.

------
MrJagil
Amazing stuff! Slow and buggy, but as a guy who can't program for shit, this
is awesome!

~~~
zds
working on ironing out the bugs and upping the speed, thanks for the feedback!

------
bburky
This is great. Especially now, Javascript's a great language to learn and
possibly is directly useful to many people.

A suggestion is to gently scold users who do a variety of "bad javascript"
things. You may want to let them know that what they did works, but may cause
problems somehow.

The first item that comes to mind is accidentally making global variables by
leaving out the `var` when creating new variables.

Also encourage users to end lines with semicolons (maybe only when using an
editor).

Currently, if you do these things you can pass the exercises anyway. Arguably
you shouldn't be able to pass "Let's Try That Again" in "Variables" if you do
it with a global variable.

------
frobozz
I don't think you determine a passing result correctly.

I made several attempts as "Lesson 8: Take a While", all fulfilling the brief,
and all telling me "Oops, try again".

I wasn't even being particularly perverse on all of them. In fact, when I did
try being perverse, I got it to pass even though it technically should have
failed.

This is an example of perversely passing:

    
    
        var times = 0;
        while (true) {
          print( "hello" );
          if(times >=100) {
              times = 2;
              break;
          }
          times += 1
        };
    

The brief is "Your turn! Let's make a while loop that prints "hello" twice.
It's outlined in the editor."

------
EAMiller
Chrome 13 / OSX 10.6.8 - I can navigate the courses pages, but don't see the
CLI interface (just the section list, and the Disqus discussion). Also it's
not redirecting to any shebang URLs. Works fine in Firefox.

(nice work btw)

~~~
zds
bug noted - we're on it! thanks.

------
omarkassim
This is an absolutely fantastic idea and is really well executed.

What I find to be even greater is that as you run through the thread of
comments, zds is responding to feedback and then going back to Codecademy.com
to actually incorporate it on the fly.

It's 10 hours since this was first posted and I just read some comments on
"you should be able to skip registering until later" and it's already
available when you get to Lesson 3.

A great way to listen to and incorporate the right user feedback into your
application quickly and effectively.

Really good stuff!

~~~
zds
Thanks so much for the compliments, Omar! We're trying to fix all the errors
as soon as we can and get more lessons up ASAP.

We need help though! If anyone wants to contribute lessons, feel free to drop
me an email - contact (at) codecademy (dot) com.

------
donniefitz2
Not sure what's wrong with the site, but the top left is just one big empty
area of white space and the get started button does nothing at all. I've tried
both FF 6.0 and Chrome.

~~~
mrud
You have to enable/allow javascript (for the host itself as well as for
facebook)

~~~
donniefitz2
Ah, well if it requires FB, that would explain it. I was behind a corporate
firewall that blocks FB.

~~~
zds
Sorry about that! Working on fixes to decrease our dependence on FB. Let us
know if you check it out at home - would love to hear your comments.

------
bburky
A typo is the hint in "UpperLowerCase" reads `just type .toUpperCase after it`
missing the parenthesis on the function.

Additionally if the user actually does this, they don't get an error and
instead get something they probably don't expect:

    
    
        > "asdf".toUpperCase
        ==> function toUpperCase() {
            [native code]
        }
    

Maybe sometimes don't always output the evaluated result of what the user
typed. Or just output an error also with it.

------
rglover
This is great. As a designer, I've wanted to find some sort of learning
mechanism that walked me through coding and really explained what each part
does. I found TryRuby the other day and loved it. This seems to be in the same
vein but Javascript focused (which is awesome because I want to develop a
better knowledge of front-end dev). Really enjoy this and hope it sticks
around for a bit, I think it will be really helpful.

------
davidivins
FYI - found a bug: Yesterday I started doing some exercises, but I guess the
site was getting hammered and some of them were never marked as completed. So
today I finished the exercises and re-completed the ones that were never
recorded as completed. Now I have two "Getting Started With Programming"
badges and two "25 Exercises Completed" badges. Just wanted to let you know.

------
Cushman
Just FYI, since I assume it doesn't come up in the lessons, your REPL doesn't
like objects that self-reference, even though it isn't trying to print them
out.

    
    
      > o = {}
      > o.o = o
      ==> [object Object]
      ERROR: Maximum call stack size exceeded
    

This isn't totally unusual; `window` has several self-references, for example,
and hangs for several seconds.

~~~
amasad
@zds inspect.js should fix this issue, which was written by the Node people to
inspect objects in the terminal and take care of circular references. I edited
it to make it work on the web
<https://github.com/amasad/jsrepl/blob/master/util/inspect.js> Just pass all
results from eval to the inspect function and you'll get a nice pretty printed
output!

~~~
zds
thanks, amasad. looking into this now!

------
stephenou
I first thought this is going to be another site with a bunch of long
tutorials.

But I was wrong. My instinct tells me this can be the way to get wanna-be
young coders excited about programming. Reason being is teenagers/young adults
can feel like they are actually talking to a _person_ , not a machine.

(I am the programmer of 5 websites/apps/plugins and a high school sophomore.)

------
chanux
This is awesome. It definitely revolutionises learning programming.

One thing to improve, make the program sound the nice guy it sound when the
user does things right. I tried doing something wrong and presented with just
an error. Probably not good for the type of audience that would embrace this.

`> 2w2 ERROR: identifier starts immediately after numeric literal`

Wishing very good luck.

~~~
zds
We'll try to wrap the errors with something a little more user friendly.
Thanks!

------
MrKurtHaeusler
I like it. I am however not the target user.

Also it is not that original:

<http://tryhaskell.org/> <http://tryruby.org/>

In fact theres already a javascript one: <http://tryjavascript.devfu.com/>

But it does seem friendlier somehow that the others.

~~~
mkr-hn
I think what sets this apart is the curriculum format. You can go back through
and review lessons. I don't see something like that on the sites you linked.

~~~
MrKurtHaeusler
Ahh yes very good point.

------
TechnoFou
Great idea, excellent execution....some slow server and unresponsive consoles,
but that's normal for a launch!

Overall, an amazing website!

~~~
zds
working on making sure it's up to speed ASAP, thanks!

------
emilepetrone
Really nice. I just did all of the exercises .

2 bugs I hit were the lessons not saving upon completion & if it hits an
error, it froze the window which I had to close (Chrome running on Lion)

Proof of completion:
<http://www.codecademy.com/users/4e4da1c233a5480001000221>

~~~
zds
looking into these now. thanks!

------
camelite
Somewhat newbie programmer here. On lesson 6, "Otherwise", the default code
seems to be wrong to me. It takes input from prompt() & assesses it as if it
were an int/float, not a string. The lesson progresses with an incorrect
solution (answer is "not even close" for 6 and 7"). Works if u look for "6" or
"7".

------
justinmares
I like the interface a lot - clean and easy. How much will someone be able to
do after going through the training?

------
schiptsov
Transcendentally useless. ^_^

Please, visit [http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-00-introduction-to-computer-science-and-programming-fall-2008/)
instead.

------
bomatson
Feels great, well done on the UX side. Although I do wish you would focus on
particular languages and use cases. Suddenly, "I'm learning Javascript". A
normal reaction would be- "Why am I learning Javascript? What is it useful
for?" for non-technical users

~~~
zds
yep, planning on adding some more context as soon as possible. thanks!

------
jsharpe
I suggest, to make this easier for beginners, that instead of having a single
hint for each exercise, instead provide a series of hints, culminating in just
giving the complete solution. That way people aren't stuck forever on one
exercise.

------
oskarblom
7/8:ths into it hung chrome and I had to kill the page. All my progress
disappeared. :(

~~~
yoklov
Same thing happened to me while I was testing it out, page crashed so there's
no error message for me to paste from dev. console.

------
raster_blaster
Hah, it even keeps the cursor from blinking. I wonder if it's hardcoded or if
it actually picked that up from my system settings.

I've never done Javascript before (although I do or did
Python/C/C++/D/Pascal/AHK), this will be interesting. Great job!

~~~
zds
Thanks! Hope you can pick up Javascript and add it to your arsenal with
Codecademy.

------
mkr-hn
This has the hidden benefit of being great for review when you forget a
concept. I gave up on programming as a trade after almost 15 years of false
starts, but I do have to dip into code from time to time.

Having this to review with will be handy.

~~~
zds
yep, that's what we're trying to help with too. just wait until we have some
more advanced topics!

thanks for checking us out.

~~~
mkr-hn
License this out for things. It can do anything a textbook can do better. Do
you know how much easier math would be with this? So much potential. There's
your monetization model.

~~~
zds
Thanks for the suggestion! Keep an eye on the site ;)

------
timinman
Hey great job! (And just in time for whyday) Intermediate coders might also
want to try this similar site I recently found:
<http://nathansjslessons.appspot.com/>

------
paul9290
awesome i proposed a similar idea yet a different way of teaching one of the
popular web languages at a Start-Up Weekend.

Most there dont know how to code, but none too surprising none were interested
in creating a service to learn how to code. I'm not bitter that my idea wasn't
selected as these non-coders wanted to create a fashion site or the AirBnB for
restrooms (HA) :)

Well Im going to get started on that idea I proposed a few months ago. Besides
this Ive seen some other things popping up that show a real need for such a
service.

My wish for your site is to have a log in option so I can save my scores and
it remembers what I did with each lesson.

Good luck!

~~~
zds
good luck with the idea! looking forward to seeing how it develops and thanks
for checking us out.

~~~
paul9290
cool be on the look out for <http://tymecrunch.com> \- nothing there just yet.
But were working on it now locally :)

------
alttag
I'm a bit grumpy that the site kills my meta key (command, on OS X 10.7) when
focus is in the "terminal", so I can't open new tabs or pages in my browser
via hot-key. (cmd-n; cmd-t) Can't use the clipboard either.

------
brackin
I definitely think the hackers of the HN Community should help create lessons
for the site, it'd be really beneficial for the non technical folk. I think if
more lessons were added it'd be even more powerful.

~~~
zds
we'd love that! if you have something you'd like to teach, drop us an email -
zach (at) codecademy (dot) com.

------
rasur
@zds, it's difficult for users of foreign layout keyboards to access certain
symbols, for example '@', which on some european keyboards is achieved using
alt + G.

It'd save a lot of annoying c'n'p if you could fix this. Cheers

R.

------
dkokelley
A little buggy. I seem to have lost my session and logging in produces an
error (Invalid email or password.). Also, after completing the courses, some
courses showed as incomplete.

~~~
zds
Working on fixing user registration and login - we're having issues because of
all of the traffic. Try us again soon and everything should be working.
Thanks!

------
wturner
As an "average" non-programmer I love this. I'm teaching myself to code and
this looks like a framework for learning that's perfect. I'll send feedback as
I go through the lessons

~~~
zds
thanks! looking forward to getting it.

------
scelerat
This is very nice.

Some more informative messages would be helpful. Some errors are genuine
errors while others are simply an issue of not typing in precisely what the
lesson wants you to type in.

~~~
zds
We'll fix the messages and errors ASAP. Thanks for the feedback!

------
castewart
I like the idea. Did you borrow inspiration from www.tryruby.org ?

~~~
patched
Perhaps that and <http://CodeSchool.com> ?

------
Troll_Whisperer
This is awesome. I really, really like interactive tutorials like this. I do
have some programming experience, but being pretty weak in JS I found it
educational. Thanks.

------
prayag
I am on Linux_x64 and chrome. Can't click the GetStarted button.

~~~
zds
checking this out. thanks prayag!

~~~
bjcubsfan
I am running linux x_64 and chrome and had no problem.

------
JacobIrwin
Is this affiliated to (or a domain change) of hackercs.com?

Or a new competitor?

~~~
zds
not affiliated with hackerCS - we love what they do though!

------
rglullis
Any reason that I simply can _not_ type quotes? Is it dependent on the
keyboard layout? I'm using US Alternative International layout, Firefox 7,
ubuntu 64-bit.

~~~
zds
we're looking into this now - thanks for the tip.

------
forgingahead
This is great -- very intriguing so I got pulled in. Was a non-coder myself 6
months ago (still don't consider myself one) and this is great. Thanks for
doing it!

------
5h
A 15 year old work experience person I have just ran through this, with no
prior programming experience ... seems to have worked very well, grats to the
authors!

------
brackin
I'm a total noob and was able to complete this and really enjoyed it I think
you just need to start adding courses so people can actually start using it a
lot.

------
michaelneale
Fantastic - I am going to see how my daughter goes with this (8 years old) -
previously has been python which was great - but she could do this on her own.

~~~
zds
Terrific, thanks Michael. Let me know how she does and if you run into any
problems - I'm contact (at) codecademy (dot) com.

~~~
michaelneale
Well she did pretty well, need to spend more time. The problem is the lure of
"moshi monsters" (which I am realising is a social network by stealth) - just
one tab over ;)

It is really fantastic - the subtleties of dealing precisely with a computer
(syntax) are often hard to get across, but I like how this eases them into it
- but doesn't hide it away with visual programming. One of the greatest pieces
of advice I was given before I started programming was that a computer will
not tolerate mistakes, fuzzyness, vagueness. It will do your bidding, but no
more.

------
akvlad
Seems like a good app to get beginners started with learning to code. What
stack is this built on? What language are you teaching with, is it javascript?

~~~
kenok
They are teaching javascript

------
emehrkay
Nice to see that there is a market for this because I've had an idea for about
a year now around an .it domain that I bought last year. Good work

~~~
zds
Thanks!

------
kenok
Lesson 4 "which number" instructions is lacking which name you should use, it
should specify the variable name "number" clearly.

------
jurre
Would you let me translate it to coffeescript?

~~~
zds
Would love you to! Drop me an email at contact (at) codecademy (dot) com and
we'll get you started. Looking forward to it.

------
teyc
Very nice design. You can almost compete with the adult education colleges if
you can get certification.

By the way, the design is very nice.

~~~
zds
thanks!

------
mkr-hn
Did you wipe accounts? It's not letting me login, and I get "Email not found"
when I try to send a password reset e-mail.

------
astrofinch
comparable to: <http://eloquentjavascript.net/>

~~~
dsawler
Eloquent Javascript was painful for me. As a beginner, I had so much trouble
understanding what was going on.

On the other hand, I've had a great experience with Codecademy, though I
haven't spent a bunch of time with it yet.

------
daimyoyo
Well done. I like it. I especially like the interface. I hope this idea
catches on. Continued success. :)

~~~
zds
thanks!

------
halala
Hi I have problems running codecademy. Using windows XP, mozilla 6.0. Anybody
with advice? Peace

------
maxniederhofer
It's very addictive. One of the few use cases where I actually enjoyed the
game-like features.

~~~
zds
thanks, max! hoping you'll come back for more.

------
aaronbrethorst
Absolutely wonderful. This is the successor to TryRuby I always hoped someone
would build.

~~~
zds
thanks!

------
tomblomfield
Great work - I've got loads of non-techy friends who are looking for an intro
to coding.

~~~
zds
thanks tom! would love if you sent it to them.

------
BrettCawley
Have to agree with the sentiment so far, looks and works great!

What are you plans with it for the future?

~~~
zds
thanks! at the moment fighting fires and working on getting more curriculum
up.

------
brackin
This is a genius, i'll be doing this tomorrow (not a developer) and will bring
feedback.

------
magicalhobo
Clearly a good idea... make programming a game. And very good implementation.
Nice!

------
BasDirks
That's really kick ass. The rewards (simple numbers/badges) work well for me.

------
nextparadigms
I hope you can add Android/Java programming later on. But until then you
should probably focus on web languages. Very nice site. When I'll decide to
learn Javascript, yours will be the first I'll try. Great name, too. I hope
you can expand it quickly. Good luck.

~~~
zds
definitely in the pipeline. keep coming back to the site to see what's next!

------
gary4gar
Getting Started with Programming: _100% completed_

Please add more courses :D

------
ph0rque
I'll get back with what my 12-year-old brother says about it.

~~~
zds
Would love to hear it. Shoot me an email at contact (at) codecademy (dot) com.

------
madao
very nice! but I have problems working this on my IPAD, appears you cant type
in that box on the virtual keypad...

~~~
zds
unfortunately the iPad is unsupported at this time. we're working on getting
it out the door as fast as possible!

------
kongqiu
Going to share this with my 8-year-old!

~~~
zds
Terrific. Let us know how your child likes it! feedback (at) codecademy (dot)
com.

------
crag
I love it. Well done. And thanks.

------
robjohnson
Very interesting intro to JS.

------
pythonrocks
Anyway, you can't beat SICP.

------
wowwcher
lesson 4 part6,"Saving your substrings"---I can't get it! help~~~~~

~~~
tbx1
var three = "your name".substring (0,3)

~~~
wowwcher
thx！

------
czzarr
brilliant and beautiful, congratz

------
hacker_ray
so easy

------
figbuck
moar lessons!

------
nirvana
This pulled me right in... and it has me intrigued and I'm playing around with
it. This made me realize that the more you get me using it, and the more you
teach me, the more likely I am to come back to you when there's a language I
want to learn that I don't already know. Love the jump-right-in setup you have
going.

------
dreamdu5t
Huge mistake to make it free. Huge mistake.

~~~
HiroshiSan
I could see it free for the main page and then any other languages they add
could have something like...first 3 lessons are free and then you have to pay
to unlock more languages or lessons.

------
nealsales
We are going after the same problem with a different solution -
<http://codeacademy.org>

Looks great, looking forward to seeing it develop!

~~~
jolan
Charging $41/hour to learn Rails isn't a different solution.

~~~
nealsales
How so? And we're definitely providing much more than just "learning rails."

------
bwanaaaaaa
I disagree with this approach. Making things so dumbed down only accentuates
the depth of the learning curve. By the time I can write code to do something
worthwhile, I'll have gray hair. Just show me a python project that can help
me play WOW better and show me what to tweak. By the time I get into it, I'll
have learned a lot just by reading the comments in the code - and maybe some
hyperlinks to web pages that explain what is going on-e.g. pointers, linked
lists,etc)

------
dusklight
Why doesn't this say right at the very beginning what language you are trying
to teach? The tone of the site is incredibly arrogant. What makes you
qualified to teach? Have you heard of the Dunning-Kruger effect?

It should be more explicit that this site is teaching Javascript (are you
teaching other languages? it is not clear) and it is for complete beginners,
and that the site creators make some very patronizing assumptions about the
students.

This is like clicking on a link to "poetryacademy.com" and finding a site that
is teaching you how to sing the alphabet song.

~~~
aik
I think it would be more beneficial to the authors if you explained why the
tone is arrogant? Also, why do you assume the authors aren't qualified to
teach -- why do you immediately assume them to be incompetent by noting the
Dunner-Kruger effect (that sounds a bit arrogant to me?)? On the same note,
what exactly do you believe makes someone qualified to teach? One more
question -- what exactly is wrong with targeting complete beginners? Please
explain how that is patronizing -- it is a fact that some people in this world
don't have programming experience, are OK with that, and would be happy to
learn.

~~~
dusklight
It shouldn't be called codecadamey, it should be called
javascriptkindergarten.

I think it is arrogant because it is claiming to be teaching how to code, when
it is not doing anything of the sort. I think it is supremely arrogant to not
even mention that it is teaching javascript specifically, making it sound like
you could learn how to code in general from the site, when it covers only the
most basic of basic topics, and then covers them wrongly. I think it is taking
the wrong approach towards teaching someone how to code, in a manner that only
someone who doesn't know how bad they are at coding would do. I think people
need to understand that learning how to code takes a long time and a lot of
hard work. I think the site does too much hand holding and is way too slow ..
it is like saying that if you want to learn how to fly to the moon you just
have to practice jumping higher and higher, it is like saying if you want to
write the next great novel you should keep singing the alphabet song until you
know all 26 letters .. it doesn't work and it's giving false hope to people
who are not trying hard enough, making them think that they can put in the
little little bit of effort that this site asks of them and they will be able
to succeed in learning how to code.

If I had to teach someone programming from scratch, I would definitely start
off with some basic theory of computation stuff, get some basic concepts in on
what a state machine is, what are the differences between a deterministic
finite automata, nondeterministic finite automota, and a turing machine, then
with a basic understanding of what a turing machine is, we can get some C in,
learn the basic memory model, what is stack and heap, then gain some basic
understanding of typing, difference between static types and dynamic types and
why it is important to know about types, which makes so much more sense once
you understand what is going on with the heap and dynamic memory allocation
and so on, then we can go on to the concepts of abstraction, state change, and
so on.

~~~
aik
Few things:

1\. I think you have a good argument concerning how they may seem to be
belittling the complexities of programming. Again, I'm interested in seeing
where they will go from here... I believe they have a good (early) start, and
I believe the worth of the site will be determined by how effectively it can
teach anything beyond the very very beginner level.

2\. The site just recently was made available -- it's clearly not 100%
complete. HN has submissions of half-complete (or <=MVP) stuff all the time.
This, and the fact that there is no business model present, the fact that the
lessons stop at a very abrupt point, and the fact that the authors here are so
eager for feedback, I believe renders the harshness of your harsher arguments
unhelpful.

3\. How you suggest one would teach someone programming from scratch I think
would work for very few people (though if done well, I have no doubt it would
work for some). I think a majority of people you would try that strategy on,
how I am perceiving it anyway, would lead to burn out and people end up hating
programming before much time was up. In fact, I believe that approach is one
taken so often in school, and look where it has brought us... a majority of
people hate math, hate [insert random science subject], and hate [insert
nearly any academic field sometimes even including the one they majored in].
How is it that we fail so horribly as to often cause such strong aversions to
certain subjects, or rather what we believe are the subjects. I don't believe
anyone truly hates math (or any academic subject), they just have a horribly
skewed idea of what it is.

~~~
dusklight
People hate math because they are cowards and people are cowards because we
have math 101 in school but not courage 101 ... I have spent a lot of time
teaching myself how to learn, so I agree that current institutionalized
methods of education are very flawed. But it's like, life is hard. It's not
going to get any easier just because you pretend it's not hard.

~~~
aik
Teach a courage 101 course?

I agree with this for the most part, but I don't agree that being a coward is
a natural state unless taught otherwise. I believe it results from the
mindsets we form based on what we perceive societal values to be.
Parents/peers/culture seems to value good grades, or simply looking good at
whatever you're doing, and being accepted by following the norm --
superficial, damaging, and mostly pointless things -- and as a result, those
things become priority for people over learning. If we stop pretending those
things matter so much, and put more focus on the beauties of learning and
curiosity and discovery and exploration, things would be different.

When and how did you learn to become such an autodidact? Have you been one
your entire life? Or when did you realize the system can't and shouldn't force
learning upon you and you have to take it into your own hands? I made some of
these realizations not all too many years ago, and am fascinated by how others
have made the transition.

Thanks, your views I find interesting...

~~~
dusklight
I am not saying that being a coward is a natural state, rather I am saying
that courage can be taught.

If you want to work in software engineering you have to teach yourself pretty
much everything -- identifying what you need to learn is a big component.

