Some "Learn To Code" Advice

Author's Note: this is an abridged and somewhat edited version of an email I originally sent to a friend, a couple years ago, who had asked for advice on getting into the programming career field. He was already working in some sort of physical engineering role and had some basic programming experience from his college work so it seemed like a plausible lateral path for him, but before he could pursue it he found a better physical engineering job that he actually liked and last I've heard he's still happy there. But I figure this might still be relevant to anyone who's trying to break into the field from a somewhat adjacent background, or maybe someone just getting started who wants skills to focus on.

You also may have heard that the market for software developers is rather inhospitable right now. This is true. However, it is likely that the industry will recover1, though it probably won't happen before we go through a nasty crash when all the AI hype fails to deliver and a bunch of investments go under. Painfully. But if you want a head start on some nice marketable skills that put you at the top of the hiring queue in the next upswing, now is a good time to start working on them2.

I got into coding in a somewhat unconventional way so it's hard to recommend that anyone try exactly what I did--basically I was already teaching myself programming on the side in hopes of one day going back to school for it, and also working a customer service job at a tech company where I had a lot of opportunities to write little one-off scripts on our customer's websites to solve their problems, and fortunately when the development team found out about it they were cool enough to offer me a job with them instead of telling me to cut it out. But that's a hard thing to plan for. Most of the people I know who got into programming work without degrees3 went through some sort of bootcamp or another, and they mostly recommend those. For example, I know {friend} went to one that was affiliated with {Local County Community College}, and as a county resident he was able to get most (I think?) of the tuition reimbursed. There may be similar programs near you if you look around.

If you don't want to go to a bootcamp, your best bet is to learn all this stuff on your own and also network like crazy to find friends and contacts in the industry, while putting as much work as possible up for public access on something like Github or a personal website. Collaborating on open-source or group projects is especially good because that generates good relationships and a good public skill profile at the same time. Basically, you need some combination of insiders who know you well enough they're willing to go to bat to get you hired somewhere, and obvious public demonstration that you know your stuff.

Either way, there are a bunch of things you ought to know about to have a head start in any professional coding environment. I'm going to try and list stuff that's pretty much essential for anyone, but obviously every role and environment is different--this is a list of things that will look good for you just about anywhere you apply, and you'll end up using most of it no matter what you do.

SOURCE CONTROL

On any project you ever create, you're collaborating with at least one person (yourself). On just about any project you'll do in a professional environment, you'll have to collaborate with multiple other people too. This means being able to track changes, manage versions, revert bugs, merge multiple changesets, and such things. Pretty much everyone uses some sort of version control tool to handle these tasks--if they don't, run far away! While there are many version control tools, and some will argue about which one is best, the one which about 95% of today's development world uses is Git. I'd recommend going through this tutorial to understand the basics, and you might also like Learn Git Branching, which presents it as a game. Once you're up to speed, I'd strongly recommend you get in the habit of version controlling basically any project you create -- at least create a repo on your local machine for it and use commits and branches to track your changes, but it also helps if you create an account with a service like GitHub and store all your projects there, so you can clone them anywhere.

HTML/CSS/JS

You likely know a bit of this already, but every website in the world is powered by some combination of HTML (HyperText Markup Language, used to encode document content and structure), CSS (Cascading Style Sheets, used to tell a web browser how to actually display the content and structure encoded in the HTML), and JavaScript (no relation to Java, used to tell a browser how to dynamically update content/structure/display). Most development roles will require you to have some familiarity with web development, and even if not, this stuff still looks great in an interview. I'm not sure where you're at with that stuff but if you search for it there are plenty of tutorials (this one looks good) for all 3 of these languages so find one you like/that challenges you.

COMMAND LINE

I would strongly recommend getting familiar with the command line for at least one operating system if you aren't already -- honestly when you first learn Git you should be doing it on the command line so you understand the fundamentals, and that's also a great way to learn some basic command-line stuff for your OS. For Windows, Powershell is a great thing to know--I would look for a tutorial for that too. It also impresses people a lot, and may be very marketable depending on the role, if you know your way around Linux -- fortunately since it's free, it's real easy to get a build up and running in a virtual machine, or on some old computer you have lying around that you're not using.

FINDING HELP

If you don't already know about StackOverflow, now you do. This is the best place to find/ask programming questions, and the answers tend to be high-quality. I use it all the time, and so does anyone else who's a professional developer--none of us know everything, and our greatest skill is our ability to find answers quickly (aka professional googling).

ALGORITHMS

Some people complain about having to learn about algorithms, and they are wrong and dumb to do that. Everything we do depends on understanding algorithms at least a little bit, but if you understand more than the bare minimum that you're required to, it can be a huge asset in a lot of situations. This course looks really good for algorithms, but I haven't been through it myself--if you don't like it let me know and I can probably help you out with some other resources.

OTHER RESOURCES:

Some stuff highly endorsed by my coworkers the last time we had a "post resources that help someone learn to code" discussion:

Stuff that I like in particular, though no one else has to:

The Codeless Code: goofy, made up zen-type fables about programming philosophy. Won't teach you anything practical, but may help you attain enlightenment.
Structure and Interpretation of Computer Programs: an old MIT textbook used for their courses. Difficult as hell and the problems are all in Scheme, which is not a language people use today, but I learned a huge amount just by going through about the first 2 sections of the book and trying to work through the problems.

Anyway, hopefully this is a good start for you. Best of luck!


  1. Enough of our society's load-bearing infrastructure runs on sketchy, half-finished, badly documented software that, assuming we continue to have a society and want it to keep working, we will be forced to pay people good money to keep all this legacy code limping along for the indefinite future. 

  2. Or, you could learn to mine coal. In a hilariously ironic twist, this may genuinely end up the hot industry of the mid-to-late 2020s! 

  3. And plenty who got degrees in fields that ended up not having job openings. 


You'll only receive email when they publish something new.

More from Tom
All posts