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 Daniel Jalkut, Mac developer and podcaster.
Who are you?
I’m Daniel Jalkut, the founder of Red Sweater Software. I live and work from my home office in Arlington, Massachusetts, near Boston.
What do you do?
I started at Apple in the mid-nineties, working on System 7 software for the Mac. I moved over to the Mac OS X frameworks group and developed software for the Core Services group while Mac OS X was first being developed and through Mac OS X 10.2.
For the past several years I have been working on a variety of my own apps for sale over the web and through Apple’s Mac App Store.
My most popular app is MarsEdit, which is a desktop blog editing app.
I also develop Black Ink, which is a crossword-solving app, and a few utility applications.
I’m the host of a technical, conversational podcast called Core Intuition with my friend Manton Reece.
What is your development environment?
Like most Mac and iOS developers, I spend most of my time in Xcode, Apple’s free IDE.
I develop almost exclusively in Objective-C, again because it’s the way to develop for Apple’s technologies, but also because I embrace the simplified philosophy of Objective-C. Languages such as C++ don’t appeal to me because the rich expanse of features offers too much opportunity to get lost in “clever” solutions. I prefer the constraints of Objective-C, combined with some well-worn design patterns that make it clear how most problems should be tackled.
For general-purpose scripts and web programming I tend towards Python, and prefer to edit those with BBEdit from Bare Bones Software. I also spend some time working with PHP because it’s so omnipresent in web frameworks, and I use some PHP-based packages such as WordPress and Vanilla Forums to power parts of my web sites.
Finally, as a developer of a blog editor with WYSIWYG HTML capabilities, I spend a lot of time dealing with the nuanced behaviors of Apple’s WebKit library. Their built-in web inspector is an invaluable tool for debugging rendering and performance issues, as well as for quickly prototyping potential code solutions when any web or JavaScript-based process is involved.
I’m fascinated by Apple’s continued progress with LLVM and clang, their compiler virtual machine and C front end. The technologies they are developing make it increasingly common to be able to detect bugs (clang analysis) before code has even run.
I’m also curious to see how the LLVM technologies may make it possible for folks to write code in whatever language of their choice and have it be dynamically converted to another language. I suspect we’re inching as an industry towards an increasingly technology-agnostic world where getting the bits pushed where they need to be efficiently will be the primary consideration.
What is your coding pet peeve?
I have a lot of sticking points with style and convention that roughly match the prescriptions made by the excellent book Code Complete by Steve McConnell.
In general I try to adopt the philosophies of DRY (don’t repeat yourself), to limit the size of methods and classes as much as possible, to favor composition over inheritance, and you’ll almost never find me writing a function or method with more than one return statement.
How did you get started programming?
Even though my dad was a professional software engineer, developing compilers, I got a relatively late start to bona fide programming. I spent some time as a teenager fiddling with my Commodore 64 in Basic, and did a small amount of tutorial-level experiments with C on my Amiga computers.
It wasn’t until I was introduced to the Mac and started studying as a Computer Science major in college that I got into programming enough to tackle a project and see it through to completion. My first significant project on the Mac was a GUI implementation of the classic UNIX game “robots”, in which a protagonist moves around on a 2D grid, attracting dumbly advancing robot characters in an effort to have them collide into one another and explode.
Those of us who came out of the Mac developer community have the benefit of some long-time, mutually supportive connections. It’s not uncommon for ostensibly competitive developers to sit down for beers or lunch, or even to share snippets of useful code. The success of iOS has brought a large number of new developers into the scene, and many of them have embraced this attitude and helped to grow the nurturing environment even larger.
Our community has a strong presence in blogs, Twitter, GitHub and on Stack Overflow. All of these venues do an excellent job of serving to extend that basic desire most of us have to help each other out, while possibly showing off a little bit in the process.
The developer community for Apple’s products is of course strongly influenced by the company itself. Most of us have a love/hate, or at least a love/anguish relationship with the company because it is famously indifferent to the specific desires of individual developers, while continuing to uphold lofty ideals for how software should be built and what the ultimate value of software should be for end-users.
What advice would you offer to an up-and-coming programmer?
The main advice I give to people starting out is you have to ship something before you know whether you’re really cut out for this. One would laugh mercilessly at a self-described car or motorcycle enthusiast who had never taken their beloved vehicle out for a spin. The purpose of software development is to create solutions that can be scaled effortlessly to benefit hundreds, thousands, or millions of people. And the feedback loop of discovering how well or poorly your software achieves the goal of benefiting people is a crucial part of becoming a better programmer.