The HTML for this site was generated from markdown using Showdown. Opinions are my own
If you are here, you probably asked me about learning to code! If not, and you are completely new to coding, I hope this is helpful to you! I’m more than happy to answer any questions you may have. Just send me an email
This is still a work in progress. Some of the items here may be out of date, and not everything here is completely finished. Please let me know if you see anything that should be fixed!
I did contract work for a short time, and then was hired as one of the first front-end engineers for Honeycode. My first year was mostly prototyping. I spent a little over four years on that project, and recently started working at Amplify.
Knowing where to start with coding can be difficult. There are a ton of resources out there (certainly more than when I started). Some are helpful, some are not. Some will waste your time focusing on the basics and giving you a false sense of competency. Other resources are more advanced, and you will feel lost. I've found that there is, in particular, a large gap in the right resources for helping someone even decide if they want to code. This guide is for the absolute beginner, with little to no coding experience, and is aimed at helping you discover if you even want to learn.
Knowing if you even want to learn to code is it's own process, and honestly, I didn't like coding at first. In the beginning, I also didn't feel like I had a natural ability with it, either, but I was determined to give it a reasonable try. With some time, I started to see how it fit with some of my natural skill sets like problem solving, finding patterns, attention to detail, etc. A lot of people told me "if you love logic puzzles, you will love to code", but I didn't love logic puzzles at all. Actually, I hated them. After I learned to code, I then developed an appreciation for those things. However, coding is different for me than a logic puzzle,because I'm actually building something, and solving the logical problems in codewas much more satisfying because there was an end result.
I've helped a lot of people over the past several years that have either had absolutely no experience coding, or were hoping to take it from a small hobby to something more serious. In all those experiences, I have seen the same concerns over and over again, so I'll list them here because you will likely feel the same.
"I have no idea what I'm doing"
"I'm not smart enough to do this"
"I have been learning and working at this for months and I feel far from doing anything real"
Coding isn't for everyone. However, if you enjoy the learning process, as well as solving the coding problems that are hard for you, then you will likely enjoy working as a software engineer. There is never an end to learning: things are constantly evolving and changing, there are always new problems to solve, and there are always new areas of knowledge to become an expert in, even within your org. Working as a software engineer is almost the same as learning to be one.
I recommend learning the very basics of coding in an easy programming language, and starting to learn with practice problems. This is the most fundemental aspect of everything you will do, and will, in many ways, also be the majority of what you will do at your future job.
The first programming language I learned was Ruby. Ruby most likely won’t have any lasting benefit in your future coding career (that is, you probably won’t use it at your job, but you may), but it’s benefits are that it’s incredibly simple to understand (and therefore you can get started with more complex concepts and functionality much faster), and that you can use Ruby on Rails to make the back-end of a website yourself (back-end is the API that you call to get data, front-end is where the rendering logic lives). Having some experience working on the backend is tremendously useful, and maybe you’ll want to pursue that more. There are, of course, other options for creating a back-end, but Ruby on Rails is simple enough, yet allows you to learn how things work at the same time.
I came from a non-CS background (I studied literature in college). Though I took a CS course in high school and started off as a math major in college, I'd still say I was mostly starting with a blank slate when I decided to switch careers. I started by teaching myself using only online resources. I then took a few community college courses (I took a basic C++ course, and Object-Oriented programming in Java). The courses I took at the community college were okay, and helped solidify my understanding of certain things, but I think there are better resources online (that I'm happy to recommend) that will help you save time. I then decided to go to a coding bootcamp, and then got a job as a front-end engineer.
Starting off teaching myself enabled me to keep my job for awhile while I figured out if I really wanted to do it. After I decided this, going to the bootcamp enabled me to start working ASAP. The bootcamp (App Academy) taught me everything I needed to get a job, and also showed me how much I can actually learn in a short period of time. It was a life-changing experience. You may not want to work as a front-end web developer, so you may want to take a different path, or go to a bootcamp that focuses more on the backend. If you are unsure, ask me! However, if you decide to start with Ruby, it can help you see the bigger picture faster, and help you decide. There are plenty of other bootcamps out there, on both coasts - some are useful, some are not. Please ask me if you are considering a specific one, as I know some people that have gone to others, and I’ve spent a lot of time looking into it. A lot of them are essentially scams, a lot of them are not.
Google everything you don’t understand. Google, Stack Overflow, and documentation (MDN, library-specific docs, etc) will be your primary resources. I use them all the time at my job (literally, every day). It took my awhile to actually be comfortable referencing the language / library docs directly, but eventually it will be quite easy. If it seems overwhelming, that’s fine. Eventually you’ll know what to look for. Engineers are always asking questions online (and answering them), so if you run into a specific problem, Google it! If you run into an error, copy and paste it. You'll be surprised how much there is out there.
Definitely DO NOT memorize anything when learning to code. Literally, zero memorization is the place to start. It's truly a waste of time. Once you use something enough, you'll know it. Just keep pushing forward. For instance, at my job, when I work on a new project, I don't read through all the code until I understand it 100%. After I've taken some time to become familiar, I pick up a task and I start working on it. Truly the best (and easiest) way to learn to code, is to code. I know that may not seem true, but it always is. Even when you're starting out.
First thing to do is get started with an environment to write code in. Before setting up anything locally (that is, on your computer), you can get right to it by using https://www.repl.it or https://www.c9.io for practice problems in your browser. Don't waste your time downloading IDEs or setting up anything on our computer for now.
If you're a total beginner, I would suggest starting with
https://www.repl.it. Sign up for an
account, and select
ruby as your language. This will create a
ruby file (
main.rb). In your Ruby file, enter
puts "Hello World". Save this file. In the console, type
ruby main.rb, and press "Enter". You can also just click
Run at the top of the page. In the console, you should see
the output of that command. You're now ready to start learning! If you
choose to use c9, just use all the default settings and click through the
defaults to create a workspace. This editor is more fully featured, and
can be useful later after you are more comfortable.
Here are a few free resources that got me started with Ruby and coding in general (in the order I found them useful). You'll want to check them all out.
App Academy open <-- The essentials, great resource. Everything to get you started, and more. Spend a reasonable amount of time here, first.
Learn to Program <-- Much more thorough, don't start this just yet. Great secondary resource to solidify your understanding.
Code Academy <-- Use with discretion, it can be a little slow and overly repetitive, it’s possible to learn faster. May help you solidify your understanding, or help you if you are really stuck on the other resources. I've known others that have used Free Code Camp and found it useful, too!
Ruby Monk <-- I personally wasn’t crazy about this resource, but I’ve found that learning with more than one was most useful to me, especially when trying to get the basics.
Once you have finished the beginning of the App Academy Open course, you can start working on practice problems (and as you feel stuck, consider another resource to address whatever you are confused about from a different angle). Also, I was very stuck on very easy roblems for awhile. Don’t worry, it just takes some practice (and help from others). There are multiple resources out there for finding practice problems, and I'm happy to help you find them.
If you decide to set up your own environment locally (which I do not suggest doing yet), I have a few suggestions. Any text editor is fine. I used Atom for a very long time and liked it a lot, but now I use VS Code. It is more fully featured, has better autocomplete, and is more stable than Atom (at least since I last used it). Lots of people also like Sublime, as well as others. I also highly suggest iTerm2 instead of Terminal. iTerm2 has some useful features. Using tab to autocomplete the names of folders and files will make things faster. You can also use the built-in console in VS Code.
The things that save me the most time are knowing that in the console, you can use the up arrow on your keyboard to access previous commands you've typed. Quite useful.
The only commands you really need to start out are:
pwd(print working directory): see where you are in the file system (i.e.
ls: lists the files in the current directory
cd: enter a folder (i.e.
cd ..: go up (or back) to the parent folder
In Atom or VS Code, if you have several lines you want to edit at once, hold command and click those lines.
Command + Enter and
Command + Shift + Enter are
useful for adding lines in your code.
If you use VS Code, consider using the Prettier Plugin for autoformatting. When people start out, they really struggle with formatting. This will help keep things lined up nicely.
I use Spectacle for window management (there are others out there, too) - really helpful since you'll often have at least two windows open at one time.
If you don’t know what git is, do a simple Google search (i.e. "what is
git?"). It’s basically a way to keep track of versions of your code (very
helpful if you break something and want to revert to an earlier version).
It’s also the way multiple people work on the same codebase at the same
time. The only things you will use regularly at first are 1)
git add -A, 2)
git commit -m "add a simple bugfix", and 3)
git push. Git gets complicated, and you can Google those
things when you need them. Sign up for
GitHub immediately and start committing
your code there! You’ll find that later down the road, if you apply for
jobs, you’ll be glad you have a public git history that future employers
can look through. And when you break something, it's easy to look back to
a version that was working.
Don't get stuck trying to understand everything about HTML, just use
<div> to start out. Know that semantically correct HTML
really does matter a lot (especially for things like accessibility).
Semantically correct HTML is not something to be concerned about while
you're just starting out.
Future reference material (databases, Big-O):
If you want to share code with someone in an editor that supports the formatting:
Things I found confusing the more I learned Ruby (more advanced topics):
Good luck, and please don't hesitate to reach out to me for help!