Today is March 8. Exactly 62 days ago I started to teach myself Apple’s new programming language, Swift. I set a very ambitious goal of getting my first app onto the App Store in 90 days. This was an insane goal, and any experienced programmer would probably have laughed at this and muttered “just wait, you’ll see…” under their breath. An experienced developer surely could make a simple app and release it in less time, but I was not experienced. Actually, I was starting from zero.
On the timeline I set up 62 days ago, March 8 was the day I intended to have a feature-complete beta ready to send to a couple close friends to test. I also had an April 5 ship date planned. I hate to say that I do not have a beta ready today, but this is not a “how did everything go so wrong?!” post, it’s a celebration!
On January 1, 2015 I had made the decision that this year is the year that I learn to be an honest-to-goodness developer. I had plenty of HTML and CSS experience, but I wanted to do the hard stuff. I wanted to do the hard stuff. All of my brief forays into iOS development had ended abruptly after mere hours of trying (and failing) to make any real progress. I knew I had to do better this time. I also kind of knew that if it didn’t happen this time, it just wasn’t going to happen at all. I’m 29, and I know that you’re never too old to learn, but at some point it’s going to be much harder for me to make a big life-changing direction shift like this. So off I went.
I started my journey with Treehouse, an excellent online teaching site that has lessons on many topics, but they drew me in with a full Swift-based course that brought you from knowing nothing all the way up to shipping an app to the App Store. I went through the course and felt like I was learning a lot. Things were easier than I had remembered from my attempts to learn Objective-C. Playgrounds are a new feature of Swift, and they’re awesome! They enabled me to learn the basics without having to get a whole app up and running.
Things were going well during this phase, and I even started documenting my experience on the site here, here, and here. My confidence was growing and I thought I could take on the world, so to speak. I dove in, knowing I didn’t know everything, but pretty sure I knew enough to get something out there.
I was wrong. I didn’t know shit! Oh god, I don’t know anything!
Repeat that thought over and over for a couple days and you’ll have an idea where I was at. It was shocking to me just how much of a difference there was between knowing my way around a guided tutorial on making an app and actually doing it on my own. But still, I persevered.
Treehouse was a good jumping off point, but Stack Overflow has been a godsend. I Googled questions I had and error codes I was getting and kept being directed to incredibly smart and patient people at Stack Overflow with the answers. I eventually just started searching there and got what I needed most of the time. The good part of learning a new language is that everyone is still figuring things out, so there are no stupid questions. As proof, I asked this question about how to find the largest value of a selection of variables. The question is incredibly simple, and I was a little self-conscious about asking at all, but I got a good answer without any snark.
I’d been there for a while, looking up the solution to every problem I came across and piecing together something that resembled a working app. It was hard, and not every solution I found lead me down a good path. Sometimes I would work myself into a corner and basically left myself one option: burn this code to the ground and start over. Today, I count 6 folder on my computer with different versions of my app. Each Xcode project is sitting there, a complete failure in one way or another. I’ve rethought this app so many times and rewritten the same code over the over that…it’s actually starting to come together.
I have tamed auto-layout, and actually have a UI that will scale properly to all iPhones (iPad support is not a bridge I’m ready to attempt yet). I have figured out how to manage buttons and dynamically change UI elements based on user input. I can even do these things without copying and pasting someone else’s code into my project! Code Data is still a bitch, and is sadly a necessary evil for the app I’m making, so that’s my final hurdle. Again, this part is incredibly hard, but I know that if I was able to overcome everything else, I’ll eventually get there.
All that said, I am not shipping my first beta today. I would love to, but I just can’t; it’s not ready. I’m still working hard, and more of my free time if being devoted to this than I have ever devoted to any other single thing. I want it so bad, so I’m going to keep going.
My original goal was to run a one month beta and ship version 1.0 on April 5. I’ve missed my beta timeline, but there is still a chance I can hit my overall goal. If I can wrangle the beast that is Core Data, I’ll be ready.
The headline image on this post if from Erik Trautman’s amazing post, Why Learning to Code is So Damn Hard. You should read his piece for some context about how this journey tends to go. I for one was nodding my head along as I read through the piece. I think I’m falling into the “desert of despair”, but I can feel the upswing coming. It may be around the corner or it may be a few months off. Either way, I know it gets better if you try.