If you are struggling with the FreeCodeCamp Intermediate Projects

P1xt
P1xt’s Blog
Published in
6 min readJul 3, 2017

--

I’d like to tell you a tale of some bullshit…

I had some time over the weekend so I decided to repeat an activity I do every so often just to keep my skills sharp — a sort of use it or lose it philosophy.

I am fond of what I like to call a “speedrun”. The basic concept is that you pick a set amount of time and pick an activity that you can’t possibly finish during that time, start a timer and then hyper-focus and try to do as much as you possibly can. (Healthily of course, sleep when you need to, eat well, work out, but tune out the “I’m just going to go look up and start this totally unrelated thing” nonsense).

For this weekend, my speedrun of choice was the FreeCodeCamp curriculum. I’ve done various speedruns before using the same material, it’s kind of nice to try a new take on old projects and see how you improve over time. The twist for this weekend is that instead of diving straight into the algorithms and projects, I went with a “start at the top and skip nothing” approach. It was a mistake.

I made decent progress, but no where near as much as I would have preferred. Wondering what tripped me up? One of the tougher algorithm problems? Nope? One of the “advanced” frontend projects? Nope.

How can a beginning programmer hope to learn anything by copy/pasting answers in order to “pass” challenges that involve concepts they don’t understand?

In a lesson that teaches you ABSOLUTELY nothing about the various methods by which you can retrieve data from an external API, the learner is given the EXACT code necessary to cut and paste into the code editor to “pass” the challenge.

That … complete answers that can be directly copied from the sidebar into the code editor without changing a single character (complete with a note indicating that it is the exact code you need) … that is what killed my momentum. It made me angry. Not angry for me, I didn’t need those lessons, I already know how to make HTTP requests using vanilla JavaScript, jQuery, and the HTTP and JSONP interfaces in Angular 4 (my web framework of choice). I wasn’t left hanging by learning nothing from the lessons. But I was left thinking “what about a beginner who’s expected to tackle projects that use external APIs right after this lesson”? How many days or weeks are they going to spend trying to learn this stuff when they don’t have the “we’re not going to actually teach you, just copy/paste this”, crutch to fall back on? It is a disservice to all of the motivated people, working their butts off to learn the material with the end goal of being competent web developers.

If the content is insufficient to teach the material necessary to complete the projects that follow, the reasonable, responsible, and ethical thing to do would be to mark that section “coming soon” and in it’s place propose alternate “off-site” material which actually teaches the concepts in depth. Not doing so wastes learners valuable time. The FCC forum is littered with “I’m lost” posts from people starting the Intermediate Frontend projects because the preceding section taught them next to none of the skills they need to be successful on those projects. If they’d been told “this was a brief intro, go read this book and watch this playlist to really get up to speed”, that’d be one thing. Instead, they’re left with the impression that they were taught what they needed to know and are stupid for not being able to figure out how to apply it. It’s ridiculous. And, it pisses me off.

Yeah “a winner is me”, I copied the code I was told to copy, and pasted it in where the comments in the code editor told me to paste it and hit the submit button. Lets diverge for a moment about what actually constitutes a “winner”. My outlook is that, in the domain of the goal of the typical beginning programmer on FreeCodeCamp, being a winner is measured by how much you’ve learned, what you can build with your newfound knowledge, how you can leverage your baseline skills to build even grander things, and how your eventual expertise can translate to actual readiness to do this “as a job”.

I clicked that “a winner is you” submit (or another one with a similarly “over-congratulations” for a simple monkey see — monkey do type task) 289 times during this week’s speedrun. 52 out of the 289 were for me actually using my knowledge of HTML/CSS/JavaScript to solve some problem, either an algorithm challenge or project challenge, where the answer wasn’t spelled out for me in a sidebar on the same page. That leaves 237 times I clicked past a meaningless popup, congratulating me for learning little, if anything. 237 reminders that learners are wasting the time spent on 237 lessons that don’t prepare them for the 52 exercises that actually matter.

237 times a beginner is told that they’re awesome, that they got it, that they will be prepared for what’s to come. 237 times that same beginner was lied to and duped into being exited and motivated to get to that next click of progress. 237 times that instead of a popup congratulating them for putting a single H2 tag on the page, they should have instead seen a popup reinforcing a legitimate, reliable source, detailing extra reading or extra courses or video that would help them learn the topic at hand in depth.

I stopped my 48 hour speedrun at 32 hours.

I’ll likely do another 48 hour speedrun in a few weeks. Next time, I’ll skip all the exercises and jump straight to the algorithms and projects. FreeCodeCamp is an awesome resource, as a blueprint of practice activities to reinforce what you already know. Having several dozen projects laid out for you to complete gives an amazing structure so you can get right to practicing on a variety of projects to reinforce your web development skills. The algorithms problems are a great way to get your feet wet with a beginner set of challenges before you move onto the “real deal” on hackerrank or codewars. But, the actual “lessons” that purport to teach the skills you’ll need to develop in order to tackle the projects and algorithms, are disrespectful of the time and effort of everyone who wastes their time on them. It would be far, far, more instructive and beneficial to learners if instead of having to be the “you can learn it all here on one site” grandiose facade, FCC just “got real” and did what was best for the learners and admitted that other resources cover the material more thoroughly and linked to those resources.

Also, just to wrap up my speedrun retrospective.

I highly recommend a “redo all the projects I’ve already done” speedrun for anyone and everyone. It’s very enlightening to see how you can now do in minutes, what once took you hours or days (a great source of meaningful motivation).

Also — the FCC code editor is utter crap on Chrome on Linux. You click in the editor, start typing, and the damn thing starts inputting whatever you’re typing wherever the hell it wants, except, of course, where you actually clicked. I had to use Firefox for the whole thing.

So — back to what you can do if you find yourself stuck

My whole point here wasn’t the big long rant about what’s wrong. My point is to let you know that if you were sailing along through the challenges, hit the intermediate projects and have no clue where to even start that: you are not stupid, it’s not your fault, and you were given insufficient information to tackle those projects.

I know I go on all the time about YDKJS, but this time it’s really important and is just the resource that will elevate your understanding to the point that you at least know where to start.

YDKJS: Async & Performance — will explain how asynchronous JavaScript works. Knowing that is the foundation upon which making calls to external resources (like you’ll need to do to fetch from APIs for all of the intermediate projects) is built.

For the “I like to see it in action” crowd:

This Net Ninja Async playist on Youtube isn’t quite as comprehensive, but gives a great overview of the major topics so you at least know the basics and the terminology and can hit YDKJS for the nitty-gritty details.

Happy coding, all :D

--

--