Sam Vermette Independent Developer
Who are you and what do you do?
I'm Sam Vermette. I live in Montréal, Canada which means my first language is french and I totally love poutine. I design and code iPhone apps for myself. You might know me for Transit as well as Shows. I'm @samvermette on Twitter, GitHub and Dribbble.
My pal @gcamp and I just launched Transit a few months back. It's really been an exciting ride, especially since the launch of iOS 6, which brought us a tsunami of new users. I've been spending most of my time on that, trying to improve the user experience, fix bugs, and add in new cities (we support 28 throughout US and Canada at the moment).
How did you get started in developing for iOS devices?
I always wanted to learn how to make Mac apps but never got the courage to start learning Objective-C. Coming from languages like PHP and JavaScript (which I was already familiar with), Objective-C is a very different deal as you have to think about memory and pointers and all that. Having never studied computer science, that's always been the bottleneck for me. When the App Store came out, the potential was simply too great and so I rolled up my sleeves. I bought a book by Erica Sadun but didn't even go past Chapter 2. I found that the best way to learn how to make iPhone apps is to actually make one. In my opinion, if you have an idea of something you really want to build, the Xcode documentation, Google and StackOverflow are all you really need (developer friends also help).
What does your computer and workspace setup look like while developing?
When I graduated in 2010 and knew I was going to work from home a lot more, I decided to get an iMac 27" and it literally changed my life. I would never go back to laptops. It's incredible how much more productive I got with the extra viewing space. I also really like the idea of my computer being anchored to my desk, which means that whenever I sit at my desk, it's to be productive (versus sitting in the couch with my laptop, which always proved to be a bad idea). I liked my iMac so much that I decided to buy a 27" display to hook it up to it. Having all that viewing space allows me to not have to worry about organizing my workspace, switching between spaces or windows; everything is just always visible haha!
You have shared some great open source iOS code with the community, what makes you want to give back to the Apple development community and keep on contributing to it?
Altruism on the Internet is a fascinating thing (I mean, just look at sites like Wikipedia). I had used many 3rd party classes that made my life easier and so I wanted to give back. Most importantly, I felt it was an opportunity for me to learn how to abstract my code and become a better programmer. I would definitely recommend it to anyone who wants to get better at writing code. I think releasing parts of your code to the public is scary at first because people are going to judge, but it's for the best as you will get feedback on how that code could be improved. I also see it as a design challenge, as you gotta make your class as easy to use as possible. That's what pushed me into releasing classes like SVHTTPRequest, SVProgressHUD and SVPullToRefresh.
You both design and develop for iOS, what are the pros and cons of this for you?
It's great because very little is lost in the transition from mockups to code. For things like margins and font-sizes, I can very rapidly iterate by changing values directly in code. I also know what's going to be possible and what's not, so I already have these constraints in mind when I design mockups.
The cons are that I have to finish a mockup to start writing code for it. Unlike programming, design requires inspiration, which is a limited resource that doesn't always come on demand. Implementation of a new feature can get delayed by 2 weeks because I still haven't found the right design for it. Sometimes I wish I had someone else do all the design work so that I could focus on programming, or vice-versa.
What is some essential software that you use outside of Xcode for development?
I spend a lot of time in Photoshop. I use Gitbox and Kaleidoscope for version control. They're both great apps, although Gitbox could use an update (I hope it's not dead!). When I work on web backends, my text editor of choice is Chocolat, although some things have seriously been bothering me with it. From all the text editors I have tried (Sublime, BBEdit, TextMate, Espresso), it still remains the one I love most. Other apps I use a lot include Kickoff, Transmit and Sequel Pro.
If you had two minutes to share your favorite debugging tip with a fellow developer, what would it be?
I used to abuse NSLog, until a friend told be about the debugging console. Until then, I thought the only purpose of breakpoints was to see if particular code got executed. So yeah, set breakpoints but also use the console to print the content of your objects and variables. Another tip I would give is whenever there's weird stuff going on, 90% of the time it's because of ARC (for instance some object getting released too early) or threads (code running on a bg thread that should be running on the main thread). These 2 things alone represent a ridiculously high percentage of all the issues I get on GitHub.
Finally, what is your favourite app?
I like Kickoff 2 a LOT. The chat is simply amazing, more than anything that's out there. It makes Adium and iMessage look and feel ridiculously outdated. I really hope they turn it into a dedicated app some day — it's really that good!