My Experience Teaching iPhone Development Online to a Motivated Student
There are a ton of resources online and classes, courses and boot camps that teach iPhone development. I’m a teacher at one of those resources, Code Coalition. What follows is an account of how a single student, dead set on changing careers, shaped my opinion of teaching, during three months of online tutoring sessions. Alex was an incredible student and I truly appreciated all his hard work, it made teaching that much more rewarding.
I had always had an interest in building mobile applications. I had taken one programming class, and it was in java, so delving into iOS development was completely uncharted territory. Not only that but, my undergrad was in Communications. I do have an MS in IT Management, but the curriculum was more based on enterprise systems. This is what got me a job in public accounting as an IT auditor. The work was quite repetitive and not particularly interesting. I would try and make my workflow interesting by writing VBA scripts to expedite testing. Some of the scripts I would share with coworkers who seemed to benefit from them quite a bit. That’s probably where I got the most satisfaction. I built something someone else appreciated and directly benefitted from.
About six months into the job, I knew it was not for me. I wanted to build something I could show to my friends and family and be proud of my work. Becoming an iOS developer made sense. All my friends and family used iPhones and iPads. How cool would it be to show them the things I build everyday? That thought really resonated with me. I wanted to build something that mattered. For about a year I had been dabbling in iOS development. I read through a few books, watched loads to tutorials on YouTube, but it was time to get serious.
I posted on Hacker News asking about resources available for learning iOS development, and got a few responses. One of them was from the founder of tutoring service. He put me in touch with one of his iOS developers, Eliot Arntz, and I opted to enroll in their services to help get me up to speed. It was a challenge working full time in public accounting and cranking out Objective-C code late into the evenings. It was hard for my wife, my friends, my family, and me. I virtually disappeared for a good six months.
-Excerpt from Alex’s first email:
“From you, I’ll need help with building my app. I have a GUI up and running I don’t have anything concrete yet. Actually, as I write this, I think it might be best to chat a bit on the phone, otherwise I’ll write a wall of text.”
And talk we did, for about an hour as I recall. Alex was eager to learn about what solutions existed for his app. We spent time talking about alternatives to native iPhone development using Apple’s tools. Other web technologies include PhoneGap, HTML5 and Titanium. Since Alex did not have a CS background I felt that native development had a few important advantages. Learning to build his first project natively in XCode offered the promise of only learning 1 language and 1 framework, Objective-C and Cocoa respectively. Alex made it clear early on that his goal was to become a full time developer. Native development also offered the promise that his application could attain speed and performance in order to impress potential employers as an iOS specialist.
Our first session was a catastrophe. While I had experience teaching iOS in person the online platform felt foreign. Our first session lacked structure and a plan. In order to rectify the situation Alex and I had another conversation. In it we agreed to three main tenants:
1. The sessions would be project based and coding concepts would be learned as needed.
2. I would choose the tools, architecture, libraries and weekly strategy and wrap these in weekly milestones.
3. We would commit time to discussing and strategizing on “how to become a developer.”
Alex followed up after our chat:
“So, I guess we can treat this as 1/2 tutoring, where we’re hacking together solutions to add or remove key features, and 1/2 mentoring where you’re filling in my gaps of knowledge.
The bottom line is, there’s no way I’ll walk away an expert in mobile development or anything like that, even after all of our sessions. The best way is complete immersion. And the only way to do that is get a job doing it. And the only way to get a job doing it, is get an app pushed out there, show you’re at least somewhat competent, and then go from there. So, let’s start fresh this weekend!”
Alex took a week to iron out his idea and in our next session we went over his template. We spent quite a bit of time ironing out a plan making sure that the application functionality was practical and in order to teach Alex important iOS concepts.
Alex’s best asset was his deep belief in his own idea. It is important to believe in any project you work on especially when you are starting out. Learning to code is a hard process but loving your idea can help you overcome the hard bugs you will undoubtedly encounter on the developer journey. As time passed he came to realize his application wouldn’t have millions of downloads. Like many others, the dream of hitting it big in the app store drove him to pursue learning to develop. As time passed he came to see his project as a stepping stone; specifically, a portfolio item that he could use to show businesses and potential employers. I have found that when many people start to learn how to code they lack direction. A project with assignments gives the learner attainable goals and positive feedback loops so that they can see tangible progress and results.
Our sessions took a pretty standard format that occurred 1 or 2 times a week. They lasted between 1 – 2 hours and included: code review, debugging, paired coding, architecture and best practice discussions and current events in iOS. Initially I spent quite a bit of time assisting with setting up the project. Understanding modularity is tough for beginners; many times people tend to create “god objects” which breaks object oriented principles. Letting Alex solve problems and then assisting him with a refactor let him brute force it without interruption; however, quickly getting feedback on his code allowed him to challenge his mental framework about iOS.
As our time together progressed the style of our sessions shifted. We spent less time going over fundamentals. More and more I would ask Alex to read over and implement ideas and topics I thought were important to his growth as a developer. During our sessions we would instead review these concepts for understanding and determine the best way to implement these ideas into his program.
We had initially scheduled three months of tutoring sessions. Two and a half months later, Alex began to look for jobs. After a promising lead he sent me an email:
“I don’t think I’ll reach out until we complete all our sessions and I have something more substantial to show, but I wanted to get some feedback from you about your thoughts on the firm. I really appreciate the career advice. It’s hard to keep an objective view when your day job isn’t exactly what you enjoy.”
I was confident Alex had learned all of the necessary material for a junior developer role. In order to encourage Alex, I postulated a single question for him. “Do you believe with enough time you could build almost any iPhone application?” Alex undoubtedly saw this as a trick questions and responded with follow up questions: “Can I use online resources?”, “What do you mean by enough time?” and “What type of application are we talking about?”. After some discussion I explained that in my opinion the true test of a developer was surety that problems can be solved without an obvious answer available. Alex’s skills at researching issues online, exposure to project structure and code as well as his comfort with learning made him the ideal candidate for a junior dev role.
Alex was offered a job with Bottle Rocket, one of the premier mobile dev agencies in Dallas, as an iOS developer. When we debriefed about his interview experience one particular point stuck with me. While he did not know the answer to every question in the interview he was able to point to resources where he could find the answer. Code should never be treated like an exam; it is not about memorizing huge chunks of code. It’s all about problem solving and knowing how to leverage great resources, best practices and architecture.
I honestly could not be happier with the career move I made. I love going to work every day. I get to solve challenging problems, and the products I build will be seen by millions of users. My attitude about life in general improved dramatically. My work has so much purpose.
My company, Bottle Rocket is really a programmer’s playground. We have unlimited vacation (no, I’m not joking), a decompression chamber with a zen water fountain and fish tank to take a quick nap in, I can wear near whatever I want to work, and the people here are real. We all care so much for beautifully pleasant user experiences, and it really shows in our work.
I am very grateful for all Eliot taught me. I wouldn’t have gotten this far had I not reached out to him. And I made a career change in such a short period of time. I had a goal of getting an app into the app store this year. I had no idea that I’d have a job at amazing firm like Bottle Rocket in half the time.
If you’re thinking about making the shift like I did, don’t waste anymore time. Dive in. Build beautiful things that people love.
Contact Eliot or Alex for questions and comments:
firstname.lastname@example.org / @EliotArntz
Alex - @thisismcgregor