This is not the first time that I’ve started to learn to program. This time, however, I intend to stick to it.
I have twenty years’ experience developing applications on Apple Macintosh systems. I started out with Hypercard on my SE (then running System 6.0.5 in the days before the Multifinder) and since then have added a good many skills to my toolbox: I’ve done multimedia development with Course of Action/Authorware (they changed the name halfway through the project), I’ve used Worldbuilder (does anyone else remember GrailQuest? There was a 040 hack, but the Worldbuilder app never made it to PowerPC, never mind OS X). I built my first website in 1996, and am now happily using HTML/CSS/PHP to create versatile websites/web applications.
My main love is Filemaker. What started as a humble database (Filemaker II) has morphed into an impressive beast. While everything you do in Filemaker ends up being a relationsal database at heart, FM has very impressive scripting abilities, and far from being ‘just’ databases, you can create complex standalone data management solutions.
In other words, I am no stranger to putting together complex scripting logic, designing interfaces (I’ve acquired experience in exhibition design which has a certain crossover factor in guiding users through information), and in twenty years of computing I’ve gained a lot of knowledge about what applications can do.
My goals are moderate. I simply want to put together a fairly basic data model with fairly basic drawing capabilities and some user interaction to create the timeline application I need.
I tried to learn how to program several times – Pascal & C using Code Warrior – but back then, the whole thing was pretty overwhelming; and I never got much beyond ‘Hello World’. Every time I gave up in frustration because in order to do interesting stuff I had to wade through thousands of lines of code that _didn’t_ interest me. And ever since then, I’ve wondered why it wasn’t possible for anyone to create a framework that does all the repetive stuff for you, so you can plug in the functions and interface elements that you want. I mean, if Hypercard could do it (and there used to be some pretty interesting HC hacks), why doesn’t this work for desktop applications?
Then I learnt about Cocoa, and my interest was piqued. It took a couple of years before I had some spare coding spoons, and then I fell in love with the whole idea. Projects that let you build fully functional applications right out of the box? That do menu handling, identifying where a mouseclick goes, font management, and all that? Loved the idea.
I started working through simple tutorials, and everything was kittens and roses. Tutorials that give you an idea of all the cool things you can do with Cocoa abound, and they’re all very shiny.
Until, that is, you try to deviate from the path and actually turn your own ideas into applications. At which point I hit a wall. Hard. Only this time I really wanted this particular application, and this time – more than ten years after my last effort to master programming – I had the confidence that I was able to cope with complex application logic.
I then began to look at the quality of teaching materials out there, and very quickly came to the conclusion – reluctantly at first, then with greater confidence – that much of the time, it’s not me and my inability to learn programming that lies at the root of the problem.
As it stands now, ‘learning to program’ is a venture that demands tremendous grit and determination, that means that you have to try this and that and the other over and over again, that you will try, fail, try again, fail again, and eventually hit something that works – maybe not as you intended, but it works, so you move on until you hit the next roadblock. Quite often you will be approaching a problem from many directions, looking for the one working tutorial that matches your circumstances; finding that resource can take considerable time.
As someone from outside the programming culture, this strikes me as tremendously inefficient, and I can see how a lot of people who would be interested in developing their own applications will just give up because they’re getting nowhere.
I’m not trying to say that ‘programming’ ought to be easy. ‘Programming’ is a wide field, and it involved writing and optimising things such as operating systems, databases with millions of entries, artificial intelligence, etc etc. Dabbling in these waters has given me a greater appreciation for all of the skills involved.
Developing basic applications with a framework such as Cocoa, on the other hand, is not rocket science and should not be presented as such. The purpose of this blog is to help make Cocoa programming more accessible, and to show how teaching materials can be developed to help with this goal.
Also, I’m a great believer in extelligence as a concept. If I spend twelve hours working out one particular thing from three books and umpteen internet resources, and the next person can understand it in fifteen minutes because they have the resource I didn’t – a clear explanation of the concept, complete with examples and explanations – then the time I spent will not have been in vain.
And yes, it really *was* that straightforward, once I’d managed to work it out.
Grump.