Have you ever felt like you would like to get better at programming, maybe even get a position involving more programming some day but the fact that you currently don’t really need it at your current position seems to hold you back? This post is for you.
Daily practice is key for improvement
You need daily practice if you actually want to improve. You already need daily practice just to keep your skills sharp during a time where you don’t need to use them. Also, if you don’t even have programming skills yet, you probably are too tired after work to sit down and work on a private programming project.
But you should. Programming is a skill which takes a long time to learn. That is, if you want to reach a decent skill level. This means that you have to start regular practice long before you actually need that skill or need to apply for a job, if possible.
The common advice: Find a starting out project to program in your free time
When I first informed myself on this, the most common advice was to find a cool project and try to program it in your free time. But I found that when you don’t have an idea for such a project which makes complete sense to you, you’re not going to go through with it. Without an acutal, urgent need you probably won’t sit down the amount of hours necessary to actually make progress. At least the great majority of people wouldn’t.
Then I tried setting myself mini-challenges. This was a good idea. But there wasn’t a lot of guidance (obviously). This, in return, was discouraging and wasted a lot of time. Of course, time well spent learning something. But since I am really interested in effective learning, I felt that I was wasting time. Effective learning is always better than just playing around. You need curriculum. At least some. That’s when I found out that there are a lot of competitive programming sites which offer useful short exercises where you can do one per day.
Before that, I had tried all sorts of “Learn programing” sites like SoloLearn, freeCodeCamp, the Enki app, just to name a few of my favourites. But really, I didn’t like them all that much. They went through the syntax of the language and that was it. Like learning the vocabulary of a living language but never using it.
Review of some of the materials out there
Here, I want to share links to all sorts of learn coding sites out there. Of course, it’s not extensive but I think it does cover a good few of the most important ones. And maybe has a bit of a different perspective from most other “here are 30 sites to learn coding for free” blog posts out there.
A constraint for me was that the site had to be completely free of charge. So, for example, DataCamp is a no-go. Although, I have still linked to some pay-sites in case you are interested.
But especially as there are so many pages where you can get a similar service for free, I don’t see why I should pay for one of them, when there are so many alternatives available. If it were really brilliant, I would probably pay for it, in theory. Like HackerRank, I like so much at the moment, that I would probably get access for a one-time payment. But most of those apps and sites ask for monthly payment of up to or even starting at 10€ – that is a crazy amount of money and you already get books starting from 10€. I personally would always put more trust in a book in terms of quality and the hope that there might be a logical progression to the teaching; and thus, rather go for that. Also, I just don’t do monthly subscriptions. They eat so much of your money and mostly, when you sum it all up, are not really worth it.
Also, the amount of sites (plus all the apps!) out there has become so huge, it’s really a full-time job to check them all. That time might be better invested in just picking one and learning to code. These other sites that I found initially focused more on interview prep for experienced programmers or programming contests, but many of them have actually developped training tracks. They also tend to offer a broader range of subjects than many other very popular sites which focus on web development (“coding”) mainly.
I had liked the Enki apps daily workouts, but the learning progression was not stable. They give you a random tutorial every day. This was not very effective and I quickly was through with all of their material. Ergo, the workouts started repeating very quickly. For more, you would now have to pay monthly for access which I am not willing to do since learning-wise, it is not sooo well done. It was really good for a free site (for a while I used it a lot), but not good enough to be paying for it. Sadly, I have experienced this with most of the sites I have tried (and I have tried quite many).
App-wise, you will just get the Enki review here. I tried probably all the most important apps out there. But mostly, in their way of just explaining the syntax of a language, the progress was slow and it was ineffective for me who already knew most of the syntax. You usually can’t skip much or speed up if you’re getting bored. Still you never get any actual programming done which I found both useless and frustrating. Having tried all the apps and “learn the syntax of XY” (disguised as “Learn programming language XY” which is not the same thing, in my opinion), I now found competitive programming sites to be more what I had been looking for.
Some of them don’t have all the languages you might want, especially the smaller ones and the web dev focused ones.
General-purpose learning sites (video-based, MOOCs, etc.)
Many popular sites (Coursera, Udemy, Udacity, Khan Academy, MOOCS like edx, OpenMIT) are video-based and I don’t personally like that. I prefer interactive sites where you can type your code directly. But well, now you have the links to those resources as well.
Online books or blog tutorials
Even though I have a tutorial blog myself, I personally would not try to learn a programming language from a blog. Sometimes you find useful posts for a specific problem you need to solve, that’s mainly what they are good for. I just think that the available interactive things are cooler for actually getting programming experience as a novice programmer.
Youtube tutorials or channels
Some posts on free “learn coding” resources recommend Youtube tutorials or channels. This is, I think, a valid point if there really is an excellent tutorial video out for exactly what you want. So, if what you want isn’t uncommon, there is likely to be one. Sometimes a 5min video can save you an hour of reading a tutorial. But I find that hardly any channels offer sensible curriculum for a motivated learner, so I’m not sure how much you would get out of it in the long run. That’s why I won’t recommend any here.
Sites just/mostly teaching the syntax of languages
- DataCamp (paid, hardly any free trial)
- the Enki app
- https://www.w3schools.com/ for web stuff obviously, but definitely a go-to resource – since you get the info on the web directly from the source
Many of them are gamified as well
- https://vim-adventures.com/ really cool game to practice VIM but sadly, you can’t play very long for free
- https://www.shortcutfoo.com/ (practice shortcuts for VIM, emacs, Excel, etc.)
- non-free: https://www.playcodemonkey.com/
- CSS Diner: https://flukeout.github.io/
- CSS http://flexboxfroggy.com/#de & http://www.flexboxdefense.com/
- https://checkio.org/ JS + Python
Sites I really like for practice / or of the type I like (challenge-based)
Learn the language tracks are available on for example: HackerRank, HackerEarth (teaches algorithms).
With Hackerrank, for example, I really like their testcases. They don’t just ask you to write a solution on your own (sites like SoloLearn, Codecademy hardly do that in their regular curriculum), they also provide testcases where, for example, overflow is bound to occur. So with every single test you are reminded to remember that. This is a good reinforcment method in teaching, I think 😉 Also, have I mentioned that supposedly, the only thing which really works wonders in teaching is getting tested? So forget about what learning type you are (visual, audio-visual-bla, etc.) and become a tester. You can skip some of the testcases of course, but the frequent reminder still works wonders. Also, you can learn from other users good (high-ranked) solutions. Especially in algorithms, it’s really worth checking how more experienced programmers did it. However, these competitive programming platforms do kind of encourage bad programming style (and dirty hacks to improve speed), so be sure to take care of that yourselves. Be persistent disciplined when it comes to using good style! And remember to still work on bigger projects every once in a while, since the daily practice from these sites is just one single function without context.
- https://app.codesignal.com/ CodeFights has debugging challenges aswell.
- https://www.hackerrank.com/ (currently using this)
Learn Catch the Flag / Hacking
Also, if you’re interesed, these are some sites where you can learn CTF (catch the flag), something like competitive ethical hacking.
Other / Tutorial-based
More tutorial-based sites which are useful but not for the kind of rapid learning I recommend:
- http://try.github.io/ resources to learn git
- https://www.pluralsight.com/ apparently, Code School is supposed to be free but I am asked to make a monthly subscription which is expensive enough, so regrettably, I have never tried it. Albeit I wanted to because John Sonmez (whose Software Dev Career Guide I liked) recommends it. Sadly, even the “free trial” wants your payment data, and no, I’m not up for that. Sorry, Pluralsight. I feel quite offended, actually. What do you need my payment data for if it’s a free trial?! Fishy, I call this.
- Mozilla WebDev https://developer.mozilla.org/en-US/docs/Learn
- https://www.codeavengers.com/ More for children and teenagers, not for free (7 day trial)
- Google Web Fundamentals https://developers.google.com/web/fundamentals/
- https://teamtreehouse.com/ (videos but popular resource)
Also, check these other posts on free coding resources:
- I love this book: https://alignedleft.com/work/d3-book-2e Scott Murray, Interactive Data Visualization for the Web. It has great explanations of the CSS and HTML basics, so a complete beginner can do it. It’s generally quite beginner friendly (maybe a bit boring to the more proficient). But I will definitely use the intro part for my next CSS/HTML intro in class, since it really is this good.