Last Friday, my wife Nicole and I released the first prototype of our web app. It was only made available for Nicole's family, but it will soon be made public for everyone (for which we literally could not be more thrilled). We dreamed of this web app all the way back in May. We envisioned, outlined, calendared, strategized, pitched, campaigned, and then eventually programmed the app into existence. Yes, we math-deserting, humanities-driven pair of bohemians actually learned how to code.
And we did it mostly for free, saving us upwards of $25,000 that's often advertised as tuition for web development bootcamps (for two).
After the somewhat grueling but incredibly rewarding and ultimately empowering process of coding an app for the first time, I have a few thoughts to share.
I am a firm believer that everyone should learn to code. I had my first inklings of this belief while attending a college class at Columbia, when Jeffrey Sachs, Sustainable Development ambassador and extraordinaire, taught that technology is the crucial variable that pushes human societies forward. Even though technology is comprised of many fields, of which computer science is just one, software engineering has one of the flattest learning curves (and by flattest, all I mean is just less steep than, you know, rocket science, curing cancer, and genetic engineering). It's relatively doable. In fact, computer languages have evolved to higher levels of readability and simplicity, and Ruby on Rails even boasts a famous video where someone throws together a blog in fifteen minutes. Furthermore, I've spoken with numerous individuals who have learned it without technical backgrounds over a period of months. They weren't amazing at it, but they had built fully functional applications that were on the cusp of solving major problems in the world around them.
I even think that it is the layman's responsibility to learn to code, that it's everyone's opportunity to leverage science as a way to push the human race further, together. We can't all contribute to the progress of scientific studies in the world around us (or maybe we can -- or maybe we will, when someone programs an app for that!), but we can all program a simple app. I say this with confidence because I just programmed my first app (with some amazing help from a few online resources (and a few human)) in two months. And if I can do it, anyone can.
Two months ago Nicole and I sat down and told ourselves we would learn to program. I had spent most of my life avoiding the whole profession, since I determined early on that I would take the road less traveled, and study humanities (a rare major for a Chinese male). At the time, practically all of my childhood guy friends were studying some type of engineering. [Alas, my predominantly-Asian-high-school worldview has since changed, having recognized that, clearly, too many of us romantic millennials opted for the humanities over the sciences.] With this I-would-rather-eat-dirt-than-do-math attitude, we planned for months of finding someone else. We originally wanted a technical cofounder to code it all for us, but none of our prospects seemed to pan out, and we weren't interested in "settling" for just anyone (at least not someone you'd spend half of everyday with!). This cofounder's personality, ambition, stage in life, work ethic, and lifestyle needed to spark some chemistry with ours, and after some deep combing of our personal contact lists, we came up empty.
Two conversations with friends of ours (Kimball Bighorse and Logan Deans), convinced us that we can try to throw something together ourselves. Logan gave us two weeks, which actually was insane but somewhat advantageous; it made us speedily endure through the often tedious and frustrating beginnings of learning how to code. After three months of mountains and valleys of joy and pain, we somehow, someway, through divine fortune and miraculous happenstance, built our web app. And we couldn't have done it without some incredible help from friends like Will Chou, Trent Hazy, and David Rockwood.
The two hardest aspects of programming were 1.) learning to think in its problem-solving mindset and vernacular and 2.) understanding all the components and resources at your disposal. But it's not impossible, and in fact, it's absolutely within your reach.
If you've decided to take the plunge, read on!
Instead of spending $12,000 per person at a development bootcamp to learn how to code, I encourage you to teach yourself. Dream of a world changed by an application you would build, and build it. Learn how in a few months. See below for the ten resources Nicole and I used on our quest to programming zen.
1.) Watch this video from General Assembly (free). It changed my attitude from "I don't know about this" to "I can do this, yes, this is awesome!" Some NYU philosophy major talks in very human terms how he did it and you can too. Enlightenment leads to empowerment.
2.) Codecademy (free) is a great website to get your feet wet. Simple, digestible lessons that take you step by step into different annals of computer linguistics (HTML, Python, Ruby). Although I loved dabbling in it, and it was fun to get badges and score points, I didn't find it as useful in the long run. I resigned from my job because I wanted to actually create a project of my own that I can keep, iterate, and put online, and Codecademy does nothing of that sort (yet). I thirsted for some organic, exploratory experimentation (a vital component of self-taught learning), and got it elsewhere.
3.) I got it here: the infamous Rails tutorial. The free web-only Ruby on Rails Tutorial by Michael Hartl was a godsend to say nothing of the to-pay-for screencast tutorials for the ever lost amateur programmer. This tutorial will take you from knowing practically nothing to building Twitter (or, at least, the beginnings of Twitter, which is impressive and confidence-building).
4.) Why's Poignant Guide to Ruby (free) was by far the most entertaining (and most bizarre) read of all the guides out there. It's simply a static website (which means it's not interactive, with no "projects" to complete, but it's a great, elucidating resource nonetheless). This guide made me fall in love with the idea of self-teaching through online content. This guide made me realize that there are people all over the world who care more to impart their knowledge than to make money. I was thoroughly infatuated with the pay-it-forward mentality of the programming community; and since everyone practically lived on the Internet, there is even a more thriving community of sorts online than there is in person. It's almost as if I didn't even miss a beat staying in, eating leftovers, and hacking away.
5.) Rails for Zombies was a fun, (mostly) free introduction to the Rails application infrastructure. It leans on its sense of humor to keep you enthralled, and it does a decent job at that. Again, similar to codecademy, it doesn't let you bring anything home with you, so it wasn't as helpful in my book. Tryruby.org is another website with a similar setup and style, but they're great as an orientation.
6.) Learn Python the Hard Way (free) is a great resource too, as it infuses its instruction with brass personality. It feels like you're actually with a passionate professor who cares just as much about you (and your success) as he does the subject matter. It is so famous that there are translations in practically every (computer) language (e.g. Learn Ruby the Hard Way). The reason it's called "the hard way" is that it preaches to its students to type everything they learn character by character (and not just copy and paste the code). Not exactly that hard; it can just be tedious at times (but oh, so worth it!).
7.) When I first met Stackoverflow (free), it was overwhelming. I understood nothing and everything was a mystery, and it took many a Google search for software bugs to get truly acquainted with the site. It's basically the grand master Q & A site of the hacking world. Practically every question I've ever had is listed on this site, and someone has an answer. And even when the questions don't exactly match up with yours, the answers often clarify a principle relevant to your undertaking. Bona fide life saver five times over, every single day.
8.) Railscasts (free to $7/mo)! Practically anything you ever want to implement into a Rails app, Ryan Bates of Railscasts fame has made a screencast for it. Step by step, Bates articulates exactly why and how to build anything. Some days, because of Railscasts, it takes me fifteen minutes to implement a new feature I've never done before. Yes, sometimes, the race is to the swift.
9.) Github (free) is the open online depository of open-source code on the web. This is a great place to browse (and even download and run) well-written code, so that you can get more ideas on how people solve certain problems. Essentially, problems can be solved in numerous ways, but there's often better, more efficient, and more powerful ways of solving a single problem. If the Internet is your university, this is your university library.
10.) Team Treehouse ($25/mo) is a web portal chock full of videos on how to code front-end and back-end. I personally didn't touch this site, but Nicole used it quite a lot to get a handle on HTML and CSS. Her only furor with the site was that you can't watch just any video you want; you have to advance levels before being able to watch certain videos. Not the best for someone interested in exact solutions for a real website, but perfect for someone who is just expanding her skills repertoire for future implementation. She also used macProVideo (also $25/mo), but can't stand how both this and Team Treehouse are as corny as Ohio.
May the world be with you on your technological pursuit to push the human race further.