The Poetry of Programming (How I Created my First iPhone App)
Coding. Computer Programming. Software Engineering. All three are forms of creative expression, digital poetry, a way of taking an idea and making it real. Unfortunately, coding is a foreign and scary concept for too many people – that’s a shame because coding lets you take control over an idea and make it real. Most valuable is that coding teaches you how to break down complex problems into smaller, simpler, solvable problems – a skill with broad applicability.
When a programmer “writes software” they truly are “writing”. Computer software is written using a variety of “languages”. As strange as it may seem, you enter a new world when programming a computer, smartphone, tablet or robot. Students with dreams of attending college already need to learn the basics of a foreign language; we need to expand on that requirement to include the language of computers.
My first experience with a computer, courtesy of my father, was weekend trips to the teletype terminals of a Boston College DEC mini-computer. My father, a professional musician by day and gadget lover by night, was dabbling in BASIC (an early computer programming language) to create a poker simulation. Computers, and by that I mean any gadget controlled by software or “code”, are helpless creatures. They are completely dependent on our direction. We are a long way from the sentient machines of Matrix.
While a lot has changed since my first experiences with computers – there has been an explosion of innovation in computer science and many more programming languages have emerged – the fundamental concept of breaking down problems and describing them in code has remained the same. I evolved from dabbling on a DEC-10 to receiving the gift of a lifetime, my first computer, an Apple II; that’s when the coding bug took hold. I rode my bike, played baseball, watched TV and coded. I coded a lot. Instead of playing games, I created games. It is a thrilling experience when you first get a computer to do something – even if that something is a simple as displaying “Hello, World” on the screen.
About a year ago I decided to dust off my coding skills (I was a software engineer for many years before moving to the business side of technology) and develop an iPhone app. The last time I’d coded was 1994, long before smartphones and when the computer language “C” ruled the day. While I had a head start on those that have never coded, I had a lot to learn and re-learn. But like riding a bike, everything I’d known, with some coaxing, came back to the surface.
Here is what I learned going from a rusty “C” programmer to a competent iPhone App developer:
- Be realistic. I knew that developing an iPhone app wouldn’t be simple, so I broke a large problem into a series of smaller, more manageable challenges. After all, the time I spent working on my iPhone app was competing with family (priority #1) and work (priority #2). I approached the challenge knowing progress would be measured in months, not days.
- Start from “Scratch”. If you have never coded before, start with MIT’s Scratch. Scratch is a terrific teaching tool for coding, for the beginning child or adult. Scratch is clever because you’ll learn the foundational concepts of coding without the techie jargon. The Khan Academy also has video courses covering programming basics.
- You’ll need a Mac. If your end game is to develop an iPhone app, you’ll need a Mac. The easiest way to create iPhone applications is on a Mac using Apple’s Xcode development environment. Xcode provides everything you need in one place, including iPhone simulators (so you can test your app before messing with your real iPhone). You can use Xcode for everything that comes next.
- Don’t skip “C”. “C” is a foundational computer programming language that is still used today and, in one form or another, makes possible much of the gadget wizardry we all take for granted. The iPhone speaks “Objective-C” which is a computer language based on “C”. If you are serious about creating an iPhone app, familiarity with “C” is critical. One of the best online resources available for learning to code is WibIt.net. WibIt.net has produced a series of entertaining to watch and easy to absorb instructional videos on coding. The folks behind WibIt.net are really savvy at focusing on what is important, and provide you lots of practice projects. Watch and work through their tutorials in this order if you’ve never coded before:
- Orient yourself to Objects. “C” is foundational, but it’s just a stepping-stone to modern “object-oriented programming”. Just as the English language has evolved, so have computer programming languages. Object oriented programming concepts were developed to make it easier for programmers to share and re-use ideas. Object-oriented programming does come with a lot of jargon, which can be confusing, but at its core is a logical way of breaking down problems. WibIt.net has a terrific tutorial on this topic too: Introduction to Object-Oriented Programming.
- Climb the summit to Objective-C. Everything up until now has been foundational. Objective-C is where you learn the computer language that drives the Mac, iPhone, iPod touch and iPad. Android and other gadgets use different languages, but most share similar characteristics. In the case of creating apps for Apple devices, the Objective-C language is an object-oriented descendent of the C programming language (other popular objective oriented programming languages include C++, C#, Java and more). Here are resources that helped me learn Objective-C, building on my existing C programming experience:
- WiBit.net’s Programming in Objective-C
Learn the Apple iOS environment. Part of the complexity of developing an iPhone app is that a lot of stuff has already been done for you. The army of developers at Apple have solved a bunch of problems for you – drawing images, detecting touches, swipes and other gestures on the screen, grabbing your location from GPS satellites, and so on. All of those basic capabilities are built into “iOS” – that’s Apple’s operating system or core software that runs the phone (and the iPad and iPod touch). Without iOS, you’d have a ton of programming to do just to have a dot appear on the screen. The challenge is that with all that built-in functionality, it can be a bit of work to find out how to use something that already exists. If you think something has already been done before, Google it – you’re probably right. Here are two really helpful books that have great examples and cover a lot of topics clearly:
- Choose projects that inspire you. You may have started this journey with an app in mind, or you may have been curious about coding. All of the resources above give you numerous code samples and projects to learn from – now it is time to create something new. Choose a project that inspires you because you will inevitably run into roadblocks and challenges – you’ll need an inspiring destination to get through the hard parts. In my case, I wanted a simple, one-click way of letting my family know when I’d arrived safely that included my current location. For example, the moment my plane lands and I’m allowed to use my phone I wanted a quick way to txt my location. That was the spark for creating Tap Notify, my first published iPhone app.
- Open an Apple developer account. To create iPhone apps that you plan to publish, you’ll need to create an iPhone developer account (currently $99/year). With that account you’ll also get access to numerous developer tools, documents and invaluable sample applications.
- Break down the problem. To code Tap Notify I needed to solve a series of problems. Here are some of them: how do I get the current location of the iPhone? How can I create a link to a Google Map image of the location? How can I make it easy for the user to send different canned messages with the location? How do I access the user’s address book? How do I tell the iPhone to send a txt msg? Each of these problems and a bunch more required research. In my current professional role leading a product management team, this process of breaking down the problem is the heart of the challenge; for a single developer it still makes sense to break down the problem before diving into coding. In many cases, and thanks to the community of coders, I was able to re-use the work of others (giving them recognition by including their legal terms in Tap Notify’s EULA – that’s the long Legal document you click-through when installing software). Stack Overflow is an excellent online resource when you get stuck with a programming problem.
Create a cool design and logo. Since I wanted more than stick figure graphics, I knew I would need professional help. There are lots of options; I went with an online marketplace for graphic designers called 99 Designs. 99 Designs makes it easy to pitch a concept to a marketplace of designers who then compete for your business. Here is the design competition for Tap Notify that resulted in the graphics used in the published app.
- Test your app. In addition to the iPhone simulators you get with Xcode, online resources like TestFlight make it easy to test your app with friends and colleagues, before the app goes live on Apple’s iTunes app store.
- Meet Apple’s app criteria. After you’ve applied to be an Apple developer, read this page the covers App Store Review Guidelines. There are many reasons why your app can be rejected by Apple – carefully reviewing their criteria can help your app get approved the first time. In my case, after uploading Tap Notify for review it took a week before I heard the good news. As my family can attest, the Sunday afternoon when my app went live for all the world to see was very satisfying.
While writing code is a hobby for me now, the skills of coding, problem-solving and creating something new from a blank computer screen have proven invaluable in my personal and professional life. Coding is a learned skill, not an innate ability – anyone prepared to invest the time can learn to program.
If you are looking for a starting point for kids, check out the free resources available online: So Your Child Wants to Create Computer Games (and you’re not sure where to start) or if you have the financial means, consider LEGO’s Mindstorms programmable robot kit. Coding is in the spotlight right now – Code.org was founded to encourage schools to teach coding to all students. For an inspirational start to your coding journey, watch this video: