Some times, things come easy to me. I’d like to think that I’m somewhat blessed in that way, especially when it comes to various forms of technology. Back in the Navy, I found I had a knack for telecommunications, and I found that I could grasp the flow of the circuits through various media easily. I nurtured this technological edge, and turned it into a career as a systems administrator. It meant lots of long nights and many mistakes along the way, but it was fun, I enjoyed it. Like I said, some things come easy… but some things just don’t. For example, I have no mental capacity for sports. I enjoy playing every now and again, but I can’t keep track of who’s who and what’s what in this professional team or that college team. It just doesn’t come easy to me.
Four months ago I decided to learn how to program using the Cocoa language and XCode development environment on the Mac. I dived in, buying the preeminent book on the subject, Hillegass’ Cocoa Programming, and poured through each page, and completed every challenge before moving forward. I even tweeted my progress. I would get up at 5AM and program for an hour before having to get ready for work. Then, at night, when the kids were in bed, I’d go back and program for at least another hour, mostly more like two or three. I really wanted to be good at it. For a while, I thought I was going to be. I finished the book, and started on the “Chapter 35 Challenge”, which, in a nutshell, is to develop an application and let someone else use it. I had an application in mind, I had drawn out everything that I wanted it to do, I had each panel, sheet, and window planned out. It was going to be a core data application for managing servers, kind of a nagios, webmin, and cfengine all rolled into one. It was ambitious, but, I reasoned, attainable. It turns out that I was wrong.
Programming in any language is both a learned skill and an art form. Over the years I’ve become fairly good with shell scripts, and can automate a Linux or UNIX box to get it to reliably perform how I want. This skill with shell scripting was not so much something I set out to learn like I did with Cocoa, but it was something that I’ve acquired over time. Cocoa, I have found, is similar. After finishing the Hillegass book, you can indeed create an application in Xcode… but, for it to be of any use, or for it to be good, you need lots and lots of time. I’m talking years. Now that I’m a family man with a job, a mortgage, and kids… I just don’t have the time necessary to dedicate to learning how to program, or I should say that I cannot give the craft the attention that it deserves.
Having delved into programming, I can say that I found new respect for developers. The time and attention that it takes to create a quality application is monumental. Looking at MarsEdit now, I can recognize an NSTable there, and a NSTextField here, and I can almost see how the application is put together. However, under the gloss of the Apple provided interface objects, the code that it takes to get this wonderful application to do what it does takes the time and patience of a zen master to produce. Every function, every button, every menu item… how the app posts my writing to the web… everything must be carefully thought out. Well done.. programmers certainly are a different breed.
It seems that programmers are also all too aware of how different they are. I went to a local CocoaHeads meeting, hoping to find some help with my application. Unfortunately, it seems I misinterpreted the purpose of the meetings, and I was told in no uncertain terms that, were I to ask a documented question, I would be told to “Go read the fucking documentation”. I did try anyway, but I didn’t get very far. Now don’t get me wrong, the CocoaHeads were all very personable and approachable, but they are not going to help you write any code. They simply want you to learn the same way that they did… slowly, over time, and possibly a four year degree in computer science. If you already know how to program in one language or another, and I’m not talking scripting languages, then the CocoaHeads might be for you. If you are learning, like I was, then my suggestion would be to either stay home and read some more, or to go to a meeting with no expectations, and simply take in what is presented.
I should mention that the attitude at the CocoaHeads meeting mirrors many mailing lists. It’s not uncommon at all.
The CocoaHeads meeting was a real turning point for me. It was the first time since I started that I grasped the immensity of the task I was undertaking. I found myself taking stock again, and looking at what was important to me, looking at what I enjoyed doing. One thing I enjoy doing is writing, and that suffered during my personal summer of code. Looking at how much I did not write over the summer, and how much more time I would have to spend to acquire some small level of competency in Cocoa programming, I made the decision to return to writing. I gave it my best shot, I spent four months working on code night and day, but it seems like programming for me is much like sports. I can follow along, but I really don’t have the mind for it.
I’m glad that I spent the time to learn what I have, and I feel that I’m a better person for it. If I had not tried programming, I would always have wondered, but now, having tried it, I can say with certainty that it is not for me. At least, not right now anyway. I may, at some point in time, fire up Xcode again… I do have a couple of books on the subject. For right now however, I think those books will fit comfortably on the shelf.