My favourite free resources for learning how to code 
Tags: codenewbie, resources, learning
Published: 2021-08-13 18:45:20

Since switching careers from politics to software engineering, some people have asked me how I learnt to code. At some point I noticed that I just kept repeating myself, so I've decided to write it all down.

## Getting started
Before diving into it at the time, I did some quick research on what you actually need to learn to become a developer. For the web, the answer was pretty much **HTML, CSS and JavaScript**. So that is what I started with.

- [Khan Academy](https://www.khanacademy.org/computing) - I went over the AP/College Computer Science Principles section to learn more about the foundations of computer science and programming.
- [Codecademy](https://www.codecademy.com/) - I took the HTML, CSS and JavaScript courses. Their explanations are quite clear and they generally try to visualise where they can.
- [SoloLearn](https://www.sololearn.com/) - A learning platform with bitesized lessons, little quizzes and challenges for all kinds of languages. You can collect points and level up as you complete more lessons. There is a web and app version. I used the app on the go to revise my knowledge of HTML, CSS and JavaScript.
- [freeCodeCamp](https://www.freecodecamp.org/) - I did the Responsive Web Design certification, and most of the JavaScript Algorithms and Data Structures section. Don't feel intimidated if you're just starting out. It took me some time to solve my very first algorithmic challenge. If you get stuck, the best thing to do is to take a break, and then write down what you want to do and break it into little steps on a piece of paper. Talking it through with another person is also really helpful. FreeCodeCamp also has an active [YouTube channel](https://www.youtube.com/channel/UC8butISFwT-Wl7EV0hUK0BQ) and a [Discord server](https://discord.gg/KVUmVXA) that you can join.
- [The Odin Project](https://www.theodinproject.com/) - This is my favourite. I started with The Odin Project after having spent some time on Codecademy and freeCodeCamp, but it eventually became my main resource. It's a open source curriculum for learning fullstack development with JavaScript or Ruby on the backend. The Odin Project requires you to set up your own environment, which can feel daunting at first, but it's a great step towards coding your first project :) They also have an active [Discord server](https://discord.com/invite/fbFCkYabZB) where you can find study buddies and share your progress with fellow learners.

Whilst these were the main resources I've used to get started and returned to throughout, there are many more websites that I found very helpful.

### For CSS 

- [Flexbox Froggy](https://flexboxfroggy.com/) - A game for learning Flexbox
- [Grid Garden](https://cssgridgarden.com/) - A game for learning CSS Grid
- [CSS Tricks](https://css-tricks.com/) - A great resource for more in-depth information and helpful tricks
- [MDN Dev Docs - CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) - Also a great reference, but not as visual as CSS Tricks
- [Frontend Mentor](https://www.frontendmentor.io/) - Website for frontend challenges. They provide you with the requirements and images if needed and you try to code the project as best as you can. Once you submit your solution, the community can provide you with feedback. You can also comment on other people's solutions. I used one of the free challenges to practice my CSS skills.

### For JavaScript
- [Wes Bos JavaScript 30](https://javascript30.com/) - Thirty fun little projects to learn JavaScript
- [JavaScript.info](https://javascript.info/) - JavaScript tutorials that I used for some topics
- [Traversy Media](https://www.youtube.com/channel/UC29ju8bIPH5as8OGnQzwJyA) - YouTube channel with lots of great intros
- [Dev Ed](https://www.youtube.com/channel/UClb90NQQcskPUGDIXsQEz5Q) - Another great YouTube channel 
- [Web Dev Simplified](https://www.youtube.com/channel/UCFbNIlppjAuEX4znoulh0Cw) - Aaand another one (on YouTube)
- [Code with Ania Kubów](https://www.youtube.com/channel/UC5DNytAJ6_FISueUfzZCVsw) - Aaand another one (seriously YouTube is amazing for learning). Ania has lots of tutorials for coding cool games like Mario with JavaScript.
- [Eloquent JavaScript](https://eloquentjavascript.net/) - A well-written book about JavaScript with helpful exercises
- [You don't know JS](https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/README.md) - A book series to learn more about the weird parts of JavaScript
- [Node School](https://nodeschool.io/#workshoppers) - Tutorials for learning Node.js (JavaScript on the backend). If you get stuck, you can consult this [unofficial guide](https://joecreager.com/learnyounode-unofficial-companion/) for explanations.
- [MDN Dev Docs - JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) - For reference

### For Coding Challenges
- [CodeWars](https://www.codewars.com/) - Fun way to practice your JavaScript skills. You start at level 8kyu and work your way up to 1kyu as you solve coding challenges and gain points. You can filter challenges by languages and difficulty level. Make sure not to rush through it, but take time to understand why your solution works (or doesn't work). After you've solved a challenge, you can view other people's solutions. Comparing solutions is very helpful in understanding what works and what doesn't. Be careful not to confuse the highest voted or shortest solution with the best one. Pairing on challenges and discussing solutions can be very helpful here. Or [finding a mentor](https://blog.jingjinghu.com/free-mentoring-platforms-for-developers-and-designers).

There are many more code challenge websites out there like [CoderByte](https://www.coderbyte.com/), [HackerRank](https://www.hackerrank.com/dashboard), [LeetCode](https://leetcode.com/), and [Exercism](https://exercism.io/), but I started with CodeWars and somehow it just stuck.

### For Computer Science
- [Harvard's CS50 Intro to Computer Science](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x) - I started with this one, but never finished it. The lecturer is great though, and there are several specialisation courses you can take afterwards if you're more of a university-style learner. 
- [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) - I did the first six sections or so with a particular focus on the command line (don't worry if this doesn't tell you anything right now, but if you want to find out more, you can read about it [here](https://developer.mozilla.org/en-US/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Command_line)) . This is also where I learnt what I currently know about vim (including how to exit it :D). Vim is a code editor that you can navigate using your keyboard only. Some people love it, some hate it, because it's not necessarily very intuitive for everyone... that's why there are jokes about not being able to exit vim :P
- [BashCrawl](https://gitlab.com/slackermedia/bashcrawl) - A game to learn how to use the command line. Not technically a Computer Science course, but can be used in conjunction with the previous course to practice your command line skills. You need to know how to clone a repository for this one, which you can learn as part of [The Odin Project](https://www.theodinproject.com/paths/foundations/courses/foundations/lessons/git-basics).

For entire curricula, you can take a look at [Open Source Society University](https://github.com/ossu/computer-science) (mostly online courses) or [Teach Yourself Computer Science](https://teachyourselfcs.com/) (mostly books). I haven't gone through them yet, but I think they serve as a nice reference.

### Free Bootcamps
Technically, not all of the below are resources I've used, but since some people have asked me about being self-taught vs. going to a bootcamp, I thought I'd list some free bootcamps I know. While App Academy for example is technically a paid bootcamp, their curriculum is freely available online and can give you a sense of whether you'd like to attend a bootcamp or not.

- [Full Stack Open](https://fullstackopen.com/en/) - A fullstack course by the University of Helsinki. The content is the same as the one taught at their Department of Computer Science. If you follow the timeline and complete the course, including exercises, you can earn a certificate. Finnish participants are also guaranteed interviews with the programme's corporate partners. 
- [App Academy Open](https://open.appacademy.io/) - Uses the same resources as the paid content, but with less support (without live lectures, graded assessments, etc.)
- [Rithm School](https://www.rithmschool.com/courses) - Free courses by a paid bootcamp.
- [Front-End Foxes](https://frontendfoxes.school/) - For women, by women. 
- [Class Central](https://www.classcentral.com/report/webdev-bootcamp/) - Free, online and open to all. Structured around freeCodeCamp's web development certification.
- [Codebar](http://tutorials.codebar.io/) - Not technically a bootcamp, but the community holds regular workshops and also has an active [Slack channel](https://slack.codebar.io/) and [Discord server](https://discord.com/invite/fwjmg2k).
- [Founders & Coders](https://www.foundersandcoders.com/) - Non-profit in London. You need to do quite some pre-work to apply, but I've only heard good things about it so far. I went to some of their open sessions to do some of the pre-work with others. During the pandemic, their cohort was online. I think they're back to in-person cohorts but I thought I'd list them anyways.
- [Open Classrooms](https://openclassrooms.com/en/) - Distance learning platform registered with the Board of Education in Paris. They offer a lot of free courses in English and French as well as paid training programmes in web development.  

### For more resources
- [Hackr.io](https://hackr.io/) - You can find both paid and free resources for all kinds of languages on here, including JavaScript. 
- [Bento](https://bento.io/tracks) - Learning paths for different topics, including JavaScript.

That's it. I hope this list is helpful for at least some of you. If you're completely new to coding, I would suggest focusing on one resource first and consulting others as you try to learn more. Jumping between websites can actually be quite distracting, or at least it was for me. 

Also remember that you don't need to know it all. As someone who's now working as a developer, I can tell you that there's a lot I learnt during my self-studies that I don't actively use at work, and a lot that I only learnt on the job. So the best strategy in my eyes is still to get the fundamentals right, build some projects, and then apply for jobs, so you can start learning by doing as soon as possible. That way, you'll find out sooner what you want to focus on, as there is simply too much for one person to know it all. 

So happy learning! You can do it! 💪🏼

<sub>Cover image by <a href="https://unsplash.com/@aaronburden?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Aaron Burden</a> on <a href="https://unsplash.com/s/photos/books?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a></sub>