Monday, February 25, 2013

A Whirlwind of Words

I have a memory of being a 6-year-old in a "Colony Kitchen" restaurant with my family, waiting for my burger and a chocolate shake… and in front of me was a paper placemat, with a puzzle printed on it.  A grid filled with random letters, but hidden in the grid were words, up, backwards, and on diagonals.  And it was my job to find all the words before my dinner came.  I loved these kinds of puzzles.
Fast forward several decades, and I thought it was time to create my own word search puzzle making app.  After all, how hard could it be to lay a bunch of words in a grid, and fill the rest with random letters?

Oh, the power of words.  Any engineer will tell you that the words "how hard could it be?" are a dangerous incantation that summon up a demon I nicknamed TOM (for "Titan of Midnight".)  TOM hides and waits in the shadows during the day, letting you think everything's easy.  Then at 15 minutes before dinner, TOM quietly injects a thought into your brain.  A seemingly innocuous thought.  But the more you think about it, the thought quickly grows into a tree of horrible problems.  Usually this thought becomes so overpowering and compelling that you will choose to skip dinner and keep working to solve the problem until midnight.  And TOM will be ready with another thought the next afternoon.

After working on the word search app for a couple of weeks, and thinking glibly that things were going really well as it started displaying giant word search puzzles, TOM stepped out of the shadows.  The first thought TOM whispered to me was: "what if the random letters accidentally create another copy of one of your words?"

I rebuffed TOM with, "Ha!  That's a one-in-a-million chance… I think?  Hmm… which means, it will happen, and users will find their word in the WRONG place, not where my answer key tells them it is, and they will report a BUG!  Dang, I have to fix that!"  So I wrote more code to scan every inch of the puzzle in every direction with each of the words, removing any randomly created user-words.  Then I ate my cold dinner and went to bed.

TOM was merciless.  That night I had a bad dream, full of bad words (I probably should avoid tamales at midnight.)  TOM growled obscenities in my ear… "what if the elementary school teacher makes puzzles for children, and your puzzle is filled with random naughty words?"

I awoke at 5 AM in a cold sweat.  Now I had to look for and eradicate any random swear words too!  Well, unless the user actually made a puzzle of naughty words, I would leave those alone.  Solving that problem was actually fun and interesting, including the difficulty I had trying to come up with a list of naughty words to look for.  But I definitely knew that this was NOT easy software to write.  And as I researched a lot of the "Free Web word search makers" out there, I realized that I was starting to solve some of the hard problems that others had run into.

TOM had a few more tricks to throw at me, like "What if the word BAT gets completely embedded inside the word BATH?"  So I had to make sure a word has at least one letter that is NOT embedded in another word.

But eventually TOM got banished by my beta testers and went to bother somebody else, and I finished my word search puzzle maker.  It is now available for Macintosh computers for $9.99 at the Mac App Store!

Here's a quick little video that gives you an idea of what it can do:

And here's a link to the information page for "Whirlwind WordSearch":

I would be thrilled to have you take a peek at "Whirlwind WordSearch", and tell me your thoughts!

And please be careful not to say that incantation around engineers!

1 comment:

John Hall said...

Hi Eduard,

"How hard could it be?"... ;-) How many times have managers asked their subordinates that question? How many times have we asked OURSELVES that question?

That's a good story about the work that's involved in building an app, and the additional work that's unanticipated. I love the fact that your quest started with a 6 year old's fascination with a diner's puzzle! :)