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 Graham Lee.
Who are you?
I’m Graham Lee, based at Agant, a mobile app development company in Leamington Spa, England. I split my time between developing iOS apps and doing security consultancy for other mobile app developers: my official job title is “security boffin”.
What do you do?
I’m fairly new at Agant so can’t point at any of our products and say “I made that”, but I am excited about the project I’m working on now.
The security side of my work started when I was employed by Sophos as lead developer on their Mac anti-virus app.
When I left there I went self-employed for a couple of years and published some books: Professional Cocoa Application Security and Test-Driven iOS Development. It’s now time for me to do less talking and more working.
I’ve had a bit of a varied history though, having worked on Java, Perl and UNIX C projects in addition to the Apple tech.
What is your development environment?
As I mainly write iOS and Mac software I’ve got Macs everywhere: an iMac at work, and a MacBook Air everywhere else.
I usually have both AppCode and Xcode open at once, because AppCode’s got a much better Objective-C editor, but can’t deal with the interface and data modeling formats used by Xcode.
When I’m writing Java I use Eclipse, partly because I previously worked on an RCP application. AppCode’s got me considering a switch to IntelliJ though.
At the moment I’m keeping a watching brief on Windows 8 and the WinRT, and trying to find the time to dig deeper. It’s great that Microsoft have gone in a different direction with their touch application design than iOS and Android, and that they’re taking a significant risk with their Windows cash cow. The Metro UI looks great, it just remains to be seen how developers take to it and what we can make it do.
What is your coding pet peeve?
I’m pretty relaxed about naming conventions - when I’m working with other developers we can usually find some common style to use even if it means changing where I put my brackets.
My biggest bugbear at the moment is the technique that’s variously called Buzzword-Driven Development (BDD) or Resume-Driven Development (RDD): dropping current working technologies to pick up the new hotness. There’s plenty of exciting new languages and frameworks around, but we barely get time to discover and solve existing problems before developers have moved onto the next thing.
Sometimes I think that if the energy that’s gone into making this week’s new web framework had instead gone into making the existing ones better, there’d be a lot more good software in the world.
How did you get started programming?
The year after I was born my Dad bought a Dragon 32 (for American readers, that’s a clone of the Tandy CoCo) so I grew up typing in BASIC listings from magazines.
Then in the 1990s I had an Amiga - I was still doing BASIC programming, but also picked up Pascal and C (along with Amiga E, which no longer matters). It happened that the computing classes on my degree were in Pascal, so that meant some easy afternoons!
My first paid programming job was a university vacation project, writing a syntax-highlighting mode for emacs in Lisp. However it wasn’t really emacs I was interested in when I was a student - it was the NeXT workstations in the computer lab. So I learned some Objective-C…and ended up here.
If it weren’t for the community I probably wouldn’t be much of a better programmer than I was in 2006. I virtually live in Twitter (I’m @secboffin) now: in addition to having good discussions with peers I get and make a lot of recommendations there.
I deleted my LinkedIn account a while back as I’ve never used recruiters and they were the only people talking to me.
StackOverflow is useful for some specific technical questions, and I enjoy the wider discussions about practice and principles on programmers.stackexchange.com.
When it comes to learning from the community I like to find out what people outside my direct field are doing and thinking about how I can apply it to my work. That often means when I go to conferences I join in the tracks I have little experience in. I was recently speaking about mobile development at GOTO Copenhagen, but spent a lot of time listening to Clojure and F# programmers.
My main gripe with the way the community works is that there are a lot of echo chambers - people who stay in a clique repeating its clichés. This is most annoying when they’re saying that we developers need to change how we work, without ever telling us how. If I wanted to be hypocritical I could describe the principle symptom of this as Platitude-Driven Development or Tweet-Driven Development. That means conference talks that serve as vehicles for the speakers to get catchphrases retweeted, and talks that laugh at “the fail” without telling the audience how to improve. You see it among security experts (“Developers should do security better”) and UX professionals (“Developers should do UX better”).
Tell us how or you’re not telling us anything.
What advice would you offer to an up-and-coming programmer?
In addition to gaining coding experience, it’s key to learn the ability to look up from the code and consider it in context. Think about the project you’re working on now: how does what you’re writing interact with the rest of the system? How will people use it? Might there be something people try to use it for that you haven’t anticipated - or have you gone too far in coding for edge cases that will never be met? And, most importantly, who can you talk to to get more answers?