How I got myself to learn something that sucks to learn

I’m not used to learning something as complicated as Android Development. Most programming languages, I’m used to quickly moving from “basic syntax” to “simple scripts and console or visual output” in an afternoon. Android, it turns out, is complicated for good reasons. After all, you have a user interface, and an environment where you need to be able to quickly drop what you’re doing if the kernel or user decides hey, your app isn’t important right now.

And that sucked to deal with. This means Android has TONS of APIs. And most of those APIs have multiple incompatible versions. And to get the right code to work with those APIs, you need to work with Gradle, or Maven, or some other kind of tooling to get it all together. You need to be ready to download and set up a lot of different SDK versions. And you need an IDE to glue all the pieces together, or else assemble the toolchain by hand. Simple “Hello World” and “Hello World with a button to a different Hello World activity” tutorials end up sprawling, and feeling discouraging rather than encouraging.

I couldn’t keep it all in my head at once, like I did with Javascript, Python and the basic Java data structures and algorithms you do to get a comp sci degree. So in the past, I’d hit a brick wall, and think “Eh, phone development is bad. Maybe a web app will be able to do what I want instead, or maybe I shouldn’t program today.”

I needed to get comfortable with a “Research-Develop-Get Stuck” cycle that tends to scare me from most projects. I’m used to research and get stuck being much smaller stages. And I don’t have the best executive function, so switching between several websites and an IDE when I’m used to hanging out in a Vim window and the Python documentation is a recipe for distraction and yak shaving.

What finally worked was to search my life for a small, stupid problem. That small stupid problem was that I was sleeping in and commuting slowly to the Recurse Center for my program, partly because I felt there was little motivation to arrive on time, and a ton of small motivations to wander slowly or get bogged down in my morning routine.

Feeling worthless and ashamed was not enough. But my slow rump wasn’t going to get better without some positive reinforcement. Thinking about skinner boxes and carrots and sticks got me to considering pets, and then Stupid Pet Tricks from Letterman’s show.

So I wrote a program to reward me for showing up in the right place at the right time with a David Letterman Stupid Pet Tricks clip. This silly, specific, tiny project was enough to get me to buckle down and review Activities, Permissions, Intents, the FusedLocation API, and setting up Android Studio (still harder than it should be, or maybe my machine is weird). So screw Hello World. Think of a dumb problem to solve badly with software, and let that guide you.

Project: https://github.com/mccartykim/StupidPhoneTricks