WARNING: This “Learn to Code” article is a work in progress…
I built my first website when I was eleven years old using a book called “Learn HTML in a Weekend”. Fifteen years later I’m teaching myself programming using (mostly free) online resources.
I’m going to use this blog to outline my experience and hopefully inspire you to learn how to code. This guide will be updated frequently as I gain experience and figure out the best way to learn all these subjects. If you want to dig right in feel free to jump ahead to the table of contents.
Why Should I Learn How To Program?
1. You have an idea for an app, digital product, or custom software but can’t afford a programmer.
2. You will be replaced by a computer—eventually. Why not learn how to replace yourself?
3. You work in social media, but don’t know what an API is…
4. You’re in digital marketing/digital media and you don’t know basic programming. You’re a sitting duck.
5. Programming is a highly marketable and in-demand skill.
6. Software is “eating the world.” Is your industry next? Are you hungry?
7. Your a project manager, or product manager and you work with developers. How the hell do you effectively manage developers if you know nothing about code or programming. Learn the basics.
8. You’re a knowledge worker. You spend 90% of your working hours on a computer. While learning programming you’ll improve your understanding of the machine you rely on to get your job done. You either run the machine or it runs you.
9. You’re an entrepreneur and programming skills are your secret weapon when applied outside the tech / digital industries. There are prime opportunities for innovation in old, un-sexy industries (think insurance, real estate, trades, etc.).
10. You own a small business and want to automate mundane tasks or improve your processes.
11. You have a mostly worthless business degree (or liberal arts /etc) and now you need a job. Software development is growing at a tremendous rate. Check out some stats from the Bureau of Labor Statistics.
I like building things. I like making something from nothing, with my hands or my mind. I’m creative. Building a business or a product is a creative pursuit. I want to learn programming so I can bring my ideas to life.
A Marketing Guy Gets Technical
I’m a marketing guy.
I know how to drive traffic. I know how to convert traffic. I know how to write copy. I love analyzing data in excel. I’m working on an article on how to learn marketing without going to college for this blog.
I live and breathe acronyms like CPL, CPA, MRR, CLTV, and ROI. I’ve designed landing pages in HTML and CSS. I know CRO and analytics.
I’ve developed custom Joomla and WordPress websites (like this one), Shopify E-commerce sites, static sites on frontpage/dreamweaver (a long time ago), etc. I’m pretty good at copying and pasting jQuery snippets. But I don’t have a concrete understanding of programming languages or the underlying infrastructure of the internet…And I want to. I have an insatiable drive to understand “how did they do that?”
About 6 months ago I read Andrew Chen’s Growth Hacker article. I knew I wanted to sharpen my internet swiss army knife. Sure I can build websites, manage PPC campaigns, buy media, drive traffic with SEO and content marketing, and increase revenue with social media…But I want more. More knowledge, more flexibility, more understanding, more skills. My ideas almost always outpace my ability. So I either need to find someone more able, or learn it myself.
Hence, my desire to step up my game and learn programming to pull all of these disciplines together.
The Best Free Ways To Learn Code Are Not Free
Stop right now if you think there is one best free way to learn code online. Tuck away your keyboard, shut down that laptop, and turn on the tv if you think this is going to be easy.
It’s not easy, and it’s certainly not free.
You’re going to spend a lot of time staring at a computer screen. You’re going to have to cancel plans with friends, family, and your girlfriend or boyfriend. You’re going to have to skip that concert, not watch the football game, and lock yourself indoors during the beautiful summer months.
Unless you’re a genius. And you are probably not, or you’d already know how to code. So get ready to dig in and I hope you’re in it for the long haul.
How to Learn Programming Online – My Curriculum
TABLE OF CONTENTS
Section I. Programming Foundation
1.2 Linux Basics
1.3 SSH / FTP
1.4 Shared Hosting Environments
1.5 Virtual Private Servers
Section II. Local Development Environments
2. MAMP / XAMP
2.1 Virtual Host X
2.3 Oracle VirtualBox
3.2 Codekit with Compass
3.4 GIT DVS
Dev Ops / Sys Admin
Databases & SQL
Semantic Web / Microformats
Rich Snippets / Schema
Front End Development
Mobile First / Responsive Design
Back End Development
Web App Frameworks
Web App Platforms
Amazon Web Services
Google Apps Engine
Ecommerce (Spree / Shopify / Magento)
Appendix / Resources
Learn Basic Computing Principles
When I first started I thought I understood how my computer worked.
After all I was the go-to guy for tech problems. I could re-flash the firmware on a router, I could setup a home or office network, I could network printers and reformat a hard drive etc.
It turns out I didn’t know much.
And now I’m backtracking and hoping that the concepts in the course below will pull a lot of the things I learned together. I wish I took this course a long time ago. The creators of the course taught it as a CS101 at Harvard.
But I didn’t know how little I knew until someone asked me what the processor in their computer does and why its important. I couldn’t explain it in simple terms. I couldn’t help them make a decision on which processor would be best for them and their unique needs.
I had no understanding of how the computer actually works. No background in hardware or architecture.
That’s why I decided to take the “Elements of Computing Systems” course, also known as From NAND to Tetris. I’m still waiting to receive the book and will outline my experience in the next few weeks. After reading the introductory chapters available on the website it looks like you have to know a programming language to make it through some of the course projects. They recommend java or python.
It just so happens that I’m concurrently learning python…though struggling to grasp the basic concepts as I find myself having to learn other things to solve high priority problems and put out fires.
Learn the Command Line
When I was about 11 or 12 I knew how to use Microsoft DOS. I don’t remember what I used it for, but I used it. Somewhere between then and now I lost those skills. So when I set out to learn programming I didn’t realize I needed to learn the command line (AKA shell), which seemed similar to my childhood DOS days.
The command line is where the magic happens.
It’s where productive coders spend their time. It strips away all the unnecessary fluff your accustomed to and just gives you “the shit you need.”
I like that.
So I like the command line. But I didn’t use it until I started learning GIT. So I missed out on a lot of fun, and a lot of things didn’t make any freakin’ sense…Like linux. Linux made no sense. After poking around on the command line for the last six months or so I’m starting to get it. And you will too. I promise.
Just don’t give up.
Make yourself use the command line. It will be hard. It will make some projects take three times as long as you estimated. You will delete things by accident, and screw up your GIT repo. It’s part of the process. Just enjoy it, and keep forcing yourself to use the command line.
One note: I didn’t really study the command line. I just made myself used it. When I needed to do something I googled and learned the command. After a few months I started to put the commands into Anki and created a set of flash cards. I didn’t study them often. I used the command line to navigate directories instead of Finder, I used it to SSH into my servers and abandoned my comfortable FTP apps, I used it to deleted, open, and move files. I’m trying to make a point here:
JUST USE THE FUCKING COMMAND LINE MOTHERFUCKER.
That’s the only way to learn it. Just do it, and use these resources as a reference.
Here are the resources I used to learn the command line:
iTerminal If you have a Mac go download iTerminal. Don’t think about it. Just do it.
Learn CLI the Hard Way A classic shell primer.
This article by Team Treehouse was helpful.
A Practical Guide to Linux… I rented this book from the library. It clarified some things for me. You’ve really gotta learn linux and shell at the same time to understand them.
Fish Once you get going, install this tool. Why? One word: autocomplete. It remembers you most frequently typed commands and reads your mind. Awesome.
Setting Up Sublime Text 2
There’s a number of text editors available for Mac and PC, and everyone has their favorite. I started out with TextMate because I have a mac. Actually, I started out on Microsoft Frontpage in 1997, made my way to Adobe’s Dreamweaver, tried out BBedit, TextMate, and others.
Finally I’ve settled on Sublime Text 2. And now I’m going to show you how to setup Sublime Text 2, how to use package control, how to customize the colors, highlighting, linting, and more.
I can’t yet think of a good metaphor for your text editor, but just know this—it’s pretty freakin important. You’re going to spend a lot of time using it. It’s essential that you have an environment you’re comfortable with and that you take to time to learn all of the keyboard shortcuts to maximize your productivity.
Read this book right now.
CSS3, Responsive & Mobile First Design
Ahh what can I say about responsive and mobile first design that hasn’t already been said. Before I did the CodeSchool and Treehouse courses I had already designed and developed 4 responsive projects. They were all very painful, lots of debugging CSS for browser compatibility and using CSS hacks to make my layout look good across a variety of devices. I’m going to list a few tricks and tools I learned about here, so that I remember them. Maybe it will help you too.
Notes on responsive and mobile first design:
Online Tools & Scripts:
CSS3 Linear Gradient Tool
Devoth’s HEX to RGBA Tool
QuirkTools Screen Fly
Adobe Edge Inspect
Responsive Maps Embeds – CSS Method
Brad Frost’s Resources for responsive design
Try these Chrome Extensions:
Chrome Develop Tools (you should master this tool)
Tools for your Mac:
iOS Simulator w/ Xcode
Safari’s developer tools (they integrate with the ios simulator allowing you to debug in ipad / iphone emulators)
Here’s my resources so far:
CodeSchool does too.
I’m adding these to my punch list:
Along with this tutorial: http://alignedleft.com/tutorials/d3/
Learning Regex Online
I’ve used regex before but only the copy-and-paste variety. It’s time to get dirty, as I need to do some segmentation and goal setup in google analytics. Here’s a good primer on learning regex in that context…It’s a good place to start.
Learning Python Online
When I first started looking at what programming language to learn everyone said “Python!” And they said it was soooo easy to learn.
It’s really not that easy. I thought it might be, and its not. Here’s a few of the resources I used for learning Python:
Appendix I. – Free Sites for Learning Code
Here is a comprehensive list of free websites to help you learn how to program online.
I took at least one class from each of the following. I found that each course presented code concepts in a different manner. Some were very effective for me. Some were not. Your mileage may vary. It turns out I’m a painfully slow learner (Edit 8/6/2013 – My learning has accelerated as I get past the beginners hump). I’ve had to take a few courses on each subject before the concepts made sense.
I just keep going, even when its ungodly frustrating. Hopefully you will too. I suggest you give a few different platforms a try and see which one works best for you. Or, you could follow along the path I used for this course.
Just keep in mind I’m frequently reflecting, reorganizing, and updating this guide. It’s a work in progress. It more like my personal programming journal.
Sometime I wish I’d understood a certain concept or learned things in a different order. When that happens I simply update the page. If you’d like me to add your site, or know of a good resource just write a comment below.
Khan Academy – I tried their course on Python and it was OK. They get into the nitty gritty stuff pretty quickly so if you have no experience programming I wouldn’t recommend starting here.
Udacity – Their Python course (Computer Science 101 and 200) are excellent. I’m currently working my way through this course. The course walks you through a step by step process of building a search engine and teaches you the required skills along the way. I highly recommend this course as it was interesting and well structured.
Learn Code the Hard Way Learn Code the Hard Way is a 100% free resource to get you started. Take the CLI (command line interface) course and then pick a language and get going.
Become a Programmer – MotherF*cker – Here’s a huge list of free books that will teach you anything you want to know. Get started.
Cousera – Yup you can take college courses for free. Save yourself $200k and sit in your pajamas and learn.
Learn to Program by Chris Pine
Rails Girls - A ruby on rails smorgasbord
Appendix II. – Premium Platforms for Learning How to Code
The following resources are pay-per-view content. Some sites offer monthly memberships, some are education marketplaces that allow you to purchase one specific course at a time from an independent teacher. Other options include code bootcamps, code schools, and remote code bootcamps.
I suggest you take a look at the Flatiron School Prework and follow their track first. I happened to have a membership at SEOMOZ so I received special pricing at Treehouse. I found CodeSchool was pretty good too.
UPDATE: 8/12/13. I finished most of the courses at Treehouse, and a bunch of CodeSchool. The Treehouse CSS / HTML track was much more in depth, and CodeSchool will serve as a good wrap up or summary of everything you learned at Treehouse. Do them both.
ThoughtWorks University (a job)
Learnable - Learn Web Development
RefactorU – Colorado web developer school
Appendix III. – Code Cheat Sheets
When I first started I decided to put all the info from these cheat sheets in Anki.
That hasn’t worked that well for me, though I’m still trying.
Maybe you use index cards or maybe you don’t try to memorize anything, I’m still not sure of the best approach and I’ll update you as I go. I know one thing for sure, when I use index cards to memorize anything part of the process is actually writing the index cards. When you write you’re triggering your Reticular Activating System (RAC) which sends a signal to the cerebral cortex to wake up and pay attention.
You may find that actually writing each term on an index card works better for you.
Edit 8/6/2013 – I’ve found my learning sweet spot, and surprise! its the same method that got me through the higher education system. It’s pretty simple: I watch the Videos (codeschool/ treehouse/ etc) and take notes. I frequently pause the videos to reflect. I complete the course challenges, then review my notes. Sometimes I’ll watch one hour of video, sometimes 4 hours. After every video segment I’ll review all my notes from all the previous segments. Then, I put the important stuff in Anki as index cards. Most importantly, I apply what I just learned to a project I’m working on. Then its just about reviewing and rewriting notes, studying Anki, and implementing the skills in a real life project. Again and again.
That’s it. There’s no secret. I’m not very smart, so you can do this.
Unix Cheat Sheet
Command Line Cheat Sheet
Liquid Cheat Sheet
CSS3 Cheat Sheet
HTML5 Cheat Sheet
jQuery Cheat Sheet
Git Cheat Sheet
Python Cheat Sheet
Other cool ways to practice your newly acquired skills:
Math stuff you can practice: http://projecteuler.net/problems
Practice reverse engineering here: http://www.crackmes.de/