Literacy

I’m about two months into learning how to develop iOS applications, and I think I’ve located the key to consumer software engineering (not that I am even close to being good at it, mind you).

It’s not mathematics. In fact, unless you are developing a brand-new machine learning algorithm, math seems to have very little use in commercial software development.

It’s not facility with complex systems, although an ability to visualize interdependent relationships between components helps when laying out models and tracking down bugs.

It’s reading. Competent software engineering ultimately boils down to reading.

I should be thrilled by this realization, because I’m good at reading. I can plow through any kind of fiction at warp speed, and I’m handy with expository material too, whether journalistic or academic in flavor. I’ve been a professional researcher of one form or another for a long time.

Unfortunately, this isn’t the kind of reading I’m used to. This is technical reading. And it’s freaking difficult.

By way of explanation, good consumer software engineering seems to boil down to these three requirements, in order of importance:

  1. Build a product that works as intended,
  2. And will continue to work indefinitely,
  3. As quickly and cheaply as possible.

Notice what’s not on the list.

Build something that works flawlessly at release? Always nice if you can do it, but not likely and not really expected, either. Build everything yourself from scratch? That takes way too long. Build additional features on top of what’s strictly required? Not unless you come in early and under budget. Find a new, more elegant way to solve a problem someone else has already solved? Fixing stuff that isn’t broken is a cardinal sin.

Consumer software engineering is the art of determining which preexisting components you need, locating them, and then combining them in the right wayAnd from what I’ve seen so far, there are many, many excellent components out there just waiting for someone to grab them off the shelf and reassemble them into a billion-dollar product.

Other engineers, computer scientists, coders and tinkerers have been spitting out solutions to difficult problems for decades, both commercially and in the Open Source community. One excellent example I’m learning about right now is Parse, which is a pretty damn solid cloud database solution you can plug right into and start using for free. Someone could very easily use it to build the next Facebook or Instagram in about a week… provided they had the idea for the next Facebook or Instagram (which is an entirely different kettle of fish).

The point is that these building blocks effectively form layers of abstraction that should eliminate entire classes of problem from an engineer’s purview. But again, in order for you to gain access to these amazing shortcuts, you’ve got to know what you’re looking for. Then you’ve got to find it. Then you’ve got to figure out how the hell it works!

And that’s where all the reading–and a fair amount of writing–comes in. Now that I’ve gotten through the nuts and bolts of Objective-C and the basic iOS components, and I’m moving into building real products, I’m spending about 30% of my time on Google and Stack Overflow merely trying to describe the problems I’m trying to solve, in order find the right off-the-shelf tool.  And once I find those tools, another 40% of my time is going to reading documentation and forum posts to try to flatten my learning curve. I spend the remaining 30% trying various things in code.

This is nasty, frustrating, smash-mouth research, conducted in a technical vernacular that I barely understand. The sources are written by people who, to put it charitably, do not necessarily specialize in communication and may not be very sympathetic to beginners. Effective examples are few and far between.

So it’s pretty weird to find myself enjoying it.

Weirdly, I don’t seem to mind banging away on a single small problem for hours at a time, rooting through manuals and bugging people on forums. Because when the damn thing finally works, it’s like I’ve found the Philosopher’s Stone, and I get to enjoy that feeling for five minutes until it’s time to move on to the next intractable issue.

I’ll tell you this much, though. If I ever get to the point where I’m designing my own tools and components for others to use, I’m going to make sure a fourth-grader can read my documentation.

Advertisements

On The Fear Of Sucking, And What To Do About It

I find it too easy to stick to activities that I’m already good at. It’s pleasurable to complete a task and check an item off a list. I get a nice little dopamine fix. My routine is strengthened, and there is comfort in routine. I get fractionally better at whatever it is I’ve just done. And, most importantly, I never have to suck at or struggle through anything. My illusion of mastery over my own little corner of the universe is maintained.

I could dwell forever in my self-created Era of Good Feelings… if I could just ignore the following irritating thoughts.

  • I don’t know whether the stuff I’m good at actually maximizes my enjoyment.
  • There’s a chance that I might be much better at something I haven’t tried.
  • I can’t say that the force that keeps me from doing new things–which are also things I’m comparatively not good at–is rational.

If I were to come at the question of whether or not I should try something new rationally, I would try to measure the opportunity cost of switching tracks against the potential awesomeness of the new venture, weighted by my probability of success.

But that’s not actually what I do. Instead, my intense dislike of sucking at something new regularly trumps the possibility that I might discover something excellent. So I never start, or I quit at the first sign of trouble, and that pisses me off. I hate feeling like I might be stuck in a local maxima simply because I’m scared to feel bad.

I don’t think I’m the only one who acts this way. Starting in childhood, we are carefully observed to determine where our natural talents lie. Those talents are cultivated over time by a number of powerful external feedback mechanisms — parents, friends, schools, the job market. They are turned into economically useful skills, and we learn to rely on them. Sooner or later, this feedback loop is internalized and we become our own cultivators. But we may not have very good control over the mechanism.

Imagine that a rabbit in a lab learns to press a button and receive a reward. The lab’s scientists can condition the rabbit however they like, using a carrot here, an electric shock there. But when the scientists leave, will the rabbit learn to reconfigure the experimental apparatus and teach itself new tricks? Or will it go on pressing the same buttons in the same order to receive the same reward?

As human beings, we have the tools we need to assume command. We can do a lot better than that poor imaginary rabbit… it just doesn’t happen automatically. In particular, we have to power through the negative feedback: repeated failure, frustration, self-doubt, embarrassment, feeling like a total idiot, and all the rest of it.

It’s freaking hard, especially when I know that I can go right back to doing what I’m good at and get the warm fuzzies that I love. But the potential rewards are too precious to leave aside.

So, what exactly am I sucking at in 2015?

  1. Building iPhone apps / software engineering. I’ve been someone who can come up with an idea and describe what it should look like–sometimes in considerable written detail–but I’ve never, ever been the guy who builds it. That is going to change. I’m starting with iOS because it’s easy to commercialize, it’s pretty self-contained from a technology standpoint, and going mobile-first just seems like a no brainer at this point. I’m aiming to have my first production app out by early April. Judging by how difficult this has been so far, that schedule might be a little optimistic. Suckage rating: Three roombas and a clogged milkshake straw.
  2. Brazilian jiu-jitsu. I like jiu-jitsu because it allows me to satisfy my lust for combat without getting punched in the face. I dislike it because, as a beginner, I have roughly the same chances against an experienced practitioner as Panama did against the US. My understanding is that this utter helplessness lasts between six and twelve months, depending on one’s spatial aptitude and flexibility (average and horrible, in my case). In other words, I may have found a really, really good way to practice sucking. Suckage rating: Congress.
  3. Electronic music. That’s right, I’ve started producing bad electronic music! I’m using a Maschine Mikro, a Korg NanoKey 2, and the seemingly endless amounts of IDM, chiptune, shoegaze, ambient, dubstep, and who knows what else lodged in my brain. Check me out on SoundCloud, yo. Suckage rating: Interstellar space.