Why Codecademy is overrated and missing its target audience

Let’s just make this quite clear to begin with: I believe Codecademy has great potential. I really want to see it succeed, because I can see there is an identified gap where Codecademy fits, and a lot of people can benefit from using the site.

However, after spending some time ‘learning’ (or trying to learn) JavaScript on Codecademy, I experienced some fundamental issues which I believe are holding it back. The problems lie in Codecademy’s set up in its current state.

For first time coders, it’s horrible.

Who is Codecademy for?

When you visit Codecademy’s homepage, one of the first things you’ll notice is a big heading that says Learn to code. This is followed by the sentence, “Codecademy is the easiest way to learn to code.”

I’m going to take these two clues to mean that Codecademy is aimed at beginners. As far as I can make out, the idea is to reach people who have little-to-no coding experience, but want to learn. I’m going to use this assumption as the basis for the rest of this article.

What are code novices like?

So what else do we know (or can we assume) about these newbies?

  • They are completely (or almost) new to the world of coding
  • They have some idea of what they can build with code (i.e. they’ve used apps and websites)
  • They don’t understand the basic principles of whichever coding language they are learning
  • Their point of reference for anything language-based is standard usage rules which apply to conversations and literature

This last point is a red flag for me. Let me explain with an analogy from The IT Crowd:

No doubt you’ve heard someone call Internet Explorer ‘the internet’ before. The concept of web browsers is completely foreign to some users, and yet because it’s second nature to many of us, we don’t realize there are people who just don’t get it.

Code can be like this. Take the concept of HTML tags for instance: it’s common sense to make sure that all of your tags are opened and closed. And for someone who knows HTML, it’s not hard to jump to the conclusion that in another coding language, anything that’s open must also be closed at some point. But imagine approaching code without an inkling of this concept. Why would you ever consider that the problem with your code is a tag left open if you’ve never encountered that concept before?

Why is it overrated?

Codecademy undoubtedly has a lot going for it, but these major problems are letting it down.

The foundations are missing

Many developers have heralded the concept of Codecademy itself. In theory, it sounds like exactly what we need. For developers, however, it’s almost impossible to forget what they already know. Take the browser example above: until someone says “That’s the button for the internet,” you probably won’t realize that it’s not obvious what a web browser is.

If you already know that all HTML tags have to be opened and closed, or that if you spell something wrong, the computer won’t be able to run your code, you can’t forget these things. Through your experience in programming you’ve picked up the fundamentals, but a beginner is missing these important ingredients.

This is perhaps my biggest concern: the basic principles of coding languages and how they work are missing from Codecademy’s lessons. Until you get a feel for how code behaves, you’re going to have trouble writing it – and even more trouble fixing it when you make a mistake.

Code errors are not helpful enough

The Codecademy console has a great feature to help you find mistakes. Next to each line of code, you’ll see a hazard icon if something’s wrong. This is really handy if your code won’t run but you don’t know why.

When you hover over the icon, you’ll get a short message about what the problem is. When it’s “Missing semicolon,” that’s easy enough to understand and fix. But when it says, “Expected an assignment or function call and instead saw an expression,” that’s not much help to a newbie. It’s better than nothing, which is what was offered when I first started using the site, but still not enough to be useful.

If you try to run your code and it doesn’t work, you will get an error message from the console as well, but it will be something like this: “It looks like you didn’t run ten. Try again.” Helpful, huh?

This is probably the point where you’re saying that to be a good programmer you need to be good at problem-solving, right? Unfortunately, we’ve hit on that a smidge too early. Remember, we’re dealing with beginners who have no understanding apart from what they’ve covered so far in the Codecademy lessons. And without a solid understanding of the language’s foundations, there are no reference points to work with when it comes to troubleshooting.

There are no standard reference points

Yes, I’m still harping on about the foundations of the language. Imagine you don’t understand for loops properly. Now, how far are you going to get with JavaScript without those?

We’ve already established the trouble with learning the foundations – this gets even more difficult once you get into the lessons where you need to implement them.

Since each lesson that you complete assumes that you understand what you’ve ‘learned,’ there’s no easy way to go back and check how to do something (although apparently this is a feature that’s coming). If you can remember which lesson explains it, you’ll find it eventually – after some digging around. It’s certainly not the ideal way to double-check what you’re doing, though.

Lesson quality is inconsistent

The lessons and courses included on Codecademy are written by various people – crowd input is what keeps the site going. The issue with this, however, is the difference in the quality between lessons.

In several lessons I noticed grammatical errors or ambiguity in explanations, lack of clear instructions about the requirement of lessons, lack of clear explanation of how and why each foundational part of the coding language would be used, and incorrect code being passed by the console.

This last point is one of the more frustrating aspects – to have your code passed so you can move on to the next lesson even though the console is producing an error message is frustrating for those who hope to learn coding skills that they can actually use.

Navigating the site is difficult and confusing

It’s not hard to find your way to a lesson of some kind within Codecademy, but following a linear progression can be quite difficult. Lessons have multiple entrance points, so you can end up in a section far beyond your current skill set by mistake. Of course, this leads to frustration when you’re asked to use parts of the language you haven’t been introduced to yet.

To make matters worse, the home page looks the same for everyone – even when you’re logged in. Apart from seeing your name and a small avatar at the top of the screen, you’re still greeted with a ‘get started’ button and an introductory lesson. You can bypass this intro lesson by clicking on the Learn button or your name, but each of these options takes you inside the site from a difference angle, adding to the confusion.

Providing a clear hub or menu for logged in users to navigate from and monitor their progress would make this much simpler.

It’s great to let people skip around and do just the parts they want to – especially if developers are using the service as a refresher course. But if Codecademy is really going after beginners who are new to programming, this is something that has to change.

The support solution isn’t working

My last major concern: the difficulty in fixing problems with your code. The team at Codecademy has implemented a Q&A forum in an attempt to help with coding issues. Sadly, this is not the solution we need. Unless you’re happy to simply paste your incorrect code into the forum and wait for someone to fix it for you, this is near useless. And unless that’s what you call learning, I’d say this ‘solution’ is really missing the point.

By having someone fix your code, you’re not learning to work it out for yourself.

Ah, but if you’ve been following along, you’ll remember that I mentioned troubleshooting being near impossible anyway. Without a strong understanding of the foundations of the language you’re learning, how can you possibly troubleshoot issues? What’s needed here is guidance towards identifying the errors in your code, but not a complete fix.

Unfortunately, a peer support forum doesn’t work this way. And while the emergence of an entire Subreddit dedicated to Codecademy points out the ineffectiveness of this Q&A forum, it doesn’t solve the problem, either.

In an attempt to use the resources available to get what I needed, I tried to glean some insight from the code that had already been corrected in the Q&A forum. Unfortunately, this confused me even more, as many users (who I suspect are actually coders who are brushing up or adding a new language to their repertoire) had used different coding methods than those explained in the lesson.

After giving up on this method of problem-solving, I tried grabbing a correctly coded answer from the forum and pasting it into the console to compare the result to my own error-riddled code. After no less than eight attempts to complete the lesson with corrected code, my browser had unfailingly crashed every time and I gave up completely (which also points to the general bugginess of the lessons – try googling “Codecademy is” and see how many times ‘buggy’ appears in the search results).

What needs to happen now?

The web needs Codecademy and other sites like it. Coding is an important skill for anyone who works on the web to have, and the easier (and more fun) it can be to learn, the better.

The team at Codecademy have identified a great way to introduce new users to coding languages by making it easy to get started, social and fun. Unfortunately they’ve hit on something we in the Attendly office like to call, “Great idea! Execution? Not so much.