Hey austin. I have been interested into getting into coding, specifically back end coding. I was just wondering what would be the best way about getting started? And I need to buy a new laptop and was wondering what hardware would be best for me given all that. Also keep in mind all of this is on tha backdrop of zero program experience. Very novice at computers period really. Any advice you got would be much appreciated [sic]

So I get this type of question a lot. I’ve seen people do well and I’ve seen people fail. There are a ton of resources out there to help people learn to code and get jobs and such. However, in order to be successful, the deciding factor is whether the person can fundamentally understand how programming can be useful to themselves and to the world at large.

When learning programming you should be working backwards from some kind of understanding of what programming can do. Otherwise, you will quickly lose interest. Perhaps you won’t lose interest, but you won’t be asking the right questions and the journey will be extremely boring. The best way to bridge this gap is to come up with something to build. Find a problem that interests you and try to build a piece of software to solve it.

I began learning how to build websites in 2005. I was learning how to make basic flash animations and wanted to upload them to my own website like some of the other animators were doing. My success was measured by: “can people watch my little animations yet?” I learned how to successfully code and publish a website purely by trying to answer my own questions.

  • “How do people get a .com and how does that work?”
  • “A website needs hosting, where do I get hosting?”
  • “How do I make text show up on a web page?”
  • “How do I change the color of the text on the page?”
  • “How do I put a video on a web page?”

After I answered all of those questions (and a million more probably), I was successful in publishing my little flash animations to the web! People could watch the little clips I uploaded to the website. That only led to more questions.

  • “How can I let people leave comments on my animations?”
  • “How can I make blog posts on my website to let people know that I am working on more animations?”
  • “How can I let other animators upload their own animations to my website without me having to manually publish them?”

By around 2008 or so I was able to do all the things I mentioned above. I was basically programming literate. I knew how to build simple database-backed web applications. Although discipline was indeed a factor in teaching myself programming, I attribute my success more to having clear end-goals. I wasn’t learning how to write a “for loop” was because someone told me it was important. I was learning how to write a “for loop” because I had an idea that I could use it to display a list of my videos without having to copy paste the list items 10 times.

The whole thing is very much like learning a spoken language. I took 5 years of spanish in school and never got anywhere close to fluent. I was consuming the class content as it was doled out and didn’t have any desire to go out and practice. You hear anecdotes all the time of people taking trips to Mexico or Spain or Costa Rica and coming back with twice the Spanish competency compared to when they left. It is obvious the success can be attributed to immersion as a motivating factor. You are far more likely to half-ass learning how to order at a restaurant out of a workbook compared to when you are in front of a real waiter at a foreign restaurant.

“What Can Programming Do?”

My little flash animation showcase website was my project that got me into programming. Yours should be something you care about as well. It doesn’t have to be a website, it could be a program that reads a spreadsheet and outputs some helpful text. It could be a program that tracks expiration dates on your groceries. It could be a program that tracks how often you have sex. You could write a program to calculate how much you need to save up month over month to buy something. You could build a goofy chat bot that says funny things when you chat to it. You could even just build your own to-do list app. It doesn’t matter if it’s a novel idea or that there is an existing solution, you are trying to learn.

My recommendation would be to think of a project that deals with numbers or text as data. At least to start with. Dealing with images, audio, and video isn’t rocket science, but introduces concepts that might confuse a truly novice programmer. If you truly aren’t familiar with what a “program” is, use an online tool like codeacademy and go through the first couple lessons, I recommend starting with JavaScript. This will teach you the very basics of what programming is. Hopefully this will jog your noggin and maybe you will see how you can write programs to crunch numbers or save text or remember dates or display text. But critical to my point: you should never stray far applying your knowledge. As soon as you know enough to be dangerous, you should try your hand at building something.

“What Language Should I Learn?”

I get this question a lot. My blind answer is usually JavaScript and web technologies. My reasoning is that coding JavaScript and building browser applications is very visually oriented and immediately produces results you can show people. It’s easy to produce a goofy little website and have people visit it. With people able to enjoy your work, you can get feedback and be inspired to add goofier and more complicated features.

However, it depends on what you are trying to do to. Do you want to build programs that read spreadsheets and do statistics, kind of like what an analyst would do in excel? You want to learn Python. Python is a programming language that could benefit most all office workers that crunch data or deal with computer systems.

It can get more complicated. For instance: you can build goofy websites using Python, JavaScript, AND web technologies. Although for a novice, focus on getting your feet on solid ground and feel free to mix and match once you know what you are doing.

Good resources:

“What Should I Do?”

Go to meetups! So you have a basic idea of what programming is and perhaps you have done some reading online. Now it is time to collaborate with other people. If you go to school: see if your school has any coding meetups. Check Meetup.com for coding meetups in your area. Be a fly on the wall, listen to pros talk about stuff. Take notes. Ask people about things they have built. Ask people how they would build things you want to build. Talk to other newbies and ask what has been working for them.

Maybe take a class! If you need hands on instruction, go for it. You may have heard about coding bootcamps and stuff. I don’t have any recommendations on any specific programs to join but I would definitely recommend at least doing some online courses before paying for a bootcamp. My feeling is if you go in completely ignorant you are not going to get a lot out of it. You want to have an understanding of the basics so you can ask good questions and not fill your time tripping over pedestrian issues.

“What Equipment Do I Need?”

These days most any decent consumer computer is fine for entry-level programming. You need a full operating system though. Like Windows, Mac OSX, or Linux. Chromebooks and ipads and stuff like that won’t work.

If you are serious: I recommend using a Mac laptop. Any Mac laptop after 2014 should be fine. There are two main reasons I recommend a Mac:

  • Someone might be nice enough to mentor you. If you have a Mac, you can use both Mac OSX and Windows. Use the same OS as your mentor so your time together is productive rather than spent fixing platform-specific issues.
  • Using Mac OSX teaches unix concepts. If you learn how to set up a development environment on Mac OSX, those skills will kinda sorta translate to the linux world. If you learn how to set up a development environment on Windows, those skills are only valid for windows. (Footnote for a discerning reader: I am aware of the Windows 10 linux subsystem.)

Additional Tips

  • Learn linux. If you don’t know what linux is: you should learn what linux is. Even just installing it on your computer to mess around with is a valuable learning experience if you are ignorant about computers.