I've been helping people learn coding for a while now. Here are some notes.
- there's a lot of free resources out there
- nearly all of them are of poor quality
- it's very difficult to make good resources for make resources for someone very different than you - and by the time you can write a tutorial you're long past beginner phase
- very often resources spend far too much time on pointless distractions, have huge difficulty spikes, present material in order where current lesson depends on something that will only be explained in the future etc. It's clear they're not adequately tested on actual beginners.
How to learn coding
- stay in-browser as much as possible
- learn basics of HTML and CSS
- learn basics of jQuery
- only then progress to anything else
If you start by teaching people ruby or python, the best they can do is some completely artificial terminal programs like guess-a-number or such.
Even if someone needs to learn ruby/python, the best way is to first teach them web technologies, and then thanks to some framework like Ruby on Rails they can build something useful.
ToolsA lot of resources try to teach beginners how to use terminals, text editors like Atom, git, github etc. before they get to any coding. Crazy ones even try things like vim.
It's mindboggling why anybody would consider it appropriate to start with this. It's a massive distraction from the goal of learning programming and writing useful programs.
Fortunately there's a powerful environment even absolute beginners are comfortable with, and that's the browser.
- repl.it - run simple program and repls in almost every programming language
- most online courses have in-browser editors and tests
For people who use OSX, going off-browser is tolerable, but for people with Windows laptops that's huge amount of pain, so it's especially important to stay in-browser as much as possible.
Free resources reviews for web development
- freecodecamp - this is the best beginner resource for web technologies I found - it covers a lot of content, it's well structured, and contains low amount of nonsense; there's a bunch of stuff that's "coming soon"
- codecademy - it has a lot of content (web and non-web), but a lot of it has serious issues like random difficulty spikes and chapters with poor explanations
- codebar tutorials - they're OK, but they suffer from having to download files and do everything locally - I found that in-browser lets beginners focus on the subject much better and be less confused by tooling
Free resources for non-web development
- ruby in 100 minutes - it seems to take people about twice as much. Whenever anyone wants to do it, I generally tell them to go chapters 2, 3, 5, 7, 8, 6, 9, 1 0, 11 and use repl.it.
- Learn Ruby the Hard Way - I don't like this book, as it teaches Ruby as if it was Python, which feels like it completely misses the point.
- codewars - good practice for intermediate level if you set the filters correctly (8kyu only, unsolved only, sort by popularity), as the defaults are completely wrong for beginners. It's much more useful for people who can already program and simply want practice in new language.
- try ruby - a nice in-browser introduction. It suffers from minor distractions like symbols (I wish ruby just killed them completely) and ruby 1.9 leftovers.
- udacity - I've been generally rather unhappy with quality of that, and they completely ignore all reported errors
- books - just not worth it for beginners - in-browser environment and immediate feedback are just far superior
- everything that you need to download to solve like rubykatas, exercism etc. - they're ok, but best left for later
Free resources for tools
- stay in browser as much as possible - that's what everybody already knows
- browser's development tools - this is generally fairly straightforward progression from basic browser skills everybody already has
- codepen.io - far easier to get started than creating a bunch of files and keeping them synchronized etc.
- repl.it - this should be deafult repl, not any kind of in-terminal irb/ipython/etc.
- Atom - from what I've seen beginners have little trouble with it, unlike with some complex editors. It has ton of plugins, works on everything, and it's perfectly adequate for serious programming as well.
- github - the browser side of it is reasonably approachable, terminal side much less so, and I'm not sure if there are any good client-side programs to make it easier.
- github.io hosting - to keep people's motivations
- terminal basics - it's fairly painful, and I wish Atom did more of it, so terminal would be needed less.
- git basics - it really pains me, as this is extremely unfriendly towards beginners, but there's no alternative, and at some point they'll need to learn it - at least there's immediate payoff in github and github.io.