Our Learning Philosophy at Awesome Inc U

Nick Such

Nick Such,


At Awesome Inc U, our goal is not only to create excellent programmers, but also to create a better way of learning. We think the ability to create stuff and solve problems using computer software is a skill with a significant term of usefulness, but some other skill du jour will eventually replace it. This is why the latter achievement, creating a great way to learn anything, is the more important of our two goals. In addition to the Core Values we live by at Awesome Inc, we have identified some basic tenets that we’re applying to our Awesome Inc U program.

Our Strategy: How to Create Excellent Programmers

This strategy is what our core team at Awesome Inc U is working to implement. As we’re designing courses, scheduling summer camps, marketing our products, and coaching our instructors, this is what we keep in mind.

Step 1: Find great programmers to be instructors

If we’re looking to create excellent programmers, we want to create them in the image of existing excellent programmers. This is our end goal, so this is where we must start. By having these living, breathing examples, our students will get to interact with their end goal. This makes it tangible: when the student can do what the master can do, he or she has made sufficient progress.

Awesome Inc U instructors

Step 2: Choose instructors who remember what it was like to not be a programmer

Being an expert has a downside: it makes it tough to remember what it was like to be a beginner. Becoming a great programmer means increasing your leverage. You start to use tools like Vim. You have Dotfiles set up so that your environment works the way you want. You use Vagrant like a boss. You speak with fellow programmers in a particular dialect with a particular set of assumptions before beginning any conversation. You follow style guides for your JavaScript. You understand enough conventions to choose Convention over Configuration. From a UX design perspective, most of the things you do aren’t visible and discoverable to a first-time user. There are keystroke combinations and subconscious habits that you’ve developed over years of practice. But as a programming instructor, you must understand that for your newest students, everything is foreign. You must remember what that great unknown felt like in order to teach for us. You must have a high capacity for empathy.

The Flow diagram, showing Anxiety and Boredom regions

Step 3: Have a goal in mind

Our students come to us to achieve a goal. They don’t come here to learn Objective-C. They come here to make their dream iPhone app or to land a great job. Our job is to understand their intended destination, then to craft a path to lead them from their current state to their goal. This path will almost certainly adjust as we encounter new obstacles, but if we don’t set an initial goal, we’ll have nothing to measure against. When crafting this path, our team must target an optimal level of difficulty. Too easy, and our students will get bored. Too difficult, and our students will give up. This is the hard part of being a teacher, and this is the part for which subject-matter experts aren’t often equipped. Fortunately, simply having a feedback loop here is a massive step up from reading a programming book in solitude, or watching a tutorial video on YouTube. In addition to feedback from our instructors, we’ve found that peer interaction is one of the best types of support. Peers offer a valuable perspective as they’re currently working through the same material. Learning-by-teaching is also a great way to demonstrate mastery of a subject.

Students playing the Oreo Challenge game

Step 4: Make it fun

Fun does not mean idly entertaining. Difficult is fun. Competition is fun. Make a game out of it. At all of our 1-day courses, we take breaks to play games like the Minute to Win It Oreo Challenge, Around-The-World Ping Pong, and Rock, Paper, Scissors...War. These games have nothing to do with programming, but they have everything to do with being a programmer. Like any focused, desk-bound task, you’ll go crazy if you don’t get up and move every once in a while. Plus, we think there’s much more to being an effective programmer than slinging code. You need to communicate well, be able to work as part of a team, and know how to follow Rule #17 - Bring the Fun. These set the tone. But the true fun comes from challenging our students with a difficult task, guiding them along the way, and seeing them achieve something that they considered impossible only a short time before.

Our Tactics: How to Create Excellent Programmers

These tactics are some of the things that we remind our students and teaching assistants. While small, we’ve found that

  • If you get stuck, first try to FIO (Figure It Out™) on your own. Then ask a peer. Then ask an instructor. Then ask Google.

  • Projects are more valuable than PowerPoints. Trust people who build stuff.

  • Move Fast And Break Things. Borrowed from Facebook, this is an embrace of the learning opportunities gained through failure, and is why we have a Failure Dashboard at Awesome Inc.

  • Track your progress. It’s hard to tell how far you’ve come if you don’t remember where you’ve been.

  • Take breaks. We play lots of ping pong. We have a piano and guitar readily available. There’s a nice park and several coffee shops near Awesome Inc. Take a walk, clear your mind, come back to find that your seemingly-hard problem is not so bad.

  • Listen, then talk. What does your client want you to build? What is your team member actually asking you for? What does the OP actually want to know?

  • Don’t assume that something is obvious. Avoid using those 2 words, and you’ll drastically improve your communication and empathy skills.

Additional Reading

The above are just a few guidelines that we’re following as we’re growing Awesome Inc U into a premier training program for technical skills. We’re constantly learning through this process as well, so we hope to add further insights to this list. There are some other great resources out there for improving the learning process. We’re a big fan of the work the Khan Academy is doing. Purely online education still has a long way to go, but Sal Khan and his team are thinking about it in the right way. Jeff Casimir’s How to Teach Anyone Anything is a great reference, especially for others who are helping people learn to code. But perhaps the best advice comes from my one of my math professors in college. He asked our class a question, which most of us initially thought to be self-serving, but was quite the opposite: “Who’s the best teacher you’ve ever had?” After shooting down a series of answers, he let us know the only answer that he would accept: “You, yourself, are the best teacher you will ever have.”