Thank you for your patience with all the Sports-Geek posts of late, but its a subject near and dear to my heart. To make up for it, lets go really geek and deal with computer programming.
I am a programmer. It’s what I do. It’s what I’m good at.
Now I’m old school and its really hard for old programmers to learn new tricks. As you age in this field, it becomes harder and harder to adapt to new concepts. I first observed this phenomena early in my career as I watched my boss, who grew up in the punch card / batch processing world have trouble adapting to a world of PCs and interactive systems. He was eventually promoted out of the way. I now see the same thing happening to me. Though I pursued moving from a Support Developer to a Product Trainer, I’m now in a similar position where I’m letting the young’en’s do the programming, letting the new technology pass me by.
I can clearly identify where my downfall began. Object Oriented Programming.
I learned programming in the days of procedural programming. That is we designed our programs using sub-routines and functions. These blocks of code performed specific functions. Data was kept separate for most parts and in things called structures. Life was easy.
A new model developed where code and data kind of merged into things called “objects”. So instead of having a string data type and having functions to get the length, find a chunk (substring), etc. as separate parts, you now have a string object and not only does it have the data for the string, it has the different methods of manipulating it. The object contains the length method or substring method. It was a different way of thinking.
One of the big limitations for me is the terminology. There are so many new terms and this old brain doesn’t want to learn them. Which leads me to where I am today.
This week I had a chance to participate in an iPhone application discussion. I’ve had a Mac for almost two years, and beyond some web code, I’ve not written a single Apple app. Not a drop of Applescript. I had Xcode, the Apple Development environment loaded all most the entire time. But real life has kept me from getting down to learning this new environment.
So with this opportunity to mess with an iPhone app, I decided this was a good time to get in and wrap my hands around this and try to upgrade my skills a bit. This is where I hit a major brick wall:
Now I can write in the programming language ‘C’ in my sleep, even though I’ve not had a serious project in it in years. ‘C’ is an old language that came out of Bell Labs in the late ’60’s as part of their Unix environment. It became the most dominate language throughout the mid ’80-s through early the 2000’s. Its cryptic. Its powerful. It produces great machine code.
With ‘C’ being so popular, many of the modern languages are derived from it. ‘C’ had a major short coming. Its a procedural language. It knows squat about objects. The Object oriented programming crowd had some languages to use, like Smalltalk.
Around the same time that C++ was being worked on, another group was creating Objective C which involved adding some key features from SmallTalk into C. Steve Jobs after he left Apple to Form NeXT, licensed Objective C as the native language for NeXT. Apple ended up acquiring NeXT which lead to the modern OS X operating system. Objective C is tightly embedded to anything Apple today.
I know ‘C’. I don’t know Smalltalk. Objective C is ‘C’ for most stuff, Smalltalk for the objects. So when I went to learn how to write an iPhone App, I was immediately thrown for a loop. What was this alien syntax? I thought my head was going to explode.
Now this project was part of a monthly development practice where everyone takes an idea and tries to produce something that day. It gives developers a chance to work on things that normally wouldn’t get a chance to work on; a chance to make proof-of-concept; etc.
As a product trainer, I would not normally participate in this practice, but we wanted to see if there was anything that could benefit us in the training department. So I took this opportunity to participate. I went and got the iPhone SDK and installed it and dove in.
The first thing any good programmer is going to do is build the traditional “Hello World” program. After about an hour of struggling with a tutorial to build “Hello World” and dealing with this strange syntax I was running around screaming:
“I long for the days of
10 PRINT “Hello World”
No, this huge project was loading in all kinds of framework and was creating models, views, and controllers and passing messages. While the code I had to create wasn’t that much, it was quite a bit to see the words “Hello World” show up on the iPhone simulator.
I didn’t quite understand everything. There was a lot of new terminology: Bundles and Delegates to name a couple. Now I was feeling pretty good about things because I managed to get one of our website’s mobile sites loaded into a compiled iPhone app after an hour of modifying “Hello World” without a lot help. Then it tanked. My next task was to determine my current location from the GPS and find the nearest business unit to the phone and show it.
By the time I left, I was still having it crash trying to get it to connect to my webserver to request the location information. Most of the day was spent trying simply construct the URL by converting the Latitude and Longitude to a string. Hours. Oh, yea, the String object can’t be changed, you have to use a Mutable String if you want to change it. Why can’t I simply call sprintf() and be done. The simple task of appending two strings together is a pain in the rear.
Now to put this in perspective, I developed a simple web service that when passed your current location, it returns you the business name and website URL, written in PHP in about 30 minutes. For this simple service I didn’t need to make it database driven, just an array of values, but it was working, tested and debugged in a very short time.
Admittedly my biggest hurdle was the Smalltalk syntax. I’d eventually get delegates and views and such figured out. But the square bracket syntax and variable passing was really confusing to read.
Well today, I spent a few minutes, going back to square one were I was reading the Objective C beginner’s guide when I came across a passage.
Objective C supports “dotted” notation.
object.instancevariable = value;
value = object.method(parameter);
value = [object instancevariable]
So what the frak are people doing using this non ‘C’ syntax in a ‘C’ language.
Alas, if I’m going to write Apple code, I’m going to have to conform since all examples are in square bracket syntax.
I have to admit after spending some time with the beginner’s guide today, the square bracket syntax isn’t that hard and I think if I spend some time with it, it will be a quite capable language. But that shouldn’t surprise any one who’s used a Mac with OS X.
Maybe this old dog can learn something new!