Here's what I've learned from releasing Underground to the Android
Market:
- Mobile software is like blogging. Both have a direct
relationship between good will and update frequency. People love
updates. Every time I upload a new version, there's a spike of new
downloads and positive comments, probably because it kicks Underground
back up to the top of the Market listings where people can find it. If I
were doing this for money, the lesson would be clear: update often with
small tweaks. Indeed, Android's no-approval update process makes this a
lot more feasible.
- Code for yourself, it'll find an audience. Not a large
audience, but one that's remarkably vocal. It's self-selecting, sure,
but the comments for Underground in the Market have been largely
positive, with several glowing reviews and people who like it enough to
e-mail me. Some, in fact, who maybe feel they should e-mail me a little
too much. In no small part, this is just a factor of scale: centralized
distribution has its downsides, but the sheer reach of it is impressive.
- Java is exactly as annoying as I remember. When I was in
high school, I learned a little bit of Java--enough to think that it was
a language designed by uptight Computer Science professors to make even
small tasks many times more complicated than they needed to be. Years
later and with a bit more experience, my opinion hasn't changed
noticeably. Checked exceptions (those that require a try/catch block)
may be the most annoying innovation of the last twenty years, but if
you're used to dynamic languages (and what web worker isn't?), it'll be
the ridiculous InterfaceListener abstract classes, lack of first-class
functions, and overzealous static typing that'll really drive you nuts.
I can be productive in Java, but I never stop feeling like I'm typing
three times as much as I would in PHP or ActionScript.
- Open source means education. Underground isn't incredibly
complicated, but it has a couple of neat tricks up its sleeve--mostly in
the code for capturing the home button and querying the package manager.
It's unlikely I would have been able to figure these out if I hadn't had
most of the Android source
tree available to me, including the built-in launcher. And in turn,
while nobody else has submitted any patches to Underground's code
repository, I've had several people write to say that they
appreciated being able to read through my code and learn from it. With
that in mind, I spent about an hour last commit adding extensive
comments. From my perspective, open source is only partly about getting
outside input. It's more about leaving the process out there,
encouraging transparency, and lowering the barrier of entry--increasing
generativity, in other words.
- Seriously, people, e-mailing me once is flattering. Ten times
starts to get a little creepy.
- The Android UI toolkit is relatively painless. I did almost
no work to transition Underground to high-dpi devices, and it scaled
beautifully (the use of device-independent pixels for layout is highly
recommended). Being able to build a custom dialog box using the same
tools as everything else, then just inflating it and throwing it into
the AlertDialog Builder, is pretty cool. For a while, I had some builds
that incorporated much more complex UI ideas--some fancy designs
submitted by a user that added some graphical touches, including a frame
around the main list. I was impressed by how simple it was--particularly
the PreferenceScreen built-in class, which handles both preference
getting/setting and look-and-feel for you. And while I'm not a huge fan
of XML files, using them for layout also means that when you shelve
large chunks of the design (as I eventually did), you can just comment
those sections out. In a lot of ways (as with the rest of Android's
design), it reminds me of the best parts of web programming translated
onto a native platform.
Overall, I've really enjoyed learning the platform and joining the
community. I did some other hobby work on Android the other week (wrote
a Locale plug-in for detecting headphones and started a utility/plug-in
for launching arbitrary custom Intents), and I think it's lived up to my
initial impressions of a smart, interesting API design. That said, now
that Underground's in decent shape (most of the requested features have
been added), I'm taking a break from Android coding for a while to give
my hands a rest and concentrate on other hobbies. When I get the urge
again, I'm thinking about contributing to the official NPR
client--it's not a particularly good citizen on Android, and I think
it'd be a good way to get involved with other digital journalists.