Thoughts on Code Year, Codecademy, and Learning to Code

By going one click away from this post you’ll see that I’ve spent the last twelve years writing books specifically geared to the newbie coder—be it someone who wants to learn the markup language of HTML, the style sheet language of CSS, the query language for relational database systems, the client-side programming language of JavaScript, or the server-side programming language of PHP (or, in fact, all of them together). As I wrote a few weeks ago, learning from tech books is not dead. But it’s not the only way to learn; straight up learning from a book doesn’t work for everyone, and certainly not every tech book pays attention to pedagogy (I do, with the help of all of my editors who keep me honest).

Then again, neither does every online learning environment. Do any?

THINGS I BELIEVE:

  • Everyone who wants to should learn to code.
    • My answer to the question “Should all majors (not just computer science majors) learn to code?” is “sure”, for some value of “code” (there’s a difference between markup and programming) and in a context that makes sense for the student. I’ve been at schools where “Professional and Technical Writing” is a course required of all upper-division students regardless of major, and were I to teach that again I would spend some time on “code or be coded”, probably more in the context of understanding the “rhetoric of information” than code, though. Oh hey, I just remembered I wrote something to that effect in 2009.
  • When someone is “learning to code,” the only outcome of Lesson the First should be to understand what you’re learning and why.
    • The ideal outcome of Lesson the Second would be to understand how what you’re learning is or is not (or when/when is not) applicable in your life and current or future career
  • Learning to code (learning anything) requires scaffolding.
  • Teaching code (teaching anything) requires careful consideration of scaffolding and when to add and remove it.
  • Teaching code (teaching anything) through imitation (type this! now type that!) without context or mentorship (for some value of mentorship: one-on-one, group, virtual, StackExchange or its ilk, etc.) is as bad of an idea as sending someone to France who has sat in High School French class but who has only memorized enough phrases to ask for the location of the bathroom.
  • Pedagogy should be rewarded.
  • Badges alone, while fun and useful in some contexts, are not pedagogy.

Given all of the above, I find myself in the situation of watching a considerable number of people I know (virtually or otherwise) get really, really excited about Code Year and the learning platform and curriculum developed by Codecademy, while I am really, really not.

I was trying to figure out just why my internal reaction was so negative, and then I came across this tweet by Dan Morel (note that I abhor the use of the word “retarded” and Morel himself said he should have used a different word):
Dan Morel tweet

What Morel’s quote reminded me is the fact that there is a not-insignificant number of people out there with jobs like “programmer” or “developer” who themselves don’t actually know how to code; they may have taken initiative on their own (a good thing!) and gone through a tutorial (or read a book, mine included), or took took a semester or two in Java or whatever language, maybe memorized some concepts, keywords, and typical sample interview questions, and managed to get a job as a developer. Or, they were in a position at a organization that decided it needed a “coder,” this person dabbled in some things, they were given a task to do, the task was done (for some value of done, meaning not knowing if it was a secure, scalable, safe, tested product), and they moved up the chain or to a different organization into a developer group and learned that they didn’t actually know development norms. These are things that happen, and they happen more than you think. People in my field have been discussing these situations for, well, as long as I’ve been in it, and I have seen at least one, if not both, examples in just about every organization I’ve worked with.

You may say that these situations are all the fault of HR or hiring managers, or managers in general, and sure, that’s the case in a lot of situations (here’s another plug for not hiring programmers based on puzzles, API quizzes, math riddles, or other parlor tricks). But the heart of the matter is still that there are a bunch of people out there with delusions of grandeur thinking they can code when they can’t. Code Year, and the Codecademy approach—based on what I’ve seen of it at this stage in their game—is not going to help that situation at all.

For two months I’ve been trying to come with a response to Audrey Watters’s post “Codecademy and the Future of (Not) Learning to Code” that wasn’t just OMG I SO AGREE WITH YOU.

I can’t. Because I do agree with her, and the key issue is pedagogy.

You know what I hope more than anything in the world? That the $2.5M and other venture money that Codecademy got goes predominantly toward pedagogy and user experience. Yes, the interface is shiny and the badges are neat, but no, it is not teaching you how to code. It is teaching you how to call-and-response, and is not particularly helpful in explaining why you’re responding, why they’re calling, or—most importantly—how to become a composer.

I’ve silently watched many people start the lessons, ask the right questions (“why am I doing X?”, “what happens when I do Y instead of X?”, “how does X and Z fit together?”, “how does Z compare to A?”, “wait, all I’m doing is typing what you’re telling me to type?”), and end up saying “well, I just earned 5 badges and don’t know what the heck that was all about or how it relates to [insert completely reasonable things here].” That is not an acceptable outcome for any learning venture, online or otherwise.

Learning anything without context is hardly learning. I wish that Code Year was 2013 and 2012 was “some smart people with good ideas and a lot of money built took the time to build great pedagogically-driven tool to really solve an existing problem for folks who want and need training in this area.”

“But Julie,” you may say, “you’re really into code and stuff. You care deeply about the term and how it’s used, and you care deeply about finding ways to teach people in ways that make sense to them. Surely you can just chill out and be cool with 500,000 people learning JavaScript online?”

Sure. I can be cool about it. I think it’s beyond awesome that 500,000 people want to try something new and that new thing involves code. I was just as excited when I saw “engage the arts and humanities” on Matthew Might’s “12 resolutions for programmers” list.

The thing is, like Audrey said:

You can look at something like Instagram in contrast, another “hot new startup” that boasts some 5 million users and over 100 million photos. You can ask, “how many of those photos are actually crap?” and the answer is probably “it doesn’t matter.”
But when you ask “how many of those 500,000 Codecademy users actually learned any JavaScript?”, the answer is actually really important.


Edited to add, months later: If you read this post and think my point is “you should buy my books”, you’re quite wrong. If you’re looking for a recommendation about where to learn X, Y, Z, I can’t give it to you because I don’t know you, and everyone learns differently and has different goals (also stated in the post). The point of this post is the pedagogical implications and pedagogy of Codecademy specifically (ca. Jan 2012) and things like it in general.

Tagged with: , , , ,

26 Comments on “Thoughts on Code Year, Codecademy, and Learning to Code

  1. “But when you ask “how many of those 500,000 Codecademy users actually learned any JavaScript?”, the answer is actually really important.”

    What if the answer is “More than would have learned something without it”? I see your point about delusions of grandeur, but there’s nothing like actually trying to build something or actually getting hired to do something to serve as your reality check, right? What I learned from my Data Without Borders experience is that there is room in the world for all sorts of skill levels and I think there are worse problems than recruiters offices filling up with unqualified applicants.

    • If you’re a recruiter, I would imagine few things are worse than offices filled with unqualified applicants. However, what a person chooses to do with their spare time can sometimes speak volumes about their quality. Someone who is willing to learn something about coding may make a better hire than someone who doesn’t spend any time on personal development. Code Academy participation can be valuable in that sense.

      • Oh, for sure — any attempt at self-improvement is a great thing. It’s just that in this situation there are a ton of people looking for self-improvement, and the system they’re flocking to is missing the mark when it just doesn’t have to (meaning, there are teachers, trainers, educators, interface experts, etc who would be thrilled to no end to consult in these matters, and time could’ve been taken to fold any of that expertise into the system before a launch of such magnitude.

  2. Thanks…you wrote most of the post I wanted to write in response to this!

    I’ve had the same fear about lack of context. Whether what I do can actually be called coding aside, what I do know of it came from having a problem to solve or an idea to implement, which gave the motivation to actually figure out how stuff works. It left a lot of gaps and incompleteness, but I think that’s what also makes the conceptual ties between what you’re typing and what actually happens — and how to do similar things again.

    So, any people learning code this year, first find yourself a project, something that you really want to build, and let that inform what you are working on and learning!

  3. Interesting. I took a look at Code Academy at the end of last year, and thought it looked interesting. But, like Patrick, everything I know how to do with code (and I know a lot less than him!) I learned because I had a problem that I needed to solve. My interest in Code Academy was more from the standpoint that it might provide necessary, conceptual scaffolding that I’ve lacked through my experiences. When you’re teaching yourself code because you have a problem to solve, it’s kind of like feeling your way through a room in the dark. In the end, you might get to the door on the other side (or you might not!), but there’s still a lot of the room you never “saw” and you’re not sure you talk the best path.

    I wonder if Code Academy will work for me as this kind of tool and experience, and whether I might come out on the other side with a better understanding of what I’ve been doing all along.

    On another note, I’ve been thinking of using Program or be Programmed for a class I’m teaching this spring — I’d be interested in hearing your impressions of it.

    • Hey Martha – I’ll reply to you (& others) in a bit when I’ve got some good brain time to devote to you thoughtful folks, but I wanted to note for anyone reading this that Codecademy (http://www.codecademy.com) is not the same group and doesn’t have the same product offering as Code Academy (http://codeacademy.org/). I’m talking about the former — I think you are, too?

    • I would love to know how Codecademy is dealing with assessment — not badges that people earn by hitting milestones that can be gamed, but real pedagogically infused assessment. Not just for the students (because let’s get real here — without some money changing hands somewhere, there’s no true responsibility to the students besides goodwill and Doing the Right Thing) but also for internal uses: how to know what to improve, what’s working (period), what’s working for which audience (new vs experienced), what to focus on (new vs experienced), etc.

  4. Um. That should be “took the best path” not “talk the best path.” Although, talking a path might be a good idea in some cases. 🙂

  5. If the only way I can figure out what I’m doing wrong on a lesson is by eventually googling and finding another website to explain it to me, then what exactly is Code Academy doing for me pedagogically besides those cute little badges? Sticker charts are nice, but for millions of dollars in venture capital, you’d hope for something more, you know?

    Maybe the group of us who were going to do Code Academy together should just buy one of your books and work through it instead! (I’ll make us all sticker charts.)

    • That’s funny. You know I’d just send you & the kids some books if you wanted, right? I have a stack of ’em.

      But really, it’s been interesting to watch questions like “I’m doing Code Year, and I’m stuck at X point in Lesson N — what does Z mean?” on StackOverflow & its ilk. And also the Googling — heck, this blog post gets a lot of traffic from searches like “codecademy code year wrong answer”.

  6. I am so happy to hear that coding should be hard for those of us who struggled with math – the glossy hipster package they are selling overlooks all the important things you’ve pointed out. Unlike most people who are taking Codecademy lessons, I am struggling to get through lesson 1. Variables I kind of got, but then arrays, not so much. I kept wondering why you had to go through all those convoluted steps and not be direct. But I had no teacher around to answer my questions or make learning fun. I found it incredibly boring and difficult to motivate myself to spend what little free time I have trying to learn this. I wanted answers and a “big picture” understanding of why you have to do what they are telling you. So far this has proved to me that independent learning can only go so far. I know basic HTML and found it much easier to understand and learn than this, but I learned it in a more traditional online class with “lectures” and lessons more akin to traditional school structure.

    • Without a familiarity/understanding of logical constructs and some basic algebra, for sure the building blocks of programming will itself include a learning curve (independent of language). Familiarity with HTML isn’t really going to help all that much when it comes to programming — it being a markup language and not a programming language — and that’s something else

      But to your point about independent learning, you’re right — it can only go so far…and that’s true for anything, not at all just for Codecademy lessons (or any coding lessons, etc). Without some sort of touch point for students, learning will necessarily cease at some point. There are plenty of accredited online courses for independent learning that fail miserably for students not because the content is bad but because the teacher/mentor/guide is absent (either entirely or because they’re doing a not-so-good job at their job).

    • I’ll take you up on that, Zach, because to be clear, I want Codecademy to succeed like nothing else in the world has ever succeeded, because the goal is incredibly necessary to achieve. But I think there’s something to the fact that a lot of educators and programmers are raising red flags as to content and pedagogy and outcomes (assessment).

  7. Interesting post, and one I tend to agree with. I’ve been trying to learn code for the past 6 months or so, but essentially was getting nowhere — even with CodeCademy. You articulated the problem well: I was being told what to type into a box and suddenly things were happening. I had no idea what I was typing though, or what any of it meant. Who cares if I can copy someone else’s code for Fizzbuzz if I haven’t a clue what I’m actually writing?

    Things began to improve for me in December when I started Harvard’s CS50 course (as a non-student, of course). The class opened with the simple concept of “Programming a Peanut Butter & Jelly Sandwich”, aka, writing the steps involved of how to make one. That was a really innovative way to teach a non-programmer what kind of logic we’ll begin with when we approach code.

    I recently went back to CodeCademy and could do all the exercises (though I’ve only learnt C through CS50 and CodeCademy is Javascript), though it struck me how they were explaining the concept of a string in a sentence whereas CS50 takes an entire class.

    Though I’m happy to be proven otherwise, I don’t see how someone could really accelerate their coding skills using only Code Year.

    • Your example of the PB & J sandwich is a good one, and is typical of the type of explanations found in pedagogically strong lectures/presentations/blog post/book chapters, etc. And it’s something that is independent of teaching programming — I mean, fundamentally, we don’t define vocabulary words using the word itself, or teach intro to chemistry using as-yet-unlearned chemistry terms…this is where the scaffolding comes it. The steps to programming a peanut butter sandwich (and I would argue testing and documenting the sandwich) might seem ridiculous, but they’re absolutely not. +1 to those instructors. (This reminds me of a typical first assignment in a professional and technical writing course, such as the ones I once taught: the how-to document. Given the ability to write a how-to on “anything for which you consider yourself an expert” it was always an eye-opening experience for students just how much thought & logical analysis goes into writing a how-to for, say, “How to Boil Water”.)

      • Chiming in to say the process analysis (how-to) for making a pb&j is a standard assignment in our composition courses for the same reasons Julie and Harvard like it.

      • We had to do the PB&J instruction sheet thing in the 6th grade. Everyone wrote what they thought was a good how-to, and then we paired up at desks with peanut butter, bread, jelly, plates and knives to test them. Pretty much everyone ended up with condiments all over their hands or inside out sammiches–and that’s a task with a lot more wiggle room than programming. Forget the knife and you can still have a functional PB&J if you’re willing to get your hands dirty. Forget the semi-colon and all you get is a cryptic error.

        • Hi Sheepy,
          This is a +1 and a “like.”
          I am glad you got your hands dirty. There’s a sign I used to have on my office door (old newsprint paper hand prints of my son’s kindergarten hands in black ink, beneath which was a comp/print out one line: “We’re not afraid to get our hands dirty.”)

          But, when we did this f2f, we had one poor sap do it while standing on a table and taking step-by-step instructs.

          Result was same as yours: condiments all over their hands or inside out sammiches.

          Lesson learned (more for instructors than students, though there were a lot of light bulbs going on overhead of all in classroom).

          Props to Mike.

  8. The first week’s lessons of Code Year were difficult. Even having some familiarity with basic concepts of Programming, I became frustrated with it. Because I’m one those stay-at-Hello-World wanna be Programmers that gets quickly discouraged when the lessons start with square roots, booleans, and intimidating math voodoo. It really was frustrating, but I’m stubborn, decided to stick to it, and honestly cheated with the Fizz Buzz test. All it took was searching “Fizz Buzz solutions in Javascript”.

    But in the second week the pacing of the lesson started to slow down. The instructions explained some more concepts and were more clear. They also added a Q&A that has helped a lot. And this past third week was very good. They went through what we learned and explained a little more.

    But as you said, it’s a little hard to get the whole gist of it that way. But I also think it’s not entirely a bad thing. Since I’m done with courses, high on badges, and hungry to learn more, I’ve been reading Thinking like a Computer Science with Python, watching MIT CS courses, and generally getting more fundamental.

    There are surely a lot of people that are only going to focus on the badges, (I bet you 100 dollars that Bloomberg has quit by now), but I imagined that there are also a lot of people like me that are kind of stoked that they’re finally getting it a little bit.

  9. It’s great that you’re one of the ones who has taken the opportunity to learn more, while noting the various deficiencies (and going outside the program to find the answers when stuck, which is really common based on my small sample size of looking at my server referral logs and questions on StackExchange!). In a perfect world, the marketing spin wouldn’t akin to “learn to code, get a job, save the world!” and instead would be what it really is, which is “get familiar with _something_, don’t being afraid, and learn more!” Codecademy also has a flexible enough system, one would think, to actually make pedagogical changes on the fly (though one would have hoped that happened during a round of alpha & beta testing, but alas) such that students coming along _do_ get a better experience.

    • “get familiar with _something_, don’t being afraid, and learn more!”

      This is basically my exact motivation for going through Code Year. I’m currently pursuing a BS degree in computer networking, and understand that at least a rudimentary profiency in “programming” and “code” is required to get anywhere beyond the help desk position in the work force, even though I’m not looking to get into the coding side of the industry.

      Like Jay mentioned, they did slow the pace down after the first few weeks, and started to explain things much more clearly, I would imagine due to the scrutiny they have received for their teaching techniques. There have been a couple of instances where they’ve used more complex concepts within examples demonstrating whatever it is they may be teaching that week (specifically Math.floor and Math.random, and the concept of Objects, null, and indefined), where they have made sure to point out “Look, we know this part of the code is more advanced, just copy it for now, and know that we will get back to it.” Sure enough, when they went over Math.floor and Math.random last week, they made sure to explain it in great detail, far more detail then they used in their first few lessons.

      I’m not here to champion for Codeacademy/Code Year. I think there are valid criticisms with their grandiosity. However, they are doing a great job of making code seem less scary, which I think is very important. They may not teach the world to code, but they are doing a great job of taking the scary face off programming and making it more accessible to smart people who have been intimidated by it in the past, and so in that respect, it has to be considered a valueable tool.

      I know I’m not going to become a programming wizard through the program (nor is that my goal), however, I am now looking outside the program for more ways to develop my understanding of coding, because now that Code Year has made me realize its not as scary as I’ve thought (for two decades, since I logged in to my first BBS at the age of 12), im actually excited, enthusiastic, and motived to learn these new skills.

  10. Oh thank you for this post. I made it through about 3 lessons, was told I was wrong with no explanation, and gave up. Without any context for this stuff, I just don’t have the patience to grasp it. I’ve had problems to solve in designing some feature on a website, and was able to find and adapt a jquery script for it–as many hours as that took–because I had a meaningful contextual motivation to keep at it. I several years ago took an online Javascript class through the local community college and that also was frustrating. The instructor had typos in the code, used a version of Javascript that was not compatible with my Mac, and I finished feeling like, What was the purpose of that?

    I am now doing an online jquery “class” but at least that language makes more sense to me because I can see how that dovetails with marking up a website and using jquery for effects.

  11. Thank goodness it is not me and bless you for this post. A course I’m taking at my University had me go through the beginning modules at Codecademy and I pretty much felt the same way your example student did after completing them… “huh?”