Recently I had the privilege of working with Quincy Larson, the founder of freeCodeCamp. If you don’t know, freeCodeCamp is one of the largest online learning platforms for people to learn to code. With over 2000 hours of free training, people are using freeCodeCamp to learn everything they need to get hired as software engineers or full stack developers. I talked to Quincy to figure out exactly what it takes to become a full stack web developer (this content was edited by me from a video interview and are not direct quotes, with my thoughts in gray).
Full stack web development is when you are in charge of the entire project rather than one particular piece. This means you must be fluent in both front end development and back end development.
What does it take to know the front end for full stack web development?
My opinion is that functionality always wins out over form. You don’t need to worry as much about making a page look aesthetically beautiful if you have a library like bootstrap that has some good defaults. You can focus on what components you want to show and what you want the user to be able to do. You can always bring in somebody with more design capabilities who can take a hard look at your CSS or create a custom look and feel for your site.
I would still recommend learning some design on your own. If you go through the freeCodeCamp curriculum you’ll absolutely learn to apply visual design, but we spend 95% of the time focusing on actual functionality over form.
What does it take to know the back end for full stack development?
Node.js can be profoundly fast and people have done benchmarks where the only thing outperforming Node.js are low level languages like C and C++. Not only is it a very fast, but it has the biggest package ecosystem in the world. Node.js is an incredible resource that is not only ideal for backend development, but is increasingly becoming the default way someone will create an API for a mobile app, web app, or even with the internet of things (IoT).
Front end is relatively staying the same, you just might have different frameworks. For the backend, you have a lot of different options (C#, Python, Ruby, Java, basically any modern programming language has a web development framework). Node.js is one of the best back end options as it allows you to scale your app to millions of users.
In conclusion, Node.js is definitely one of the most ubiquitous tools to build web applications. If you’re going to get a web development job in 2018, 2019, or 2020, the implications are that you’ll know some Node.js.
What about databases? Can you explain what kind of databases you recommend or what kind of stuff you cover in the freeCodeCamp curriculum?
You can actually do a lot with a database without really understanding how it works. Every major web development framework has object relational mapper (ORM) tools. For node.js, one of the more popular databases is MongoDB, which is a NoSQL document database.
A NoSQL database does not force every row to fit a particular structure. Not all rows are required to follow the same pattern like in a traditional structured database.
Basically, with a NoSQL database, you can have a giant blob of stuff. For example, in the freeCodeCamp’s database, we have the user object and sometimes it is megabytes in size. It’s just a single object! When developing freeCodeCamp, we were in a hurry, but it works. We have millions of people using freeCodeCamp without issues. When we hit billions using freeCodeCamp, we may have a bigger problem, but for right now using MongoDb seems to work really well.
If you have time, I would definitely recommend learning SQL and how traditional relational databases work because they’re absolutely fascinating and very useful if you’re striving for high performance. If you have Postgres or MySQL you can do so many things with these databases that would be much harder to do with a non-relational database.
SQL is structured query language and is the standard language to communicate with traditional relational databases like Postgres or MySQL.
What about source control? What do employers expect you to know when you’re going into the job market?
Source control is the tool used to manage your source code for projects. It makes developing new features easy and enables collaboration with others. You first manage your code in a local repository but will then likely commit your code to a centralized location.
Now there many be some legacy systems using Subversion or Mercurial, but the vast majority of version control today is done with Git. The reason Git has become the industry standard is because Git is really well written and designed. Linus Torvalds, the creator of Linux, also created Git. He wasn’t satisfied with the options out there, so he created his own. It’s pretty well built, but a lot of the commands are counterintuitive. Expect to be doing a lot of Googling. Regardless of how much you Google, there’s often a way to fix things in Git and it’s pretty hard to actually lose code though stupidity.
Git is the version control system. It’s on your local machine. If you need more features, you can have your own private Git Server using GitLab. GitLab is open core, but not truly open source.
You should also know of GitHub, which is the most prominent hosting service for Git repositories. This is the most common place people will push their code. When using Git, you push your local code (contained in your local version control) to GitHub. Once in GitHub, people can view and download the code themselves. Anyone can make changes and push it back saying “Hey, I have a fork of your code and I want to merge my code into yours.” You then have the option of merging these changes back into the original project.
Git and GitHub are the foundation of open source software. Anyone on the internet can download your project, make some improvements, and suggest these changes back to you.
That’s why many people, including myself, consider GitHub as the center of the open source universe. Pretty much everybody is on GitHub. Nearly every major project is on GitHub, so it has become the de facto for collaboration. As an alternative to GitHub, there are websites like BitBucket, which is a great tool by Atlassian. There are a few others, but GitHub is an order of magnitude larger than anyone else at this point.
How do we go about building some projects to create a portfolio and make ourselves marketable?
There are a ton of different project ideas out there. freeCodeCamp has published lists like Every time you build a to-do list app, a puppy dies. Because everyone builds to-do lists as a start.
There’s a website TodoMVC showing to-do lists with the most common frameworks, but there are many other project ideas beyond to-do lists. freeCodeCamp itself has a ton of different projects you’ll complete in the process of earning the 6 free certifications. You don’t even need a freeCodeCamp account, you just build them and they have tests to test correctness.
What I encourage you to focus on is not what to build but how to build it. You’re the engineer, you’re trying to figure out how to make something a reality. What to build is more of a business decision that will be decided by your boss or your project manager. This could be your decision if you’re building a start up project, but even then you’ll be listening to your users who be telling you what you should build. So instead, focus on how to build. Just pick a project and start building.
Is contributing to open source necessary for all new developers?
I don’t see it as necessary, but I see it as a great way to immediately get exposure to the developer community and have people looking at your code. You could absolutely build your own private portfolio and get a development job based on your strengths, but if you want to collaborate with developers (especially with a remote team where people are working at different times in different parts of the world), open source is the best way to experience that. With open source you get free code reviews and free critiques from world famous developers just by contributing to their open source projects and seeing what they have to say about your code. If they accept your code into the project, it’s a serious badge of honor. Contributing to, for example, Linux, Firefox, or even freeCodeCamp. Go out there and contribute to open source, it’s a definitely a good use of your time.
How do people go about learning the fundamental knowledge for interviews such as data structures and algorithms?
Interviewing is a completely different skillset from actually developing software. The interview process is heavily skewed toward recent computer science undergraduates, so interviews are often asking questions about data structures and algorithms that you would have gotten in an undergraduate program. If you take the Stanford algorithm course you will definitely have a very strong foundation in algorithms and data structures. Honestly, for 90 percent of technical interviews, they’re going to have you go to a whiteboard and talk about how to, for example, flip a binary tree. If you have all of those data structures down pat, you’re going to be in a very good position. You can also go through Cracking the Coding Interview, which is a great book that my friend Gayle wrote. It’s a great book.
Finally, I’d recommend freeCodeCamp where we have hundreds of algorithm challenges to solve and data structure challenges you can build with tests to confirm your skills, all within in the interview section.
Any last tips for those interested in the full stack web development career?
Aside from getting all of the technical expertise and just practicing a ton, you are going to want to build thick skin when you’re applying to all of these places and doing interviews. Rejection is common. Don’t be surprised if you experience difficulty or rejection when applying for these jobs.
Most of these organizations are very risk adverse. The consequences of them hiring the wrong person are much worse than passing over a person who would have been a great fit. They are much more worried about false positives, people that they shouldn’t have hired. As a result, they are going to interview a ton of candidates for one individual to get hired. It’s really just a numbers game.
I encourage you to keep at it, apply to hundreds of companies. Not just spamming out your resume, but seriously going through the process by doing the research and figuring out who you need to contact and how you can apply. Plan to spend weeks or months of your life applying for jobs and interviewing. Even after getting a job offer, keep going. When you get a job offer, people are interested. The more job offers, the more you can use those as negotiation tools to secure a higher wage. Don’t necessarily accept the first job that comes to you. Plan to spend a lot of time and energy and it will definitely pay off. You can leap from where you would be if you just spend a little bit more time on the job application process and keep interviewing a little bit past your comfort zone. There are hundreds of thousands of open jobs around the world, so don’t give up.
My theory is that even if you’re struggling to get a job, keep coding. Don’t stop coding. Eventually something will come around if you keep up the hard work.
Thank you for joining us, Quincy! How can we connect with you?
Follow me on Twitter. I only tweet stuff I think is going to be worth your time. Cheers!
What’s next? Check out the video interview
We encourage you to take a look at the freeCodeCamp curriculum and consider going through the program (it’s free 🙂).