App Academy notes

Today was my last day working at App Academy. I might have shed a tear as I took the elevator down to Market Street for the last time in a while. I'll really miss my students and my coworkers.

Now that I no longer work for them, perhaps people will take me more seriously now when I tell them how much I like App Academy.

I took App Academy from November 2013 to January 2014. Just before the course finished, I was offered a job as a TA there. I worked there until I flew back to Australia in July.

I've written this summary of my perspective on App Academy as a resource for prospective App Academy students, or anyone who's interested in a detailed profile of a bootcamp.

I wrote this particularly for people from the effective altruism movement, and some parts of this document will make more sense if you understand that part of its origin. The Bay Area is one of the hubs of the EA movement, which makes App Academy especially attractive to EAs who want to move here.

I did an interview with 80,000 Hours (an EA organization) about App Academy a few months ago, and have been getting a good rate of questions from prospective students since then. I hope that this will answer a few of those questions for people.

I am still very happy to answer the questions of prospective a/A students, especially if those prospective students are part of the EA movement. If you're planning on giving significantly, I am also happy to give you as much assistance preparing for the application process as I can.

This is accurate as of July 2014, and much of it is specific to the San Francisco office (App Academy West, as some of us call it).

I also write this partially because I really wish App Academy were a bit better at openness. They're cool with telling people more more about the program in general, they just haven't done a good job of writing it up themselves

I have run this article past them to make sure that they don't mind me saying any of it publicly; I'm pretty sure they would agree with most of it, including my criticisms.

Are you skeptical of my honesty in any of this? Great, you should be! You should email a randomly selected former App Academy student and ask them if this article is broadly accurate.

If anyone finds any highly critical accounts of App Academy from former students, please send them so that I can link to them here in the interest of even-handedness.

Program details

There aren't that many details about App Academy available online for some reason. I'm trying to rectify that with this section here.

App Academy is supposedly a twelve week program, but that number isn't actually very accurate. The first nine weeks are full time, 9-6, supervised work. Of those, the first seven weeks are coursework.

During the first seven weeks of coursework, most week days go pretty much the same. At 9am, there's a lecture, which covers the contents from the readings the previous night. The lecture ends a bit after 10 on average. The lectures are delivered by the TAs or Ned.

Ned is one of the cofounders and the head instructor. Ned is an extremely smart guy, and a reasonably good teacher. However, by far his greatest skill is curriculum design. The App Academy curriculum is one of the most valuable parts of the whole program. I think that the Ruby curriculum (the first two weeks) is the best intermediate programming resource I've ever seen. I refer to it regularly.

For each day, we have some combination of readings, exercises, and projects. You do the readings the night before class, then you do the exercises and projects in class with a partner the next day.

The TAs are all former App Academy students. All of them were at the top of their class. Students sometmes come into App Academy thinking that we TAs are the dregs of the previous classes, who needed to be given jobs to keep the App Academy hiring rates up. This misconception is pretty annoying. Luckily, after they've seen us debug their work for a few weeks, they start thinking of us as wizards instead.

After the lecture, students spend until 6pm working on the exercises and projects with a partner. Students are allocated a random partner every day. They swap between the driver and navigator role approximately every 15 minutes.

One of my favorite things about pair programming is how quickly little tricks spread throughout the class. For example, suppose I learn one day that you can use ctrl-A to jump to the beginning of the line in bash. My partner thinks this is awesome, and remembers it. Then the next day, both of our partners will hear about that. And so on, until it's spread through the whole class.

It's really hard to learn about slightly better ways of doing things when you're programming on your own. For example, if I'm used to writing line.map {|x| x.to_i}, it's unlikely that I'll be frustrated enough by the slight verbosity to google it and learn that I could write line.map(&:to_i) instead. This kind of trick spreads like wildfire thanks to the conspicuous pairing we use.

We have an assessment most Monday mornings of the course. We send out a project skeleton with a bunch of test cases, and the students have to code until as many as possible of the specs pass. I love testing by spec: it's a great way to avoid losing marks due to unforced errors, and seeing specs turn from red to green is super satisfying.

Final projects

The coursework finishes in early week 8. The next two weeks are spent working on a final project. People generally clone an existing web app, like Trello or Airbnb or Twitter, for their final project. During this time, we don't generally have lectures in the morning, and the TAs are mostly around to help students as they get stuck.

On Friday of week 9, we have a demo day. Everyone shows off their final project, and our chief evangelist, Simon, gives them an introduction to the job search.

Job search

App Academy doesn't really shed much light on the job search process in our online description of ourselves. We put a bit of effort into having good relationships with companies, and we act as a recruiter for a few students per cohort, but most students get their jobs by applying to companies directly.

We use the phrase "spray and pray" to describe the job search strategy which we recommend to our graduates. They aim to send out 200 applications by the first three weeks of their job search process.

Our job searchers make a fine art out of mass job applications. I remember having a conversation with my friend John when he was job searching. We were clicking around on the internet, and ended up at some startup's webpage. He decided to apply for a job there. I was amazed at his speed as he edited his cover letter to include the name and area of the startup, exported it to a PDF, attached his resume, opened up his standard email template, and sent it off.

But our grads don't just spend their days frantically filling out application forms on the Careers pages of various startups. They also pair board every day at 10am. Pair boarding is where the students pair off and ask the other a coding problem to solve on a whiteboard, like they'd do in an interview.

a/A provides advice through the job search process. We have a guy whose main job is giving advice on getting jobs. People ask him questions like:

  • Should I be concerned that this offer is contract-to-hire [that is, it's an offer for a contracting position, with the understanding that the candidate will get a salaried job after the contracting]?
  • They asked me what kind of salary I'm looking for. How do I answer?
  • Should I say that I'm a full stack web developer? An aspiring software engineer?

Simon is very valuable. He made my half-assed job search much better, and I'm really glad to have him as a friend: I certainly plan to bug him for job search advice in the future.

How many App Academy students actually get jobs? Most of them; I basically believe their statistics on this.

Living at the office

As of mid 2015, this is no longer allowed :(

As a result of App Academy's financial model, they end up with a bunch of really smart but poor students. To make it easier for those people to attend (and then job search for however long it takes), students can crash at the a/A office if they want. Even though I could have afforded real accomodation, I chose to live at the office during a/A (and for about four months after they gave me a job, but that's a different story.)

The office don't provide much to these people beyond floor space. People buy air mattresses and gym memberships to shower. We have a shitty office kitchen which has a few hot plates and microwaves, and people eat out quite a bit.

I loved living at App Academy. The complete lack of a commute made my life much better. I remember thinking that living at a/A was among the most time-efficient stages of my life: I spent almost all my time studying and hanging out with people, as opposed to sitting around alone at home or commuting.

I have a few personality quirks which inclined me to enjoy living there more than most people, though. I'm very extraverted, so I had no problem being around people pretty much all the time. Also, I don't mind living in places which are extremely messy and dirty, as long as I'm not actually going to get illnesses from them. Many of the office's inhabitants do not like living there as much as I did.

Commentary

The most common complaint about coding bootcamps is that they can't possibly teach you as much as you'd learn in a real CS degree. For example, this one person said that you need to know recursion, binary search, Big O, etc. (This was a line in a Quora answer which I can't find anymore.)

That particular quote is funny because everything in that list is covered explicitly in weeks 1 and 2, except for Big O, which is mentioned in passing throughout the course and then discussed explicitly in the post course curriculum.

If we're allowed to unilaterally pick a list of things that a "real" programmer should have been exposed to in their education, I propose the following list:

  • in an imperative language, write a function curry(f, numArgs) which takes a function f and returns a curried version which takes numArgs arguments. Eg curry(function(x,y) { return x + y; }, 2)(5)(6) should return 11
  • implement a version of bubblesort which uses an asynchronous comparison function. Everything has to be done recursively using callbacks and closures.
  • know how to metaprogram: write Ruby which defines Ruby methods with generated SQL inside them, to implement the main functionality of ActiveRecord.

I think that it's pretty reasonable to say that these are pretty fundamental CS constructs. I bet that very few university graduates implemented things similar to those. I certainly hadn't.

There is some important stuff that the average CS grad knows that the average a/A grad doesn't. In particular, a/A grads generally don't know much about computer systems, or how to write C. But they've been exposed to it: they have heard of malloc and free and have seen implementations of self-resizing arrays in C, even if they haven't written the implementation themselves.

And I admit that the ideal CS grad is far more knowledgeable than the average App Academy grad. I've been very impressed with what I've seen of Stanford's computer science curriculum. They're way ahead of us.

But I think that Stanford vs App Academy is the wrong comparison. We should be interested in how good a/A is compared to a typical university, not one of the best in the world. I think the average App Academy grad probably knows more than the average CS grad from my university, which is one of the top Australian universities for CS. We should compare App Academy not to an ideal university student, but a real one.

How does App Academy do so well compared to universities? Well, if university takes you 40 hours a week, then you're supposed to spend ten hours per course per week. Courses involve about 20 weeks of learning. That's 200 hours per course. My university required 8 CS courses to get a major. That's 1600 hours of CS education.

How does App Academy compare? It claims to take about 90 hours of work per week. I think that most people probably spend closer to 70 or 80, on average, over the first nine weeks.

So about 75 hours per week for about 9 weeks. That's 675 hours right there. We also assign prep work before App Academy, which teaches more material than some intro programming courses I've been involved with at university. And we teach algorithms and theory afterwards. That's easily 800 hours of work.

So all I'm claiming is that App Academy is about twice as efficient at teaching as your average university. I don't think this is a hugely big claim. Here's why.

Reasons why a/A is so efficient

App Academy covers content much faster than most university courses. We can get away with this for a few reasons. To start with, our students are much smarter than average ANU students. We also aren't afraid of kicking people out. This means that the lowest common denominator is much higher than it was at university. We don't need to cater to those people here, so everyone learns faster.

Productivity is all about making it so the ideal behaviours don't cost willpower: you want the productive actions to be your default. App Academy gets this to happen in a few different ways.

I moved to California to do App Academy, expecting it to consume much of my life. This made it very easy to focus during the evenings. Study in the evenings wasn't an interruption to my normal routine, it was my normal routine.

Pair programming is essential to the program's success. It's much harder to slack off when you're working with a partner than when you're working on your own. Plus, it doesn't feel nearly as effortful to work hard for two hours when you're constantly being egged on by a partner.

Students at App Academy get very rapid feedback cycles. Every single day, you get a perception of how well you're doing at the day's project, relative to your pair and everyone else. This enables people to notice very quickly if they're falling behind. We also have tests every week, as another source of feedback.

When you're programming, and especially when you're just learning, a bit time sink is getting stuck with some bug that you don't know how to fix. This happens a lot less at App Academy. One of the great things about pair programming is that your partner often spots mistakes that you wouldn't have spotted immediately yourself. For example, variable name mispellings happen a lot less frequently here than they did back when I was teaching Python at ANU.

App Academy can also afford more expensive teaching methods than universities can. Students at a/A spend most of their days programming, supervised by TAs. Programming, with assistance when you get stuck, is a fantastic learning method for learning programming. However, it's financially impossible for most university courses. Most courses at ANU have about 2 hours per week of time in a lab with a TA, with a student/teacher ratio of about 15:1. Here at App Academy, the student/teacher ratio is 8:1, and the students are in pairs, so it's almost like we have 4:1. It's pretty much impossible for even the best universities to compete with that.

It's also worth noting that App Academy is a full time job. Ned can spend all his time working on stuff for the course. University teaching, at least in Australia, is a part time job for the academic who runs the course. It's not even a voluntary part time job: often the academic's prime focus in life is on their research, not on their teaching.

The homogeneity of App Academy is also to its advantage. If you want to get a computer science major, you'll be taking courses run by half a dozen different people, none of whom are entirely sure what the others taught this year, or even which previous courses their students had taken. An ANU friend of mine once pointed out that ANU teaches context free grammars in about five different courses. This comes about because no-one knows what all their students know. It's very hard to teach faster than the slowest student can understand, because if you do that then you completely lose the slow students. Here at App Academy, everyone's abilities are very well matched, so we get less of that inefficiency.

The course has a very tight feedback cycle. My favorite course convenor from ANU, Uwe Zimmer, started teaching the Intro to CS course in 2012. He's run it twice since. Meanwhile, my boss Ned started teaching App Academy in its current form in early 2013. He's run it about 8 times since then. Each time, they iron out a few wrinkles from the previous course. This has led to a pretty slick, optimised course, which is probably better organized than anything I did at uni.

Finally, the course kind of has an advantage because it's so short. It's a lot easier to remember the stuff you learned four weeks ago than two years ago. This again means that we spend less time getting people up to speed on everything.

I think it's very plausible to imagine that these factors all add up to a 2x efficiency improvement.

Note that App Academy doesn't even claim to be a computer science school; it claims to teach you web development. If your only goal is to learn web development, then App Academy has even more of an advantage over traditional education.

Is App Academy adding value or merely noticing it?

Another criticism frequently levelled at App Academy is that we just waste the time of people who were already good enough to get jobs anyway. I don't think this is true at all. I am an example of someone who was probably good enough to get a job anyway. During my job search, I got a job offer thanks to my functional programming background. I don't think that much of the stuff I learned from App Academy came up anywhere in any of the interviews.

I think App Academy was definitely worth my time, and probably also my money. I learned an enormous quantity from a/A. The main body of knowledge I gained was all the web application stuff which App Academy promised. I had no idea how to write RAils apps or Javascript coming into App Academy. I learned other stuff too. I had never really focussed on coding style before, and App Academy taught me a lot about that.

The most valuable bits of App Academy to the people who are at the top of the class are the curriculun, the job search advice, and the coding style hints from the TAs.

Competitors

I have had limited interaction with App Academy's competitors. Plus, I don't want to say things which I can't back up.

Purely based on the incentive structure, it seems natural for App Academy to have the smartest students. If you want to learn a lot, you really want to be in a course populated by smart people which is happy to kick people out if they're not following along. App Academy's payment model means that it has a stronger incentive to meet these goals than competing bootcamps.

My current guess is that Hack Reactor and App Academy are tied for being the best available bootcamps.

I'm reluctant to share my personal impressions of the various bootcamps beyond that. I think that several of them are pretty cool programs, and I don't think it's a bad idea to attend one. I think that their quality varies significantly.

I recommend applying to all of the bootcamps you're interested in, and going through their selection process. Trying to speak in full generality here, you're probably best off going to the best bootcamp you possibly can.

Complaints and weaknesses

My main frustration with the course is that it was aimed at people a bit less competant than me. The lectures sometimes seemed to just repeat the main points raised by the readings from the previous night, particularly when the concepts got trickier.

There are lots of little things which I think a/A gets wrong. But almost all of those are things which all educational institutions get wrong, because they're really hard to do correctly.

Some parts of the course were imperfect. Sometimes, the project instructions weren't enormously good. The newest section of the course is still nowhere near as polished as the bits of the course which have been around since time immemorial (that is, early 2013). But it's improving rapidly.

Diversity issues

App Academy is mostly male. This is a shame and we would love to change it. Our teaching staff and student body are both about 20% female.

From my fairly ignorant perspective, I think the teaching staff is pretty good at this. I would be totally comfortable suggesting my girlfriend study or live at App Academy. (Update: my girlfriend has since studied at App Academy, and it went fine for her.)

On the staff, we have had conversations on topics such as being careful not to use 'he' as the default pronoun when talking about students, or not making slightly racially charged jokes like writing an English to Spanish "translator" which just appends 'o' to the end of every word. Neither of those are reasons why we should be knighted as an organization, but I think that they're evidence that we are seriously interested in putting effort into these problems where we can.

For what it's worth, women seem to do slightly better on the course on average than guys. I have no firm idea why. One of the staff suggested that his speculation is that it takes extra confidence for them to throw themselves into this career path. I'm not sure.

If you're concerned about these issues, I'm happy to put you in contact with the female TA or some female former students.

App Academy is almost entirely white and Asian. I didn't teach enough people from other racial backgrounds to really comment on how well we managed teaching them.

We have had quite a few gay people at App Academy, so I'm pretty comfortable with our diversity record there.

Considerations when thinking about a/A

The biggest reason to not do App Academy is that you won't make it through. Luckily, the best way to determine your chances of making it through is to study programming a bit and then apply. The application process is pretty good at picking out people who are going to be able to deal with the course, so you might as well outsource that question to a/A.

You might also be too good for App Academy. If you would have been able to get a web dev job without the program, it is not obvious to me whether studying at a/A is worth it. If you have a CS degree and can program half-decently, it's probably worth your time to spend a few weeks applying to jobs and only do a/A if you don't get any hooks. This path works better in combination with studying books like Cracking the Coding Interview.

I'm not sure how good an idea it is to try to study Javascript on your own as App Academy prep.

add stuff about the Odin project and Peter Hurford's stuff

If you come from a math background, you might enjoy studying and working in data science more than web development. Data science has several bootcamps, which are eminently googleable. The field is similar in the lack of necessary official credentials.

FAQ

I'm international! Can I do a/A? Should I do a/A?

App Academy takes international students. Normally they have to pay for tuition upfront. You still get the benefits of being in a course where most people are selected based on intelligence instead of ability to pay, even if you personally have that additional constraint.

People often ask me about things like Makers' Academy in the UK. I don't know enough about the program to judge.

App Academy SF particularly specialises in getting people jobs in the Bay Area, as you'd expect. So if you want to live in the Bay Area, a/A has a particular advantage. It is possible to do App Academy at the New York campus and then come over to SF to find a job.

Even if you don't intrinsically want to live in the Bay Area, salaries are higher here, and if your goal is just to make money it might be a good idea to move here anyway.

How much trouble do international students have finding jobs and getting visas?

A bit. Your difficulty obtaining a visa mainly depends on what country you come from and your university credentials. Normally international students succeed at getting a job eventually, but the process is a bit shittier for them.

does the degree have to be relevant?

ask stepan about this

How do I learn enough programming for the application process?

To get into the course, you need to have reasonable competance messing around with variables, functions, arrays, and hashes. Not only should you know things like how to put items into an array or check if they're in a hash, you should be able to figure out how to abstract the real world into some of those data structures.

check Peter Hurford, project odin, and chris

todo

check my notes from the conversation with Jay

Conclusion

So I think App Academy's pretty great. It was a great decision for me. I learned a lot and had great fun.

As I said, I'm happy to answer any questions from perspective students. I'd also love to update this with anything which former students reckon would be a useful addition.