How do I learn to do what you do

A friend asked me how I got to where I was.

The largest problem with answering this question is my path can never be your path. At its most extreme this makes advice useless: the coach at the pro shop grew up thwacking tennis balls as a toddler, his advice for a 45-year-old getting in to the game is probably worse than useless.

But to set some parameters, I feel I have some advice for people who are:

  • over 30 or so
  • don’t have a Computer Science degree
  • have responsibilities outside of work that make a full time bootcamp or similar very hard to do
  • have not excelled in another field – I wasn’t a doctor or lawyer or a movie mogul before I started programming

Separate posts detail what my path was exactly, but here are 10 things I learned on my path from “guy who wants to write some code for the company site and how do we make him stop?” and “making $70 an hour as a contractor”

1) Learn something that is easy to learn

You’re really going to struggle to learn Java from Stack Overflow. In general it is super easy to find online tutorials in

  • Frontend Javascript
  • Ruby
  • React
  • SQL
  • Node

It’s also easier to find MOOC’s, discussion board posts, and interactive ‘games’ to learn the above list.

2) Learn from a practical source

Phonebook-sized textbooks on a software are a common sight, and it’s so appealing! Surely if you work your way through a giant compendium on HTML and CSS you’ll be a developer by the end. The problem is that these tend not to be real curriculum in how to do a job, but more like the user manual for an airplane cockpit. They’ll load you down with unecessary information about methods that no one uses frequently, and won’t give you critical advice about how to get something done

There’s a critical difference between telling you how to use every tool in the wood shop, and showing you how to make a chair

In general, try to get a text that a real human working as a programmer has recommended to you, and then check out the ‘who this book is for’ section to make sure it’s aimed at a beginner.

3) Learn in the easiest way possible

When you were in school, which topic did you find easiest and why? For me it was definitely physics class, where the math and theory came secondary to almost daily demonstrations of small topics. The subject had a certain ‘cool’ and every theoretical point was underpinned with a memorable visual lesson.

When I first went to learn programming I made myself sit alone at a desk with a poorly written textbook. It shouldn’t be that surprising that I learned very little even after trying hard for a year or so.

While I think some resources are just bad, there’s also many systems that are bad for me personally.  You have to find something that motivates you and do that, even if it’s more ‘difficult’ in absolute terms.

Maybe you need to pay for video tutorials when there’s a cheaper written option.

Maybe you need to schlep over to an in-person meetup because group work is the only way you stay motivated

Remember you are trying to learn something that will change your whole career path and help ensure you’ll die wealthy. Saving $300 on textbooks is not actually that smart a move.

5)  ‘No one does PHP any more’ and other advice you should ignore

Every developer is full of advice like this, and it’s the most critical to ignore. In general it is based on personal anecdote rather than real stats, (a student of mine had a friend tell her it was Very Difficult to get a first job programming if you lived in San Francisco!), but much more importantly: these judgements are about how good a particular language or framework is for job opportunities relative to other software jobs

I did tech support for almost five years. Answering phones and writing emails, I experienced every possible frustration and became a master of my craft. The most I ever made was $50,000 a year, and I was lucky to get that much. If I’d learned PHP backwards and forwards I could have doubled that salary within two years.

Heck I could have found a better job making honest-to-god video games

jobs in software working on games are notoriously the worst in the industry, but they beat the shit out of waiting tables. Pursue something you want to do in software!

I said at the start of this that this advice is for people who aren’t crazy successful. If you’re currently a well paid market analyst, you should think carefully about which software jobs would be a real improvement. For the rest of us, it’s all gravy so we should consider other factors than absolute demand.

5) try to focus on a few skills

This excellent advice is one that I absolutely failed to follow, and I know it’s hurt my career. had I focused on Data Science, or Front-end, or webservices, I would have an easier time now.

If you’re trying to break into the industry in the least time, you need to study on what a single person at a given job does, and spend most of your time on just those skills.

6) It’s a skill tree not a skill ladder -or- HTML is not the easiest thing to learn

the most common advice newbies get is to learn HTML and CSS first and it’s absolute horse shit. HTML and CSS are complex languages and while you’ll need a very basic knowledge of them at some point, they’re in no way more ‘basic’ than any backend language.

7) a few universals

Once you’ve sussed out a target role and chosen a language, there are a few skills that almost every job would like you to know. Try to do a few online courses and independent study that covers:

  • git
  • agile workflow methodologies (see a later point on how to get these without having a software job)
  • automated testing
  • interfacing with an API like the twitter or Salesforce api

Almost everything else is stuff that will vary between shops, and almost every other skill is something that a shop should be willing to teach you.

8) ways to break in

One of the hardest parts about getting a first job is that any professional work is so totally unlike lonely study: you’ll have to work in a team and document your work so others can re-use it. This is hard to simulate! But there are numerous opportunities to experience similar

  • game jams
  • taking small jobs via upwork (upwork sucks and the pay is shit, you should only do this to get experience of client relations)
  • ‘hack days,’ ‘code challenges,’ and ‘hackathons’

Events happen fairly often in larger cities, and you can find online events as well with a little googling. They’re great ways to get exposure to concepts like Kanban boards, bug documentation, and team collaboration.