September in (and out of) iOS
This month my intention was to continue the Udacity Nanodegree program. I think the learn-by-doing approach it takes is great, and usually works well for me. However, in a fit of frustration -- wrestling with NSRegularExpression for something that would be trivial in many other languages and forgetting about the .rangeOfString method -- I began to reflect on the overall experience and my approach to learning at this point. What were really my goals in becoming a better iOS programmer? I'm familiar with enough of the APIs and resources for learning, can wade through the docs if necessary, have built some toy apps, etc. So why the urgency to add more to the never-ending list of things to keep up with (in code, business and law)? What other stuff would get put on the backburner for a while?
Well, part of the problem is that the other stuff is never really on the backburner. I spend my days in Ruby and the browser, and absolutely love it, and my subway rides reading articles and keeping up with developments in the Rails world. People have their reasons for not using or liking Ruby or Rails, but the joy of coding in Ruby coupled with the productivity boost of Rails still makes it my go-to. If/when I need to deal with millions of concurrent connections and the other performance problems at crazy scale that many see as a drawback to using Rails, or the speed of the language is more important than my productivity with it, I'll reconsider. I've checked out many of those other tools - just enough to know where to start looking when a problem presents itself, and to improve my existing approaches (hopefully).
And so back to iOS, and really any new language, framework or library. Yesterday I quit the Nanodegree program since I didn't feel like it was materially pushing me forward as a programmer generally, or an iOS programmer specifically. Sure, the exercises are good and you need a guide beyond just the docs, Stack Overflow and Google. At the same time, I'd already done a lot of that stuff and know the areas I need to learn or improve. Plus, at $200/month for something they give away for free, it just didn't feel worthwhile to me. (No offense to those doing it and making the most of it, or the company for expecting to get paid for their work.) For those shifting careers or just starting out, go for it. But having an iOS Nanodegree isn't going to make or break my resume at this point.
While much folk wisdom (or PR spin) about online learning suggests that an extra credential and paying a bit gives you some skin in the game, and maybe it works for some people, it really just made it feel like work to me. I've got enough of that (thankfully). This was supposed to be a fun hobby. With Ruby and Javascript, even outside of work, it's still *fun*. Maybe I'm just too hooked on the instant feedback cycle (and not waiting for the iOS Simulator or XCode to catch up) or productive enough to look past the frustrations that occur, or just impatient in getting a fast enough workflow going with iOS. That's not to say I'm completely giving it up. Just not spreading my free time too thin for no good reason or clear personal or professional benefit. I could spend that time on core CS concepts, reading (gasp!) non-tech books, or writing more to avoid awkward sentence constructions like these last two.
So I'll end with this. Before diving into something new - clearly state your goals, and resist any OCD/stereotypical coder urges to overwhelm yourself and burn out on it. The mental energy of frustration just isn't worth your time. Is it for a job? Is it for fun? Is it for a new perspective? Just to stretch your brain? Learn enough to be dangerous, if the opportunity ever presents itself. For now, I need to refocus on relaxing, reviewing years of Ruby and Rails code and notes, and working with a few new Javascript libraries I'll need at my new job. After a great 2 years of growth at Simon & Schuster, I'll be starting at Bloomberg next month. Onward...