I learned to code by building 180 websites in 180 days and I’m really looking forward to a vacation!

For the last six months I’ve been putting in countless late nights and stressing out over many near failures but it was all worth it to reach my goal.

The details of what I’m talking about can be found in this blog post, but the TL;DR version is that with no prior coding experience, I decided I wanted to learn to code. Instead of going through a course or bootcamp, I chose the JFDI approach and followed these three rules:

Build a different website everyday 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.

Background

My background is in fine art. I was drawn to art because it provides a platform for exploring how people communicate and interact. In the past, I explored this interpersonal communication by making sculptures and drawings. But soon I began thinking about technology.

Technology, especially the internet, has opened up all of these amazing communication channels that allow us to broadcast and consume vast amounts of information. I think the internet is amazing, and I’m a little obsessed with the how cool it is to be able to communicate through the computer. However, not everyone shares my passion for the internet, so how could I show them just how cool the internet really is? I realized that no drawing I could make would be able to capture the power of the internet. I wanted to get in there and build those communication channels myself.

From CSS to Javascript to Rails to Node

I started by making very simple websites with just a little bit of CSS and JavaScript. Soon I was playing with complex CSS animations. By day 37, I was digging into js by exploring the <canvas> element. On day 69, I made my first Rails website which opened the door to building sites that allow people to communicate with each other. On day 119, I made my first Backbone app, though I’ll admit I was pretty confused the whole time. By the end of the project I made everything from games to toys to tools. I tapped into external data using API’s from companies like Instagram and Twitter and I built real-time dynamic communication apps using Node.js.

How Did I Do It?

One of the most important mantras for me has been “Start Small. Keep Building.” When I set out on this project, I knew I wanted to learn to code dynamic interactive websites, but I also knew next to nothing about coding. Rather than try to tackle the enormous task of building a complex, fully functional social network, I took a small first step. I pieced together a few bits of html and CSS to make the website for day 1, the homepage for the project.

It took me a full day of Googling for just a tiny bit of markup. I could have used books or courses, but instead, throughout the project I found everything I needed on sites like Stack Overflow, MDN, CSS Tricks, blogs and demos. I also used some great online tutorials, like the fantastic Rails Tutorial, to get more complicated website ideas off the ground.

Tackling small goals gave me small, solvable problems which led to new small goals and more small, solvable problems. Eventually, after I solved enough small problems my conception of a small problem changed. A small problem for me on day 100, for example, is much more complex than a small problem on day 1. Bit by bit I inched toward being able to make dynamic websites.

What Else Worked?

Having a strict, one day deadline was also helpful in maintaining rapid progress. Having to produce something everyday forced me not to get hung up on understanding all the details of how something worked. It’s easy as a beginner to get trapped by confusion, dwelling on one concept for a long time, trying to understand it. I found learning to code a little like putting together a giant jigsaw puzzle. You can grab one tile and study it very carefully, but it’s not going to tell you very much about where it goes or how the whole puzzle looks. You’ve got to start collecting a bunch of tiles and piecing them together for you start to get the big picture.

What Didn’t Work?

At the beginning of the project, I was putting enormous pressure on myself to be perfect. I was overly concerned with getting every detail just right and feeling like a total failure if things didn’t turn out the way I had hoped. It started driving me insane. Having all of my work out on display was super scary but I had to learn to allow myself to not be perfect. Nothing is perfect, especially while you’re learning, but not perfect doesn’t mean failure. Through out the project I’d find myself obsessed with getting every feature in and staying up until 3 am trying to get everything just right. I would even lose sleep worrying about minor features.

What’s Next?

Keep coding! The end of my 180 websites in 180 days project marks the beginning of the rest of my life as a coder. The project certainly hasn’t given me a comprehensive understanding of software development, but it has laid a broad foundation for me to jump off of. I plan to work on a couple of more complex websites that take more than a day to complete. Doing some larger websites will allow me to fill in the gaps in what I learned through this process. After I feel like I’ve filled in the gaps a bit, I’d like to work with a smallish team of passionate people who are equally interested in making awesome stuff happen. In the mean time I’ll continue to blog about my learning process and post my code on GitHub.