A little over 4 months ago, I decided I was going to learn to code.

Ignoring the fact that I had no prior coding experience and had never taken any “technical” classes in school, I decided to build 180 websites in 180 days with no days off.

Today is Day 115.

Background

My background is in art. The thing that originally drew me to art is that it’s an avenue to explore how people represent themselves to the world. What clothes we wear, our mannerisms, and how we communicate. In the past I’ve tried to capture this projection of the self with drawings and sculptures.

But now it is 2013 and we are no longer governed by physical media. We have the internet! The internet is awesome because it breaks down so many obstacles that used to inhibit communication. Barriers to communication are so low, in fact, that we feel compelled to create virtual identities in order to communicate and interact with each other.

An artsy website from week one.

I think this virtual interplay is ridiculously awesome, and I’m not satisfied with just being part of the conversation. I want to be able to create the communication channel that makes these interactions possible.

What’s the best way to learn to code? After pondering this question for way too long, I decided to JFDI. But instead of just starting aimlessly, I decided to adhere to a simple and strict structure:

Build a different website every day for 180 consecutive days. Every website must be accompanied by a blog post. Any code I write must be made publicly available on GitHub (open source) so that everyone can see it.

It’s scary to have all of my mistakes and misunderstandings out in the open. The fact is, that if you want to learn to code you are going to make a lot of mistakes, but just because your code might look a little goofy doesn’t mean you should stop coding. And you don’t need to be a certain type of person, you don’t need to be a math whiz, and you don’t need any prerequisites, because the compiler doesn’t give a damn about that. You just need to start typing.

Simon, week 4.

No bootcamps, no books When I decided I was going to learn to code, the first step was to figure out how I was going to go about it. There are a lot of options to consider. There are tons of courses you can follow or boot camps you can sign up for, but none of those really appealed to me. I think learning to code is a lot like learning to roller skate. You might need a helping hand to get your footing beneath you, but to gain any real finesse you’ve got to do it on your own.

I think the best way to learn is to solve problems that you actually have. This is the primary reason I decided not to follow a course or textbook. By following my own path, I can tackle new concepts and problems in the most logical order possible, which is precisely when I have them. When I have questions, I look them up on Stack Overflow. If I need to make a big jump, like starting a new language or platform, I’ll bootstrap off of a textbook only until I get off the ground.

Learning about objects with the Little Dude in week 6.

Day-to-day Working from home wouldn’t have been a good idea, so I do almost all of my coding from an awesome co-working space in SoMa. Besides providing me with my own desk to call home, I get all the free diet cokes I can drink and all the jelly beans I can eat. For hardware, I’m using a 13" Macbook Pro hooked up to two monitors, because if there is one thing I love, it’s screen space! I’ve also got a little Jambox on my desk for late night dance parties.

I start each week by writing a blog post about my impressions of the previous week. Every day I push my code to GitHub, deploy the day’s website, and write a daily blog post. After that, I usually end up fixing a million bugs and typos I missed before pushing the website live. I’ve done this 114 times so far.

Paratroopers game using physics from week 8.

From CSS to Javascript to Rails At first, my websites were very simple: some html, a little css and a couple of lines of javascript. Over time they’ve been getting more and more complex. I’ve made games, calculators, clocks and silly kittens. Right now, I am pretty comfortable with CSS and I am developing fluency with javascript. Recently, I started using Rails to build dynamic websites that allow people to communicate with each other and make profiles. Playing with Rails has been super exciting since it allows me to transition from making games and toys to building actual tools. I’m not sure what technology I’m going to try next or what platform I’ll be using at the end of this project, and that is super cool.

Not having a clear cut path for this project has allowed me to explore whatever concepts strike my fancy. It turns out that what I want to work on next is hugely influenced by what I’m currently working on. Much more so than I would have originally guessed. Earlier in the project, I wanted to make a simple weather app and I needed to find a way to get weather data. All of a sudden I became interested in APIs. But ajax doesn’t work cross domain, so that led me to JSONP. Honestly, I never thought I would be interested in JSONP. Finally, since there aren’t terribly many APIs that even support JSONP, I became inspired to start working on Rails sooner rather than later.

Rails website from week 14

But what if you just …? Often when I tell people about what I’m doing they immediately start looking for loopholes. I’ve fielded a lot of questions like, “Why don’t you just skip today and do two tomorrow?” While I know everyone means well, there aren’t any loopholes because I made up the rules and there aren’t any loopholes.

Something on the fun-side from week 16.

It’s hard Building new stuff every day is hard. Coming up with new concepts can be exhausting and switching from brainstorming mode to execution mode isn’t seamless. But the hardest thing about this project is that, in a sense, every day I fail. Every website that goes out the door is unfinished and since I’m something of a perfectionist, the temptation to redo or extend every website is really strong. The thing is, the way forward is not to keep tinkering and tweaking to make something perfect. The way forward is to move on to the next concept and build it.

Websites

Day 110 Effects

Day 109 ColorWorks

Day 106 Wish

Day 101 Globulator

Day 99 TOS

Day 96 PostBored

Day 95 Sparklers

Day 94 Mastermind

Day 93 Swivel

Day 91 Pinwheel

Day 89 Hourglass

Day 86 Snare

Day 83 Hollywood

Day 81 Capture

Day 78 Hangman

Day 77 YourSpace

Day 76 PixShow

Day 68 Metronome

Day 65 Fade

Day 58 Fireworks

Day 56 Hooray

Day 55 Paratroopers

Day 54 Calculator

Day 51 Memory

Day 48 Static

Day 47 PONG

Day 46 Snake

Day 26 Simon

Day 23 Stopwatch

Day 21 Teleprompter

Day 16 Caterpillar