Interview with Aaron Hillegass
I had the privilege of interviewing Aaron Hillegass for InformIT in support of the brand-new third edition of Cocoa Programming for Mac OS X. We talk a bit about the book, but a good chunk of the interview is about his thoughts on Mac and iPhone programming in general.Aaron: It is a great time to be a Cocoa programmer. Apple is selling 50% more Macs than they did a year ago. They are selling iPhones by the boatload. The Cocoa community is, in the grand scheme of things, rather small right now. I suspect that it will double in size over the next two years. Everyone in that community will know how to write code for either device.
I think the interview comes off as being insightful and and candid. I hope you enjoy it.
Interview with Aaron Hillegass
Posted May 29, 2008 — 11 comments below
Posted May 29, 2008 — 11 comments below
Eric Trepanier — May 29, 08 5951
Thomas Vossen — May 29, 08 5952
Kevin Walzer — May 29, 08 5953
Apple's approach is analogous to *mandating* that professional web developers use WSYWIG tools in creating websites. Many web developers don't like such tools because the HTML generated by such tools is more bloated than they would write themselves--it also make it harder to do fine-tuning of the HTML.
Jeff LaMarche — May 29, 08 5954
@Kevin: Nobody "mandates" that you use Interface Builder. It's the standard way of doing things because it offers a lot of benefits and provides a huge time savings, but there's absolutely no reason why you can't create your interface programmatically without ever touching IB. It results in a lot more code to maintain, but you are absolutely welcome to do it. You can even create Cocoa programs using just a text editor by writing code and creating make files if you really want to. Seriously - I know people who have done it. You have to really learn GCC and the other tools that are being used under the hood by Xcode, but that's your prerogative if you don't want to do it the easy way.
Scott Stevenson — May 30, 08 5956
I can only speak from my own experience, which is that he has never said anything to me that came off as anything but gracious and courteous. In addition, a friend of mine (a former student of mine, actually) spent a week with Aaron at Big Nerd Ranch, and speaks very highly of him.
It probably helps to keep in mind that text doesn't always "read" same for everyone who looks at it. Given that the format here is an interview, I'm inclined to believe that Aaron's answers reflect his own personal experience, and that he's just giving candid opinions instead of a verbal press release.
I really appreciate that because I think it's the reason for doing an interview in the first place. To me, it shows respect for both the interviewer and the reader.
Scott Stevenson — May 30, 08 5958
As Jeff LaMarche said, Interface Builder is just a convenience. Anything you can do in IB you can do in code. In fact, IB can only set attributes on an object that are exposed by the object's class, and some properties can only be set in code.
Mac programmers use IB and NIB files because they save tons of time and reduce boilerplate code. Some also find it helpful for visualization. The main point of Cocoa is to get you away from spending time on tedious tasks and on to things that are unique about your app.
Many web developers don't like such tools because the HTML generated by such tools is more bloated than they would write themselves
IB actually doesn't generate code. It just sets properties on objects using the same methods you'd use if you were doing it by hand.
For what it's worth, IB could be used to generate classes in earlier versions, but it would only really generate the headers, not the implementation. In any case, I don't think that functionality is available anymore.
Steven Degutis — May 30, 08 5960
I believe the functionality is still available in Interface Builder 3, it's just been made more obscure and difficult to find, and for good reason. Code and headers should be created in Xcode, and the interface should come afterwards, since this is the logical way to do things. You could even say that this functionality has been "deprecated" in IB3.
JordyJediknil — May 31, 08 5967
[NSApplication sharedApplication]; [NSBundle loadNibNamed: [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSMainNibFile"] owner:NSApp]; [NSApp run];
Of course, you could always use a minimal MainMenu.nib and create the rest of your interface in code, avoiding the need for the few secret overrides Jeff discovers.
Aaron Hillegass — Jun 03, 08 6009
After seeing this comment, I reread the interview. You are right: there are parts of the interview where I sound rather arrogant. I'm sorry about that.
I was using the opportunity to promote the classes and the book, and sometimes that veers a little close to self-promotion. It was an honest mistake, and I'll be more careful in the future.
(Honestly, I didn't think anyone would actually read the interview. I was on vacation at the beach, the children were napping, and I pounded out the answers and sent them to InformIT.com before the boys awoke. InformIT.com? Who reads stuff on InformIT.com!? )
Michael — Jun 05, 08 6022
Do you really feel that Apple snubs the business client with their lack of support for making business objects with Cocoa, or do you think that savvy developers can/should utilize existing C libraries to handle this layer? Or do I just sound naive asking this question? I know they're busy with other stuff like selling music, and they're very successful, but...
I am really interested in knowing what your honest suggestions for hopeful client/server (n-tier) business application developers might be on the Mac platform. I have searched the Cocoa boards for information and frankly, there doesn't seem to be much out there about making connections to databases, developing network stacks, etc. and I'm a bit disappointed by that, but I know it can be done. I have your 2nd edition book and the red Advanced book and have even read most of them - I just need an opportunity to ask the questions in the right forum. I don't live in Cupertino - I live in South Louisiana - just got our first Apple Store a few months ago - and I've been enjoying and recommending the Mac since 2001.
Why don't I want to use Filemaker, you may be asking yourself? My response is that I want to control the interface completely. I want to be able to use all the great Cocoa UI-gui-ness and not be restrained by someone else's idea of a good front-end. I also want the system loosely connected to a centralized database so that if you lose network connectivity by choice or incident, it doesn't hose the whole darned thing. I may also not want to, or be able to, pay the Filemaker developer's tax.
Getting to the point - where can I get some multi-system design architecture development advice for Mac OS X? Core Data, distributed objects, Bonjour, Web Objects, they seem to suggest an architecture...
I've seen the questions posed on the lists - other folks want to use a Core Data-designed client to serve as a local cache and sync the stored data with a centralized database. Possible? Feasible? Recommended?
Steven Degutis — Jun 06, 08 6026
Honestly, I didn't think anyone would actually read the interview.
I think you underestimate your popularity within the Mac-development community. You're right when you say your book is a de facto basis for most knowledge we build on. In the irc.freenode.net channel #macdev, we ask people to buy your book before we answer their "beginner" questions; your name is a household name for most of us.
Nice hat by the way :)