I finally have my freeCodeCamp Full Stack certification. It was a long journey, and I’d like to talk a bit about my experience, hoping it will inspire someone!
How long did it take?
About a year and two months overall, about 9 months concentrated. Worked through Responsive Web Design and Javascript from about August to late October last year. Then took a break for University classes until about May. Thanks to the lockdown, had a lot of time during the summer to finish the course. Worked through roughly one course a month:
August 2019 - Responsive Web Design
September 2019 and October 2019 - Javascript Algorithms and Data Structures
May 2020 - Front End Libraries
June 2020 - Data Visualization
July 2020 - APIs and Microservices
August 2020 - Quality Assurance
September 2020 - Information Security
My Thoughts on the Challenges
Most Fun Challenges
- Basic Algorithm Scripting & Intermediate Algorithm Scripting - Loved being able to work through various problem using logic!
- React and Redux - Was really fun to bring together what I learnt to build the Messaging UI
- Advanced Node and Express (second part) - Was really fun building a functional chat app using Socket!
Most Boring Challenges
- CSS Grid - I remember just wanting this to end!
- Data Visualization with d3 - I really just wasn’t interested in charts and shapes
- Regular Expressions - felt really long and stretched
- Managing Packages with npm - Useful, just not that interesting
- Quality Assurance and Testing with Chai - Mostly just copying and pasting changing variable names.
Easiest Challenges
- Managing Packages with NPM
- Information Security with Helmet
Most Difficult Challenges
- Basic HTML and HTML5 - These are quite tough when starting out
- Basic JavaScript - Again very difficult with no prior experience
- Object Oriented Programming - I remember really struggling with this. There was lots of information, and it was difficult to make sense of everything.
- Advanced Node and Express - The challenges themselves are poorly implemented and full of bugs, so you’ll find yourself being confused a lot and having to copy and paste solutions. It also doesn’t help that Passport has really poor documentation that doesn’t explain well.
Most Useful Challenges
- Basic HTML and HTML5 - can’t go anywhere without these.
- Basic CSS - All the basics needed for presenting documents how you want.
- Responsive Web Design Principles - This one is really useful for porting sites for different display sizes, the media queries was a game changer!
- CSS Flexbox - I love this technology so much. I almost always use it for every project because it’s easy to design centered and responsive layouts.
- Basic JavaScript
- ES6 - The extra functions aren’t so useful, but the syntax parts are really relevant when looking at and understanding different code.
- Basic and Intermediate Algorithm Scripting - These introduce us to thinking through various problems and solve them using code. These are often used for interviews.
- Basic Data Structures - Very Important Introduction to Arrays and Objects
- Functional Programming - I personally found the array stuff really useful, especially in the later parts when working with data from APIs.
- React - Essential part of the MERN Stack! React is heavily used throughout applications, and also allowed me to transform easily into React Native to build mobile apps.
- jQuery - Used a lot in various front ends. Even if you don’t plan to use it yourself, it’s important to understand the code and what is happening.
- BootStrap - Again, widely used. I personally am not a fan, but it’s important to know it.
- JSON APIs and AJAX - The core concepts of dealing with APIs which you will need a lot throughout your career. Introduces you to JSON format which is used all the time for storing and exchanging information.
- Basic Node and Express - Essential part of the MERN Stack! This set of challenges is a nice introduction to express and setting up routes. Probably one of the most useful parts of freeCodeCamp. Challenges are explained really well here too!
- MongoDB and Mongoose - Essential part of MERN Stack! This is a really good, introduction to the core concepts of MongoDB documents. I felt quite confident after this one. Also really liked the inclusion of Mongoose, the cleaner syntax and simplicity of using Models made it so much easier for a beginner.
Least Useful Challenges
- Applied Visual Design - Useful at the start, but I find myself hardly using the stuff here after learning the newer libraries, and most of the stuff taught here can be found with a quick google search.
- CSS Grid - Just my personal preference! I tend to use flexbox a lot more.
- Regular Expressions - I personally just prefer to use Google or Stack Overflow for Regex, not worth remembering this stuff.
- Sass - Don’t find myself using this much
- Redux - Don’t find myself using this much
- Data Visualization with D3 - I think this one is very specific to be useful for general web development
-
Quality Assurance and Testing with Chai -
I don’t find myself using this much either. I tend to just use JavaScript methods and operators to check things.Might actually be very important in the workplace though!
My Thoughts on the Projects
Most Fun Projects
- Build a Tribute Page - This was so exciting as it was the first opportunity to apply what I learned and create a product
- Palindrome Checker , Caesar’s Cipher , Cash Register - I really liked the problem solving contexts of these projects. They were a good challenge!
- Random Quote Machine , Markdown Previewe r - I liked that we had the freedom to pick and choose any technologies we learnt to create these. These also felt like proper complete apps with functionality.
- Pomodoro Timer - Really liked the product of this, and actually use it myself!
- Visualize Data with a Choropleth Map - This one looked really cool when finished!
- Exercise Tracker - Was fun putting together an express application with a UI.
Most Boring Projects
- Build a Technical Documentation Page
- Telephone Number Validator - Basically just building a Regex.
- Visualize Data with a Treemap Diagram - The d3 projects felt very repetitive by this stage.
- File Metadata Microservice - Don’t feel like I learnt much here, feels very short, should have been a challenge.
- Metric-Imperial Converter - I felt like the there was way too much testing here, and it got boring and tedious.
Easiest Projects
- File Metadata Microservice
- Request Header Parser Microservice - Literally just returning data from a request header, could have been done in a challenge
Hardest Projects
- Build a Tribute Page - The image resizing part was hard!
- Roman Numeral Converter
- Javascript Calculator - It was really difficult figuring out the calculation functionality!
- Visualize Data with a Choropleth Map - Impossible to do with just the curriculum. Requires searching and figuring out how to work with GeoJSON and TopoJSON.
- Exercise Tracker
- Sudoku Solver - Coming up the algorithm to solve sudoku puzzles is really difficult.
- Stock Price Checker - This requires multiply async calls to databases and other APIs so it was difficult to make code execute in a specific order.
- Anonymous Message Board - Took a really long time to complete, and had to write the tests myself.
Most Useful Projects
- Build a Tribute Page - First Website!
- Cash Registe r - Experience building a complex function.
- Front End Libraries Projects - Experience and Practice with React.
- Markdown Previewer - First time importing and using an external JavaScript library and functions.
- Timestamp Microservice - First experience writing an API.
- Exercise Tracker - First functional express app with a UI.
- Issue Tracker , Personal Library - More experience building complete express apps, with MongoDB database.
- Anonymous Message Board - Express app of large scale with lots of features.
Least Useful Projects
- File Metadata Microservice
- D3 Projects - Unless you’re going into data visualization.
Resources I found most Useful
Not a complete list, just what I remember off the top of my head.
W3 Schools
This is a great reference for most HTML and JS Functions. You can see what different methods do, and get a refresher on their usage.
W3Schools Online Web Tutorials
Mozilla Developer Network
Another site for a quick reference on various data structures and functions. This one goes into a bit more detail.
Web Dev Simplified
I love this channel. You can see how various technologies, such as passport, work with very simple examples. There’s also some great refresher videos for things like CSS Grid and Flexbox.
Regex101
Some of the challenges require writing complex Regular Expressions. This site allows you to write expressions, and get explained exactly what they are trying to match. You can add in some text and it will highlight the matches.
Express Docs
Pretty much everything you need for express help.
Alternative Passport Docs
For the passport challenges, I didn’t find the official docs so useful. These docs on GitHub explain what each function is doing quite well.
Mongoose Docs
Great Reference for Mongoose.
Best Ways to Learn
Build a Side Project
Each time you learn a technology, think about where you can apply it. Practice outside the FCC course. Try and build something of your own with each technology, something you’ve always wanted to do. Don’t worry about getting stuck, there’s plenty of places to ask for help online. Not having a set of guidelines and objectives will give you practice at making decisions yourself, considering things from a user’s perspective. You are also more likely to stay motivated if it’s something you’re interested in.
Understand Each Line of Code before Moving On
In each challenge, make sure you understand exactly what each line of code is doing. If it’s not explained, look it up, find examples and understand. There’s nothing stopping you doing your own research!
Make your Own Notes
While there are lots of well written documentations, if you truly understand something, you can translate it into natural language you understand. Maybe write a paragraph or so for each challenge about what you learnt and what the solution code does.
BEST - Make Notes for Other People
This is something I started doing halfway through. It’s related to the Feynman technique, where you should be able to explain to other people things you have learnt. For this, I created written and video tutorials for each challenge and project and I published them. This is a great technique, as it holds you accountable for the information you post which requires you to ensure you have understood it fully.
There’s a great essay about it here:
Learn In Public: The fastest way to learn
In addition to this, it also provides a demonstration to future employers about the way you work through problems and builds and demonstrates your communication skills.
The main disadvantage to this, is the fact that it is time consuming.
You can find the Written and Video Tutorials I made for each challenge and project from D3 onwards here:
Transferrable Skills I learned on the freeCodeCamp course
Problem Solving
Each Project (and some challenges) is essentially a problem, described by Tests or User Stories. I broke these problems down, understanding what is required, found the appropriate help or resources and come up with solutions (the project app/website).
This ability to solve complex problems will be required throughout my career and personal life. I’ll be expected to come up with solutions either to implement features or fix bugs. In my personal life, it would benefit me greatly to take a logical approach to solving the problems I encounter.
Perseverance
Throughout this course, I faced many obstacles that required perseverance. It was frustrating to find the motivation to keep trying different solutions. Initially I found myself giving up temporarily, but later on I was able to stay calm and not let the multiple failures affect my thinking. I broke down the problems and tackled them using logic, making small changes each time, until I eventually got the results.
I know for a fact that I will be using this skill throughout my career. Firstly, when applying for my first job I will need to make sure I don’t give up after the first few rejections. I will use my perseverance skills to keep applying with enthusiasm until it eventually works out. Secondly, when working in the industry, I will need to make sure I stay resilient when debugging code.
Autonomy
This was one of the hardest skills to master. Most of the challenges and projects, I would have to tackle alone, without motivation, since I didn’t know anyone IRL on the same course. I sought help from the forums whenever I could, but there were certain instances where only I could understand the logic of the code I had written to figure out the problem. I had to build up the ability to independently debug and find solutions without relying on others.
This skill will be critical for my future career, since there is likely no guided course or path to learn the specific set of technologies I want. Therefore, I would have to become self-taught in a lot of frameworks without guidance or supervision, and I feel like this course has helped me practice this. In the bigger picture I think this skill will help me to become less dependent on others throughout my life.
Essential Skills You Won’t Learn on freeCodeCamp Course (for now)
Version Control
Using Version Control software like Git and GitHub isn’t something taught on the course. But there’s plenty of articles and tutorials, especially on the freeCodeCamp News and Youtube Channel. It’s important to learn about branches, commits and pull requests, and version control software is incredibly useful once you get to know it.
Working in a Team
Unless you collaborate with a partner on the projects, you are likely to complete these individually. When working in a team you’ll have to adhere to certain standards and principles, especially in terms of code organisation and syntax.
Important Things to Note
It’s good to have an understanding of basic CS first
I started doing FCC after doing the first year of a University Computer Science course. Knowing the fundamentals, such as data types and structures does help a lot. This isn’t an option for everyone, but I would highly recommend doing something like CS50 or watching some basic CS Videos on YouTube. Javascript is quite nice because we don’t have to worry about things like memory, but it’s always nice to know what’s happening underneath.
Take a Break
It’s very difficult and inefficient to work if you’re bored or burnt out. Take a break, do something else for a while. You know how long you need.
Find Some Motivation
You can follow pages and Youtube Channels of other coders and see the projects they are working on to get some Motivation. Day in the Life of Software Engineer videos are also great inspiration.
Or Create It
Action can lead to Motivation. Try and set a small achievable goal to get you started, and this can often lead to continued work.
Don’t Compare yourself to Others
This is something I struggle with all the time. I see other developers on places like Twitter posting about their achievements and this makes me feel like I’m not good enough. It’s important to know that most people only post their achievements, and that you are often comparing the average you to the best of them. Also realize that they’ve probably been coding a lot longer than you. If you take the context in to account it’s far more inspirational.
freeCodeCamp by itself is not enough.
It’s a good thing. You will have to read and research documentations, and get help. This is the same for the industry.
I’d like to Thank
The freeCodeCamp Team
It’s amazing that a group of volunteers have put together a resource and curriculum to learn a full stack of coding skills in your browser for completely free!
Quincy Larson
For founding this organisation. Also loved reading his newsletter which gave me a motivation boost each week.
freeCodeCamp Podcast Team
Was really inspiring to hear talks about various people and their experiences. Knowing what others achieved helps you to realise your potential.
freeCodeCamp Forum Mods
For maintaining a great community to find answers and get help and encouragement. Always see them jumping in and helping, giving really good answers too.
freeCodeCamp Forum Users
For helping me out when I got stuck and to understand stuff.
Family and Friends
For Motivation, Encouragement and Support!