The maze book for programmers!
PragProg Amazon BN.com

Algorithms, circle mazes, hex grids, masking, weaving, braiding, 3D and 4D grids, spheres, and more!

DRM-Free Ebook

The Buckblog

assorted ramblings by Jamis Buck

Don't Assume It's Difficult until It Is

9 January 2016 — The author shares three experiences which have taught him to reserve judgement on which parts of a task will be the difficult ones — 5-minute read

Does a task look like it might have some difficult or challenging bits? Don’t be too hasty in drawing that map. Your assumptions almost certainly have some gaping holes in them.

About twenty years ago I returned home from a two-year stay in South Korea, where I had served as a missionary for my church. During those two years, I had gained some proficiency in the Korean language–reading, writing, speaking, and listening–but I’m not going to lie: Korean is a difficult language for westerners to learn. I never came anywhere near fluency. It was hard.

However, that’s not for the reasons you might initially think.

When people discover that I know Korean, they often say things like “wow, how did you learn to read it?” or “that must have been hard–the words aren’t anything like English, are they?” In reality, those were two of the easiest aspects of Korean to learn.

The Korean alphabet is phonetic. It’s composed of letters that have well-defined sounds, and you combine those letters into syllables. I learned to “read” Korean (sound out words, but without any real understanding) in one day–and anybody could. It’s actually much easier to do than English, where the sounds letters make have lots of seemingly-arbitrary exceptions.

Likewise, the Korean vocabulary itself is no more challenging than any other language. Anyone who’s learned another language will know that memorization plays a huge part of learning vocabulary. You just muscle through the associations, meokda means eat, dalgyal means egg, and so on. So, yeah, learning Korean vocabulary was a challenge, but not especially so.

So what made Korean particularly hard? The things that most of us who grew up with Romance or Germanic languages take for granted: word order, pronunciation, honorifics, and cultural and semantic nuances that are difficult to translate. These are things that I only learned were really hard after I was well into my journey of learning Korean. The bits that I thought were going to be hard, turned out to be fairly straightforward.

Tangling with String Figures

I had a similar experience about 6 or 7 years ago, when I first started a serious study of string figures. These are the patterns that are made (usually with the hands, but sometimes including the mouth, neck, and even feet) using a loop of string. In the west, they often get lumped under the name “Cat’s Cradle”, though Cat’s Cradle is really just one popular example of a series of string figures.

I often take a loop of string with me, wound carefully in my pocket, and will spend idle moments (in line at the store, browsing at the library, or even sitting in meetings) making different figures. It’s a fun way to pass the time, and while I sometimes get odd looks, more than once its been a great ice breaker and conversation starter.

I’m often told, “Wow! I don’t think I could ever get my fingers to do that!”

The truth is, making your fingers do the necessary movements is rarely the hard part. Most of the movements are simple, the figures are built up a step at a time, and even the most complex figures are usually just a series of common patterns repeated and combined in creative ways.

Despite that, when you start digging into string figures, you’ll find that there really are difficult things. One of the hardest is, surprisly, deciphering written instructions. Because fingers can be moved in an enormous variety of different ways, authors have gotten very creative in trying to unambiguously describe those movements. You’ll discover words like “distal” and “proximal”, “radial” and “ulnar”, and you’ll find yourself trying to parse meticulously written prose, like:

With the right thumb and index, grasp both hanging strings and bring them toward you, so that the radial index string passes between the left index and middle finger, and the ulnar little finger string passes between the left ring and little fingers. – “Kwakiutl String Figures”, Averkieva & Sherman, p. 131

That can be hard, and it’s not at all what I thought would have been hard when I first started learning string figures.

Bringing it Home to Software Development

Most of you reading this article will probably have had experiences like this. You’ve probably had more than a few people say, upon learning that you write software, “wow, I could never wrap my mind around all that math!” or “you must have a very logical mind!”

Now, there are certainly very mathematically-focused software developers. And there are some areas of software development that require a “very logical mind.” But the fact is that computer programming is a skill that anyone can learn. Whether left brain or right brain, creative or logical, liberal arts or technical–it really doesn’t matter.

Honestly, I’ve employed very little advanced math in any of my professional career, and while knowing truth tables and Boolean algebra has been handy, most of it is just common sense. “Math” and “logic” are definitely not the hard parts of most programmers’ careers.

So what is hard? For me: troubleshooting!

Something’s broken in production? “Give me a half-hour and I’ll see what I can find.” And then, four hours later, I find I’m still as uncertain of the root cause as I was at the beginning. Troubleshooting subtle interactions between hardware, network, environment, and software is one of the hardest things I’ve done in my career, and it’s not something I ever really feel is hard until I’ve spent two days on an issue that I originally thought should take fifteen minutes to solve.

Fine Tuning Your Assumptions

It’s always the bits that sneak under the radar of my assumptions that prove hardest for me. Whether I’m studying Korean, or making patterns in string on my fingers, or working on a system for a client, the hard parts are invariably not what I thought they would be.

I’m finally learning the lesson, though. When faced with something new, and I find myself trying to proactively identify the hard parts, I stop. Until I’ve actually been in the trenches, I won’t know what the hard parts really are. I just don’t have enough information. So, instead, I content myself with supposing that the parts that look hard, aren’t, and anticipating the adventure of learning without prejudice or preconception.

Not easy. But I guess that’s one of the hard parts of living.