Erik Trautman logo crest shield seal

Erik Trautman

“Everything you can imagine is real.”
-- Pablo Picasso

The App Academy Student Journey

*Note: It’s been a long time since I wrote this and it’s been a surprisingly popular post. Since then, I’ve founded the Viking Code School, an online software engineering program that takes exceptional aspiring developers and makes them job-ready. Our mission is meant to bring this level of education to people who cannot uproot their lives to attend an in-person program and I encourage you to check it out if this path interests you.*

I got into App Academy in late December and it’s pretty much consumed my life ever since. The San Francisco-based program is a 9-week intensive dive into Ruby and Ruby on Rails designed to take people with little or no experience in computer programming and turn them into junior web developers. They are an offshoot of the original Dev Bootcamp, which began offering a similar style of classes about a year ago and has enjoyed great success.

The major selling point of App Academy, though, is that they forgo their hefty tuition if you cannot find a technical job within 6 months of graduating. In a world where the link between education and employment has been getting weaker and weaker, this kind of selling proposition has a powerful appeal. Although I managed to get into their initial January class*, they are currently booked in their San Francisco location all the way into the summer.

So why is it worth forking over more than 10 grand (or a healthy percent of your starting salary) to learn something that plenty of people have figured out on their own? I’m still rolling that question around in my head but one thing is clear: I learned significantly more in the first month than I ever would have by just forging ahead on my own. I just can’t imagine how I would have ever learned such focused and contextual knowledge on my own in less than a year.

So what exactly happened? I’ll be as brief as I can but it was a very dense 9 weeks.

It started with about 100 hours of prep work meant to build a foundational understanding of Ruby. From the moment I got the email containing that assignment, I spent 90-100 hours a week either coding, thinking about coding, or reading about coding. It has been all encompassing. I had dreams about array operations for a month.

In the first two weeks alone, we made it well past basic Ruby and through algorithms, obect-orientation, recursion and a host of other essential programming principles. Aside from an hour of Q&A throughout the day, we spent the entire time pair programming on various projects. These exercises grew in complexity from rewriting Enumerable methods to producing a host of classic games like Towers of Hanoi, TicTacToe and Minesweeper. Every new day brought a new pair, a new chunk of knowledge, and at least one new project. We finished the unit with Chess, a classic programming and logical challenge that made a great capstone to our Ruby achievements.

We quickly pushed forward to give our code, which was beginning to flow quite smoothly, access to the world wide web and the infinite bounty of web APIs. We hacked together a couple of Twitter spambots and an application to find the nearest Ice Cream shop. Things were starting to get interesting. We also took a detour into testing, an area that really displayed its necessity in the more complicated exercises like Chess, where constant checking of victory conditions quickly got frustratingly time consuming.

Ruby took a back seat for a couple days while we dove into SQL, beginning our long march from the very back end up to the front. The ability to persist data filled in another of the essential missing pieces of the developer puzzle. With superhero mastery of SQL under our belts (okay, at the very moment we totally hit the wall with some really insane baseball database queries), we were granted access to the limitless bounty of ActiveRecord, a library that abstracts away all the nitty gritty details of queries and lets you play with tables just like any other Ruby object”¦ magic!

And magic it was”¦ like a doubletake on the highway, we belatedly realized what this meant: we were officially On The Rails. ActiveRecord is the foundation and, some would say, the most important part, of Rails. It saves you from having to think half database and focus on just building web apps by abstracting away the details of the interactions. We spent the better part of a week, an eternity in the pace of the class, getting intimately familiar with models and associations and through tables and validations.

My first introduction to Rails (via Hartl) had been from front-to-back, a less threatening approach seemingly designed to ease beginners into it but light on true understanding. This time I came to the table brimming with confidence in my understanding of the fundamentals and ready to see what came next. It was an empowering feeling. And, by just the end of week 4, we had already made apps that contained CRUD functionality, homemade user signins, authentication, and authorization.

After a nice “leisurely” weekend of doing nearly the entire Hartl tutorial (which took me over 50 hours the first time around”¦), we kicked off another week of Rails, pulling in some of the test-driven principles we’d picked up in Ruby and applying them to more formalized unit and integration tests. At the end of the week, the midterm project was a refreshing break from pairing to produce an original CRUD app using TDD. Things certainly move slower when you have to debug TWO languages, but it helps that there’s sort of a light at the end of the tunnel”¦ Testing really does help, I’ve seen it with my own eyes.

Just when we’d gotten to a comfortable place with Rails it was onto the next thing: Javascript. And what a transition! I can hardly imagine two different languages. Going from a very linear and organized view of the world using terse syntax and nearly infinite helper methods to a multi-threaded functional language with explicit syntax and very few pre-existing helpers was a bucket of cold water to the face. It felt like we were juggling too many balls in the air. Thank goodness for JQuery at least making DOM interaction a breeze.

Despite the awful spaghetti code we started out with, the next few days were a lot of fun. There’s something refreshing about being able to make a change and see it appear in the browser. We built games using the HTML5 canvas, which allows you to play with geometric shapes defined and refreshed using algorithms. Asteroids, Missile Command and Snake all succumbed to our newfound 90’s game prowess.

Finally, midway through the sixth week, we remarried Javascript with Rails and began having them talk to each other without page refreshes by using AJAX. We finally gotten a handle on setting up asynchronous requests and building the right combination of event listeners and handlers to keep the user interaction logical and fast. We built photo tagging apps, Github-style gists, and Where’s Waldo? These things really required a delicate dance between a Rails backend, a Javascript frontend, and the proper associations to make complex form submissions work seamlessly.

The final two weeks were another chance to solo and another chance to express creativity during the capstone projects. I put together a vacation follower app, spending the first week implementing all the Rails-side functionality to handle authentication, authorization, sessions, following, subscribing, admin permissions, privacy, use of Devise (which nuked all my tests), and finally API interactions with Instagram, Twitter, Tumblr, and Flickr. We had lightening talks every day on issues as diverse as OmniAuth (for Facebook signin) and formal Computer Science-style data structures.

I used the second capstone week, after recovering from a full weekend spent immersed in API documentation, to roll my own slideshow feature in Javascript and CSS. I learned that, A) things always take at least twice as long as they should and, B) tests are still very useful. The project came together and I managed to display a feed of media tagged with a specific hashtag shared by that user and his friends in a way that didn’t look half as awful as it could have (just don’t view it on mobile”¦).

Demo day was almost a blur, with hours spent presenting my project, checking out what the others had built, and speaking with employers. I found myself dialing back the sell a bit, though, since I already knew my plans for after the course ended and I didn’t want to distract too much from the earnest efforts of my classmates to get hired. By Saturday all the beers had been drank, the contact info had been exchanged, and a half-paranoid feeling of undefined urgency lingered from the intensity of the previous nine weeks. It is simultaneously thrilling and completely exhausting to be constantly kept running at capacity for such a long period of time.

So I rented a car, hopped onto the PCH, and got lost in the redwoods”¦ and didn’t dream of code for the first time that I could remember.

*(aside from a beta test during the previous summer)