One of the great things about the Made by Many office is the diverse set of skills we each bring to the table, and what better way to share than to teach?

As a result, I decided back in October that I would spend some of my time putting together a series of iOS workshops for the office. This came after a few colleagues expressed dissatisfaction with their understanding of coding and started asking, like I and so many others who have wandered down the garden path before, what language was best to learn.

While the language you learn doesn't really matter so long as it's interesting and useful to you*, I decided to hold a series of iOS workshops—four, in fact, since October—since that is with what I am familiar; and in the spirit of sharing, I've decided to share materials from these classes with you here under a Creative Commons license.

* I'd also recommend learning a programming language that's Turing Complete, like Python, Ruby, or Lisp, rather than a markup language like HTML or CSS, since they utilize important programming concepts that will help you learn and understand programmatic logic better.

But wait! You're not a programmer.

That's right! Actually, I'm a Product Manager, and before that I was a UX researcher, and before that I was studying brain and cognitive sciences...but only after having switched from architecture :S Most importantly though, I was a physics TA in college and absolutely love teaching. So while I'm only an intermediate coder at best, I hope that I can at the minimum convey my enthusiasm for the art and the interesting concepts that make it work so that others who are interested will hopefully feel less hesitant to learn than I had felt.

For me, it wasn't until I started using MATLAB and helping classmates my Junior year that I finally began to build up the confidence that this might be something I could actually do. At Google I used Python to script tasks but struggled to build user interfaces so that others who didn't code could use my scripts themselves, and I spent far too many hours writing buggy code in JavaScript for a particularly tricky user research study. It wasn't until I decided, post-Google, that I would teach myself iOS development that it all finally started to make sense to me.

I decided that Objective-C and iOS were a good place to start because Objective-C is a full-featured and popular programming language and because iOS has lots of support communities and fantastic, if not still a little intimidating, documentation. Plus you can show off your creations to friends and family if you have an i-Device on hand :-)

Okay, great. Now how do I code?

The best way to learn is to have an attainable objective in mind. I recommend starting by building a simple game.

Class #1: Diving Head-first Into iOS Development

For my first class I wanted something we could all build within the hour and then refine in subsequent classes. As such, I had no PowerPoint or Keynote preso (thank goodness!) but instead a well-planned project that required a minimal amount of coding: Tic Tac Doge, a version of tic tac toe inspired by our office doges Klein and Tilly.

Above: Made by Many NYC's first Intro to iOS class! During this first session we built Tic Tac Doge, a version of tic tac toe inspired by our office doges. Tapping on a square alternates between placing an image of our New York office doge Klein and our London office doge Tilly, while tapping on "Clear" resets the board.

The class went very well. All but one participant was able to compile their code (and it turned out that Xcode just needed to be restarted for whatever reason). If you have Xcode installed on your computer, you can download and run the code for Tic Tac Doge yourself by clicking here.

Class #2: Intro to Objective-C

Our second class was an overview of Objective-C for iOS development that did have a PowerPoint (or rather, a Google Presentation). While I'm very much a critic of PowerPoints as a presentation tool, I felt is was necessary so that we could all have some documentation to refer back to if there were questions or confusions about a particular topic.

As for the content, I tried to cover the core concepts in Objective-C, from MVC architecture to delegates and protocols, and ended the class by returning to Xcode to point out where all of these concepts appeared in the code we wrote the previous week for TicTacDoge.

Above: Our code for class ViewController.h within our project TicTacDoge.xcode. You can download the code for yourself by clicking here.

Class #3: Adding Logic to TicTacDoge

Our third class was supposed to be a full-on workshop where we added features to TicTacDoge, but it turned out that participants were more interested in reviewing the material from the previous week, so I just did class 2 again.

Class #4: Intro to UIKit

For our most recent and fourth class, I assembled a deck outlining many of the key user interface classes provided within Apple's UIKit framework. Again, I made a Google Presentation so that we would have documentation to which to refer if we had any questions:

However, the deck worked fairly poorly, and the class became long and tedious. Instead of discussing each UI element individually, I think it would have been better to print out the deck and pair up everyone to practice identifying and hypothesizing what UI elements were used in existing apps and start utilizing them in TicTacDoge.

But wait! Why is any of this useful?

For me, learning to code was about communication, credibility, and curiosity. As a UX researcher back at Google, I had the fantastic opportunity to work directly with members of the research, design, business development, and engineering teams, but when it came to understanding and communicating the day-to-day needs and frustrations of my colleagues, I found that I lacked a lot of technical vocabulary. Simultaneously, I also found that there was a definite "hierarchy" in terms of engineering vs. everyone else (one that, thankfully, has received lots of attention and valid criticism since 2011 and is hopefully something we can all work to mitigate towards creating a more respectful and equal playing field). But most importantly, I learned to code because I was curious—and not to become a "10x engineer."

At Made by Many, I've had the incredible privilege and opportunity to work even more directly than I did at Google with a diverse and talented set of colleagues and friends. While I've found learning to code to be invaluable towards becoming a better Product Manager, I've also found it insufficient and am currently working to learn more about strategy, business, estimation, and how to be a better colleague. So while "becoming technical" probably shouldn't be a be-all and end-all, here are nevertheless a few reasons why you benefit from playing around in programming:

  • For Programmers: Obviously learning to code is useful if you want to be a programmer, so in this particular case, learning Objective-C and iOS is just another set of tools in your toolkit and an opportunity to compare and contrast programming languages and how apps are built on various platforms.
  • For Designers: Learning Objective-C is probably less important than understanding the limits of what code can and cannot do. I also think that the conventions of programming languages can themselves inspire creative ideas and solutions, though I do not for a moment advocate programming as a design tool.
  • For Product Managers: While I 100% agree that Product Managers do*not* have to know how to code to be effective, knowing how to code can increase trust, delegation, and reliability across all roles. As with designers, understanding how code works moreso than how to code can help you prioritize, resolve conflicts, and come up with creative solutions. And perhaps most usefully, knowing how code works can help you QA and identify bugs!

And as for myself? By holding these workshops, I myself have been forced to become better at coding, and I've also received valuable practice in structuring lessons, articulating value, and demonstrating proficiency in one of my core competencies.

Future Topics: What's next?

There are a near-infinite number of topics I could talk about in future Intro to iOS classes, but I think a few topics are more interesting and useful than others for those who are merely interested in programming rather than looking to become expert programmers:

  • Interface and Interaction Design: While I’ve certainly done my fair share of interface sketching and design, I think this would be a perfect opportunity to get other colleagues in the office involved. Being able to sketch out an idea clearly is incredibly useful, even and especially if you are not a designer, and there are lots of little techniques and tips that can make your sketches orders of magnitude better.
  • CRUD-ing Data: Understanding how data are created, retrieved, updated, and deleted and the different ways of doing so (from NSUserDefaults and NSKeyedArchiver to Core Data and Parse) is useful for app design and debugging.
  • Version Control: Many of us have been taught to "ALWAYS Cmd-S!!!" but working on software in a collaborative environment isn't always so simple. Learning what version control is, how it works, and how it's used can help prioritize your work and coordinate and optimize how software is produced.
  • Security Hacking: This is definitely a more advanced topic, but given the huge number of data breaches within the last year alone (from Heartbleed and Snapchat to Home Depot and Sony), security hacking is more relevant than ever. Also, it's super cool. For me, learning about software vulnerabilities helped put what I've learned about programming in context and scale, much in the same way that chemistry and physics help connect our understanding of the physical and the subatomic.

Continue reading

Unbillable hours #10

Unbillable Hours is our weekly round-up of what we're doing when we're not working on client projects, plus our most-talked-about Slack links.

Yep, anoth...

Chris Bell   ·   16 January 2015

Unbillable hours #9

For our first Unbillable of 2015, we are taking a considered look at things that matter—and raising an eyebrow to the things we aren't sure of just yet. W...

Leslie Bradshaw   ·   9 January 2015

Health

Digital tools for tackling loneliness in a human way

A recent BBC survey has found that 4 million people in the UK expect to spend most of Christmas day alone. This isn't just a problem at this time of year....

Heather Taylor-Portmann   ·   19 December 2014