Welcome to our continuing series of Code Project interviews in which we talk to developers about their backgrounds, projects, interests and pet peeves. In this installment we talk to independent Mac app developer Andrew Pepperrell.
Who are you?
Hi there, I’m Andrew Pepperrell and I live just outside of Cambridge, UK. I don’t really have a job title but I work for myself and I created Alfred, a keyboard based productivity tool for Mac OS X.
What do you do?
Before working on Alfred, I did a range of work from low-level enterprise Java through to front-end web development. The key to my experience in user interface design comes from many years of wrestling with the Java/Swing toolkit to create a highly responsive, usable and native feeling design over what was essentially an extremely complex data processing and cleaning engine.
Now that I work on OS X, my day consists of 70% Mac development and 30% interacting with Alfred’s community over Twitter, email, etc.
Vero, who is my wife and business partner at Running with Crayons, has been taking on an increasing part of our user support over the past year, which has allowed me to concentrate more on development and less on support.
What is your development environment?
I was never really into Macs until around 7 years ago when I got a G4 Mac Mini with a 20" Apple cinema display (the display I still use today).
Things have progressed a little since then and I have two machines which I develop on. My primary development machine is an older 24" 2.93 Core 2 Duo iMac with 8GB ram. It’s really starting to struggle with Xcode these days but I’m holding out for the new iMac golden carrot, which feels like it's been dangled in front of us for a year now!
My second machine is an i7 13" MacBook Air which is light enough for me to travel around with and powerful enough for all my development needs. I toyed with the idea of getting a retina MacBook Pro, but when I held it in store, even though it’s very small, it makes you realise how amazing the MacBook Air is!
I have one further Mac, a slightly older intel Mac Mini is an absolutely clean and up-to-date OS X install, which I use as my build machine.
I mostly use Xcode for development, naturally using Objective C / Cocoa. I don’t use many 3rd party frameworks, however I do interact directly with sqlite3 using FMDB and also use Sparkle for Alfred’s auto-updates.
This may sound boring, but I don’t really have much time to play with new tools, languages or frameworks as I am spending most my time working hard on Alfred, but I have been keeping up with the latest changes to Obj-C and love refactoring code to make things work better.
What is your coding pet peeve?
I think my biggest pet peeve is people who claim that “good code explains itself, so it doesn’t need to be commented”.
All code needs to be well-commented and laid out. In fact, I take significant care in laying out my code to be extremely legible and well-commented. Syntax highlighting helps with this too, as comments appear in a different colour allowing logical separation of code for readability.
I use tabs instead of spaces - there are many debates over which are better; I simply prefer tabs because it allows the person reading to change the indent to their preferences without altering the code (for me Tab is equivalent to 2 spaces).
Final code style hints are camelCase and opening curly brackets on the same line.
How did you get started programming?
I have been programming as far back as I can remember. My first real computer was a ZX Spectrum+. My parents used to buy me programming magazines and I would copy code line for line into Basic and get the computer to do really simple things, but it felt like I was in control of the world!
The next notable computer was a Commodore Amiga which I used to do little bits of game development on just for myself. Getting a square blob bouncing around the screen when you pressed the keys was amazing!
There has been an interesting shift over the past few years. The Java community used to be very strong and you could find answers to any problems you may be experiencing. When I first started Objective C, it was very hard to work through problems. With the advent and popularity of iOS development, there are many more resources for helping developers when it comes to Obj-C/Cocoa, especially on sites like Stack Overflow which, in many ways, provides more answers and discussion than Apple’s own documentation and developer forums.
While the internet can be a useful resource for finding answers to code problems, I prefer to dissect problems myself and fully understand why something isn’t working or how it could work better. This is to some extent why I don’t use many 3rd party frameworks for Alfred as it allows me to highly tune code and stay 100% in control.
What advice would you offer to an up-and-coming programmer?
Stop reading to learn and just get dug in.
Also, for an early project, release early and iterate - I released Alfred at 0.4 and added features from there. This helps you get a feel of how users want to use your product and allows you to better shape it as it moves forward.
On the flip side to this, don’t implement everything a user asks for. You have to carefully manage adding features to keep the simplicity of the product there for 99.9% of your users. If I added every feature requested by one or two users, Alfred would be a complete mess.
Choose a simple problem to solve and, once you get started, keep up the momentum. Spend an hour less watching TV in the evening and keep improving your app. Once you start building a community of users (and fans) around your project, they'll provide motivation but it's all down to you as the developer to keep going!