The Making of LogoPlus, Part 1

I was sitting around one night thinking about my career, specifically with regards to gaps in my technical expertise. It suddenly struck me while I have owned and used Apple computers for the majority of my life, I've been working on Microsoft Windows based projects (albeit via VirtualPC and later VMware Fusion) for so long that I wasn't sure if I could still develop a "good" application for the very platform I use on a daily basis. It also struck me that I've come to rely on both my iPhone and iPad and these devices offer an incredible amount of computing power sitting in the palm of my hand.

It was definitely time to do something about this expertise gap. I decided that the best thing I could do was immediately start work on some sort of iOS application. Developing for iOS would give me a chance to reacquaint myself with Objective-C (and thereby the fundamentals of Mac OS X programming) while also learning about how to develop effective user experiences on a mature mobile platform.

I figured this project would be a perfect showcase for what a great software developer could accomplish even with an unfamiliar technology. As an added bonus, developing this app gives me a fresh portfolio of code that I own and can legitimately show to potential employers to give them an idea of how I architect software.

After kicking around a few ideas I settled on the idea of developing some sort of Logo programming environment for iPhone/iPad. Logo holds a special place in my heart since my mother introduced me to it at the very young age of 7.

I spoke to my mother while writing this article and asked her about her intentions when she introduced me to Logo:

"You wanted to make things and you wanted to make things work. Logo was something I had read about...I was playing with fractal math and you got sounded like the sort of thing that you could play with and make these patterns and other sorts of things. You were very interested in the patterns. I didn't have any huge plan except to expose you to something you might be interested in. Logo makes sense and you can make this little cursor run around and make patterns."

This early experience with Logo captured my interest and formed the foundation for my career in software development; thanks Mom!

As I got more excited about my concept for this application, I decided to take a step back and make sure that I wasn't reinventing the wheel so I spent some time looking around the App Store to see what else was out there.

I found several existing Logo-like apps, each offering varying levels of functionality but each with their own quirks. Based on this research I developed the following requirements for my own app:

  1. Must support best practices for user interaction with iOS apps.
    The iOS platform has so much to offer that I would be doing the user a disservice if I didn't take full advantage of all the various gestures and standards to which users have become accustomed.
  2. Must support screen rotation to any orientation.
    I think it's very important to allow the user to work in an orientation that works best for them, not necessarily the one I would personally prefer.
  3. Must be universal (i.e. support both iPhone and iPad).

    I see no reason to limit my market to iPad devices only when the iPhone is just as powerful and much more likely to travel everywhere with the user.
  4. Must not have in-app ads.

    I feel that for this type of application in-app ads would seriously detract from the user experience, both in screen real estate occupied and the distraction factor. As a parent myself, I would also prefer that my son is not exposed to advertisements while trying to learn something. I'm betting that most users would pay an extra couple of dollars to have an app that just does its job properly.
  5. Must support generally accepted Logo dialects.
I decided that expression aliases were an important step towards this goal (e.g. SETPENCOLOR, SETPC and SETC all accomplish the same task). I further decided that since "pure" Logo is not sensitive to inclusion of line breaks, that my implementation should not be either.
  6. Must have a standard text-based program editor.
Other Logo-style apps out there have taken a variety of interesting approaches as to how they allow the user to write their code but I want to support a more flexible methodology - back to basics if you will. This of course will allow users to copy and paste existing code examples from various web sites and immediately use them in my app.

With this set of requirements in hand I began to design my new app...

Stay tuned for upcoming articles in this series in which I get into nitty-gritty of my development process and dissect my LogoPlus interpreter.