Since that fateful day, the SLC JS Learners' group has grown to more than 600 members, so big that we’re actually merging into the UtahJS group, and I’ve gotten a lot of novices up and running! The following resources and tips are the things I most frequently share with my fellow learners.
It assumes absolutely no knowledge coming in.
It provides a linear progression from no knowledge to a portfolio of web applications.
It’s online nature lets you move as fast or slow as you want.
You can skip lessons and topics that you’re already familiar with.
The community provides phenomenal online support.
In late 2015, they did change the site design, making the skip process less intuitive. To skip lessons, open your "Map" and click on the lesson you would like to complete.
Another great resource for any novice and junior developer is Code Newbie. It’s more about the social and networking aspects of entering the programming world. They have a bunch of different things including a pretty active forum and a blog. They also do a weekly podcast, which is really good (but remember, if it comes down to listening to a podcast OR working through freeCodeCamp - CODE!) They also have a learning resources section, but it’s mostly bootcamps that require money or being on location for many consecutive weeks, or resources that simply aren’t as comprehensive, and learner-friendly as freeCodeCamp. (freeCodeCamp really is the best resource I’ve seen for learning in a guided, thorough, and progressive way!)
The goto Reference
goto, check out xkcd: goto.
Glimpse Under the Hood
The one big complaint I have about Free Code Camp, is that it doesn’t encourage deliberate practice. Once you have the basics down, I strongly encourage Learners to start working on code katas. The best site I’ve found for katas is Codewars.
My first recommendation is that when you do a kata, you spend almost as much time reviewing and understanding the other solutions as you do developing your own solution.
My second recommendation is that when you learn something new, whether it be through Free Code Camp, a previous kata, a personal project, or anywhere else, that you find related katas and work through one a day until you feel comfortable with that topic.
For example, I kept running into RegEx solutions in katas, but hadn’t really done a lot with RegEx up to that point. So I found a great online RegEx tutorial (RegexOne). After I finished it, I made a point to work through RegEx related katas, starting at 8kyu (even though I’m rated above that) and worked through one or two a day. In the course of that, I also noticed a lot of ES6 arrow functions in "Best Practice" solutions, so I started adding in more ES6 solutions. (I’m particularly proud of my "Unlimited Sum" solution.)
The Power of Peers
I’ll be posting a fuller article on this topic in the near future. For the time being, I’ll simply say that pair-programming, mentoring, and code reviews (e.g. via Codewars' solutions) are as important as more solo resources like the exercises, code katas, or reference materials.
Frustratingly, several times when I’ve shared this I’ve heard references to "competition is demotivating" (one example).
Pair-programming, mentoring, and reviews of common code absolutely should not be competitions! Among other things, they should be opportunities to communicate what a learner thinks they understand, to see alternative implementations, to deconstruct and figure out what they don’t understand, and ask questions of a fellow learner or mentor - all without judgment. Each of these activities augments learning in important ways.
If you are a learner and you sense competition or judgment from someone that you are pairing with, you should emphasize that you do not desire to competitively engage in these activities. If you can, provide specific examples of the undesirable behavior that you felt this person engaged in and discuss alternative ways to interact with one another. If your peer or mentor doesn’t understand this, or is incapable of accommodating this perspective - find someone else to work with!
Make sure to check Retail Me Not for current discounts (there’s almost always one!)
When you’re starting to feel confident in the basics and need a bit of a change of pace (your primary focus should still be on progressing through freeCodeCamp!) there are many great places to play and practice what you’re learning:
Framework of the Moment
I’ve had a lot of novices ask about editors. Developers tend to develop strong preferences, so you should be comfortable working with any editor. That said, here are some thoughts on editors.
Learn to Love Your Console
|One thing I’ve noticed about senior developers is the propensity to turn to their web console. It’s still something I’m working on, but if you can do something in the console, you should consider doing that instead of using a full-blown editor.|
This is my current go to editor. While it’s not open source, it does have a great ecosystem of modules. A license is $70, but it is worth noting that a license isn’t necessary for Sublime 2.
I haven’t used it yet, but a fellow JS developer I know has come to love it. I’ll get around to trying it one day, but if you’re just starting, this is probably a great place to start.
If you’re just starting to program, I don’t recommend starting with vim, but I have several senior friends that use it and are amazingly productive with it.
Simple Online Editors
- JS Bin
My favorite cloud editor for small programs.
If I’m going to have multiple files but it isn’t a full blown project, this is my go to cloud editor.
if you’re working on CSS, SVG, animations, or anything particularly visual, this is the place to play!
- JS Fiddle
Frequently used, but their most recent redesign makes it so hard to read that I go out of my way to avoid it now!
There’s also a Comparison of online source code playgrounds on Wikipedia.
If I’m working on a project with someone else and we want to work in the cloud, this is where I turn. The one caveat is that it currently does not support git branches, i.e. you can only edit the master branch.
Test-Driven Development is a wonderful thing, but as a novice it can be overwhelming. I encourage Learners' to start practicing TDD when they start working through CodeKata. It has it’s own flavor of TDD, but the principals will carry over to other TDD libraries. Writing your own tests for CodeKatas helps you work through the principals of TDD. When you think you might be ready to explore TDD, check out my post TDD for JS Learners.
GitHub vs GitLab
GitHub is the go-to for most open-source projects, but for personal projects I much prefer and strongly recommend, GitLab. Pretty much anything that GitHub does GitLab does, plus GitLab does a lot more (for example, allowing you to have private projects for free). The important caveat is that private projects on GitLab are, well, private. In other words, you won’t be building up a highly visible trail of code. If you’re looking for a job, then a trail of code is something that employers can reference, just like a portfolio.
DuckDuckGo (DDG) !bangs - I love DDG for many different reasons, one of which is their !bangs. !bangs are basically shortcuts for different sites, resource types, and a handful of other things. In a DDG search bar you can press "!" (without the quotes) and it will show you the most popular !bangs as well as a link to a very, very, very long list of all the available !bangs (did I mention they have a lot of !bangs!)
Why am I including this? Because there is a bang to search MDN - "
<search term/s> !js".
Not all those who wander are lost.
"All That is Gold Does Not Glitter"
If you look me up in both Free Code Camp and Codewars, you’ll notice that —despite my glowing review of Free Code Camp— I spend most of my "just learning and practicing" energy on Codewars' katas. So, despite everything I just shared, the most important things are that you (a) find your own path and (b) have fun on your own journey! Whether you want to beeline through something like Free Code Camp, or wonder through katas and documentation, or just explore documentation as you build your own personal projects —do what works for you— and as you learn more refactor your own path.
Hopefully this article helps you get rockin' and codin'!
Most importantly …