Since the announcement of Swift at WWDC in 2014, there has been an explosion of tutorials designed to introduce non-programmers to the world of iOS app and game development. Just take a look at my “Swift Resources” page and you’ll see what I mean (and that’s only a fraction of them!). There are app camps aimed at both kids and adults, projects that can be completed entirely in Swift playgrounds, and more books than you can shake a stick at—yet for beginners, the whole experience can go from rewarding to frustrating rather quickly.
Hello World
The first projects you complete as a total newbie can be super fun and satisfying. They can take you from never having written a line of code in your life to having a working to-do app on your phone that YOU made. That feels awesome! Most tutorials focus on simple apps like checklists and Flappy Bird clones, but that’s to be expected and it helps build confidence, language literacy, and the ability to think like a programmer.
The problem is, most beginners don’t decide to pursue app development because they have a simple idea. Yes, of course everyone has to start somewhere, but there seems to be a need for resources that help bridge between beginner material and intermediate and advanced concepts.
The Internet is Scary…and Expensive
Creating a game or an app that does not rely on Internet connectivity to function may be the best place to start, but it’s not where many people want to finish. If you have an idea for any kind of social app or an app that uses another company’s API, the difficulty curve suddenly gets very, very steep. It also starts to get expensive.
Think about a weather app. A weather app needs to pull weather data down from a service. The best of these services, such as Dark Sky’s public API, aren’t free—or are free only up to a certain point. When you’re a single person paying out of pocket for API access, you pretty much have to charge money for your app (or hope that it doesn’t become popular). But wait: if you charge only once, that may not be enough to cover your costs down the road. So what then? Do you require people to subscribe to your weather app? You can see how pricing can become a problem.
Now think about an app with any kind of social component. Apple’s App Store Review Guidelines rightly include this requirement:
17.5 Apps that include account registration or access a user’s existing account must include a privacy policy or they will be rejected
Ok, but how do you write a privacy policy? After all, you just learned programming; now you have to learn policy writing? Additionally, you have to have a place to store that user account data. Do you operate your own server, or pay to host the data somewhere else? The former requires a LOT more learning (not to mention liability), while the latter has proven to be risky in its own ways (see the shutdown of Parse).
Advanced Concepts
This isn’t to say that there aren’t resources out there for learning about complex things like concurrency, unit testing, debugging, etc. But let me just say that I’ve been working on this for awhile and I still don’t understand the three things I just mentioned. Part of the reason is that many of the tutorials I’ve found assume prior knowledge that I just don’t have. The “Instruments” tool in Xcode? Yeah…I’ve never opened it. Another hard concept is syncing, especially if you want your app to function both online and offline. These are things that most apps and app developers rely on, and yet the path from to-do app to whatever-you’re-dreaming-of is significantly murkier and harder to navigate than the one from non-programmer to “Hello World.”
Reality Check
No, you don’t need a Computer Science degree to program an app. But you might need a Computer Science degree to make the app you want to make. And if not a degree, then perhaps a careful viewing of some of Stanford’s free iTunes courses. Because while a well-written one-page tutorial can teach you how to make your own version of Tetris or Space Invaders, it probably can’t bring you to a full understanding of multi-threading, or server management, or working with Notifications, or what the heck all those weird build settings in Xcode mean. (Note: I still need to follow through on this advice myself!)
So is it possible to be a self-taught app developer and create a complex, Internet-connected app? Of course. But it’s probably going to take longer than you think and when it does: don’t be discouraged. You’re not stupid. Keep asking questions and getting feedback, make and release smaller projects in the meantime, and don’t give up!!