Learn To Code
This section is a beast — after all, you will be tested on your ability to code. A lot of your confidence on the job will come from your actual skills. Coding isn’t the only thing you need to learn though.
Too many guides to becoming a software developer focus only on this section. Thankfully, there are a lot of amazing resources out there for learning to code. My goal is to give you an order to your learning, and to point you in the direction of the best resources.
I want to reiterate something I mentioned earlier. Your fingers and your brain have to do the work. Reading books or blogs, watching videos, or doing code-alongs won’t teach you what to do. They can fill in small gaps in knowledge, but you need to be able to make things on your own.
Google will always be a wonderful resource. I highly encourage everyone to practice Google-Fu. You need a mental model of what you’re trying to build, which you can explain to a friend or an interviewer. Web resources can help you understand the concepts and the best way to explain them.
Another great way to practice is to explain what you’re learning to your parents or grandparents. If you can’t describe technology so that they can understand, you don’t own the knowledge yet.
My recommendation is to take a break whenever you’re stuck for more than 15 minutes. Take a walk, read a book, play with your dog — whatever. Learning is a marathon, not a sprint. Naps are great too!
Do your best to learn it on your own first (you don’t want to get over-dependent on help from others), but if you can’t figure something out after a couple of attempts — it’s time to ask for help online. Don’t feel bad or stupid or dumb if you can’t understand something.
Remember, your mental model is different from the mental model of the person who created this piece of technology. Big deal. None of it is a reflection on who you are as a person.
Before you begin this journey, here’s what I want you to buy or download (either today or tomorrow):
- A whiteboard and dry erase markers
- Sticky notes and flashcards (or a flash card app to practice terminology — I like Anki)
- A small tripod for your phone so you can record video
- An account on zoom (or practice using quicktime to record video if on a Mac). Don’t spend money on this
- VS Code and the Bracket Pair Colorizer plugin
These tools will help you practice. Whiteboard out concepts often! There is a whole section on whiteboarding below. Use notes and flashcards to keep track of important information. Use your video camera to practice speaking technically for interview prep. This is your toolkit for the next several months.
Which Programming Language Should I Learn First?
What about Python? It depends on your career goals. If you want your first job to be doing database work or any type of data analytics, then Python is fantastic. A lot of new programmers get tripped up between learning and managing Python 2 and Python 3 as well. This won’t be a problem forever, but it causes a steeper learning curve today.
Overview of the 8 Areas to Learn
- HTML/CSS: The bread and butter of any website. We won’t go crazy deep here, but you need a decent understanding of how a website works before moving on.
- React (Frontend): I’m going to recommend you learn React as your first frontend framework. This will power what your users see of your application.
- Node/Express (Servers): This is the code that handles data in the cloud. Since we’re in JS-land, we’ll use Node and Express. I’ll explain the difference and show you some great courses on mastering them.
- MySql, Postgres, Mongo, and Redis (DBS): This is our data storage section. All the web is about data, and I recommend you get experience with a few different types of database. Practicing these will help you speak with confidence during your interviews.
- Travis, Docker, Heroku, and AWS (DevOps Lite) : Enough deployment to be dangerous. Understanding how to deploy and update code is generally enough for your first job, unless you want to pursue a DevOps career.
- Git, CLI, Testing (Developer Tools): These don’t fit into any other bucket, but are tools you will use on a daily basis. We’ll go over how I recommend learning these before you show up at work your first day and are overwhelmed.
What is the Internet?
One of the main things people struggle with is their mental model of how the web is built. The piece that I tend to focus on when teaching is data. Everything is data.
What does this mean?
It means that you’re going to create a page on the internet. It may have forms that collect data from users. It may show data from one user to another.
When the user submits the form, it will send the data to a server. The server will send the data to a database which stores it for use later. That’s pretty much it.
The majority of the web works this way — it isn’t scary or complicated.When you go to a page, it makes a request to a server, which makes a request to a database. It then sends the data back down to Google Chrome or Safari. These applications display the data and let you interact with it.
There are nuances to this, of course. The whole process is straightforward, though. No need to be scared or overwhelmed!
To learn more, I’d recommend that you first watch this course on Khan Academy. It provides a good overview on how the internet works in 5-minute videos.
After you have a rough idea of how the internet itself works, it’s time to start learning HTML and CSS.
How to Learn HTML and CSS
This is the foundation of every website. I’m going to spend a little time to give you a high-level overview of both, and then send you off to study.
Remember, for this section and the rest in the module, you must do the work. There are no short cuts. Your brain will only learn by you making things, breaking them, and putting them back together. Tap into that childlike sense of play!
HTML works like a non-fiction book. There are words on the page and sometimes images. There is a cover and titles for chapters. Often, there are links to other parts of the book or reference to other books.
HTML on the web roughly serves three purposes:
- To show data to users of your site. This data can be anything, videos, images, text. Your browser downloads the data and displays it on the page.
- To collect data from your users. It does this through the use of forms, fields, and inputs that take in things like a username or password, or a comment for a blog post. Sometimes you want to display this data for other users, sometimes you want to save it for later.
- To connect your website to other sites through links (hyperlinks). If your website has many pages, you can connect them together with links. Most modern apps are a single page and mimic this behavior. You can also link to other sites on the web or a specific page on another site.
If we go back to our book analogy, CSS is the look and feel of the book and its text. It answers questions like “What does the cover look like?” “What color and size is the text?” “How large are the images?” It also answers some other questions when it comes to the web.
CSS has three main components, the style of the page, the layout of the page, and any movement on the page. It’s worthwhile to split CSS into these different buckets and spend time practicing each one. CSS can be quite frustrating for a beginner. Have patience when learning how to select individual elements and how to layout a whole page.
I suggest you keep practicing it bit-by-bit. Whenever you make a new app, spend some time trying a different part of CSS to learn it. Whenever you stumble across a site you think looks cool, try to re-create it. You can always download the CSS for the site and use it as a reference if you get stuck.
Resources For Learning HTML & CSS
- The full reference for Dev Tools from Google.
- Next, spend some time learning and building simple things with HTML. Whatever seems fun to you — try making it and viewing it in your browser.
- Mozilla has a great written resource for learning HTML.
- Udacity has a great video series on learning HTML and CSS.
- At this point, test yourself. If you can think of an idea and are able to make a rough approximation of it, you’re ready to move on. If you still need more practice, that’s OK — spend another day or two creating sites!
- If you want more practice with syntax check out Codecademy. I only recommend this site as a last resource, because it creates a false sense of learning. You usually type a thing, without understanding how it works. This is the trap I want you to avoid!
- When it comes to a deep dive into CSS I’m a big fan of Wes Bos’ free CSS Grid Course, as well as the CSS Tricks site for Flexbox and Grid.
- Play around with Flexbox Froggy and Grid Garden. To practice both layout tools I would use them in projects going forward.
That’s it. Okay, maybe it’s not quite that easy, but that is my advice. The sooner you can apply something you have learned in a project, the faster you will master it.
Your mission for this phase and the next is to make and break things. Every hour or so ask yourself, “What have I broken to test my understanding recently?” Be comfortable breaking your code to test assumptions.
Cultivate a sense of being a tinkerer. It’s fine if you want to read and understand how things work, but your understanding needs to come from your own experimentation. This will give you the ability to explain your understanding in a job interview.
Everything we do goes back to this central goal. Ask, “how do I gain knowledge as fast as possible to be able to show this knowledge to others?”
Let’s dig in.
- Udacity has a great free course if you like video content. I think the course is a fine starting point, but you’ll need more hands-on practice to master the basics.
- Use MDN as your resource any time you are stuck trying to build a project, especially with syntax (how does that method work again?).
- The goal is to keep practicing building things until you feel comfortable with a given topic. There are two wonderful sites for practice: Repl.it is great for simple JS practice and CodeSandbox is fantastic for building small applications and seeing them in a browser. If you want to mess with pure JS, use repl.it, if you want to see what you’re building in the DOM tryout CodeSandbox!
- A couple of great places for toy problems are codewars and codesignal.For now, I would generally stick with the easy challenges in order to get more repetitions. Save the harder ones for later, we’ll come back to them in the job prep section.
- As a last resort, I’ll say you can use Codecademy — but again, I think it’s too easy to type without learning in this resource!
You are ready to move on to the advanced section when you feel able to demonstrate these three things:
- You can manipulate the data in Objects and Arrays comfortably.
- You can create and pass around Functions to other Functions.
- You’re comfortable explaining what your code is doing to someone who doesn’t know how to code.
The key areas I want you to spend time learning are:
- The this keyword (and context)
- Object Oriented Programming in JS
- Functional Programming in JS
- Asynchronous code (Callbacks, Promises, Async/Await)
- The Event Loop
- Inheritance patterns
- Closure and Scope
- Dom manipulation
First, you need to be able to code them out. Second, you should practice whiteboarding them. It’s fine if you only code for now. Keep a list of the ones you find the most challenging so that you can practice them in the whiteboarding section of this guide.
I have a bunch of these. It is likely you will need to see something explained in a few different ways to completely understand it. Practice by creating small projects and quiz yourself based on your conceptual understanding of a topic. Use
console.dir to dig deeper into your functions. Be able to explain these topics in code!
- I am a huge fan of the Fun Fun Function channel on YouTube. Here is some of the best free content for learning advanced topics (it is all theoretical though, so you still need to practice to master the concepts!) Check out the what are higher order functions playlist.
- Tyler McGinnis’ Blog and Courses are very useful. I would work through both his Advanced JS course and his Modern JS course. His blog posts on individual topics are also fantastic. He has YouTube videos covering many of these subjects. His explanations can be challenging but he uses clear language.
- Will Sentence’s courses on Frontend Masters are the best on how to whiteboard difficult concepts. The course is all whiteboarding in front of a live class. He has three courses up now. I would work through the first one (JS the hard parts), then come back to the other two as you dig into OOP and Async code (JS the new hard parts). He has a couple of other courses coming soon! Will runs a coding school which has some great materials I will be linking later. I am a huge FEM fan!
- MDN has a great read on the Event Loop.
- This is a classic talk on the Event Loop given at JS Conf by Philip Roberts.
- NetNinja has a pretty good series on Async Code. There are some newer techniques, but he explains them in a way that students have found helpful.
- For ES6, I enjoyed Stephen Grider’s ES6 Course. He makes a lot of courses and a lot of people love him. However, it can be easy to fall into the trap of coding along with him without understanding what he’s doing. This course has mini quizzes to test your knowledge in-between sections which is why I recommend it. Wes Bos’ course listed above is free and great too.
- Lastly, I’m going to link my favorite articles on callbacks, promises, and async/await. I highly recommend that you master all three ways of dealing with asynchronous code.
- I know of interviewers who still ask about the differences are between callbacks and promises. Here’s a short overview post of the 3 on Medium that is a good primer. This is a great video/blog post from Tyler M, it goes very in-depth. Finally, here’s my absolute favorite post comparing all 3 — the code examples and explanation of each are fantastic!
That’s it for this post! What a chunky one…
The next post in this guide will go over frontend and backend frameworks, and databases. Check it out here!
And if you have any questions please post a comment below, happy coding 🙂