Apple doesn’t just do nice device experiences, their SDK and documentation are masterclass too

If you know C and you get properly acquainted with Objective-C, you will realise that Apple succeeded in making people write large C code without hating it or getting into trouble. People say, and I agree, that learning Functional Programming (FP) makes you a better programmer even if you were to go back to non-FP languages. I think the same thing can be said of programming for iOS using Apple provider toolkits. Learning to code iOS application yields much more than solid applications, it also teaches you how to be a better programmer.

I’ve been regularly using Apple SDK for a number of months now, earlier on I only did small proof of concepts (as an Architect sounding out and testing gears before making any recommendations). I’ve used many developer toolkits throughout the years, but Apple’s have been an eye opener for me, once I decided to build a sizeable application with them. I would easily give Apple a top mark for creating and nurturing a development platform, yes they do make breaking changes but they clearly keep the concepts sound and stable throughout.

In the next paragraph I’ll be mostly referring to development environments (IDEs), I’ll skim over documentation because it made no big difference except in the cases of Microsoft Visual Studio and Apple’s Xcode.

I’ve used Eclipse intensively throughout the years, before that I’ve used IBM VisualAge on large projects. Eclipse is good, but I find IntelliJ IDEA to be a much sharper and more productive product than Eclipse in that area. I’ve looked at NetBeans too, for a time its free profiler was a selling point for me but I didn’t end up doing any serious work with it. I’ve used Microsoft development tools since the time that Borland shipped better ones (Borland’s were my favourite at the time), and I still use Visual Studio every now and then. For a time PowerBuilder was the best productive development tool for me and I enjoyed it until I moved on to web applications for good. I’ve had some exposure to IBM Rational software engineering products too, at the time they were often unstable, bloated, so I never got to liking them much. I’ve also used, and continue to use many text editor flavours, Unix ones like VI and Emacs, and various others that I don’t care much to mention. So I’ve seen quite a wide variety of developer tools and mostly didn’t come out too jazzed up about them.

What all of the above developer toolkits have in common is that they provide you a base upon which you can extend by means on plugins or add-ons. In nearly every case you need to source additional libraries to complete projects, at least that’s been my experience in most cases. However, in my opinion these products fail to teach you best practices in any meaningful way. If you are looking to learn to write fool-proof and performing code, you still have a long trial-and-error learning curve in front of you, the toolkit won’t provide you any guidance.

Apple’s combination of XCode, Cocoa, Objective-C and the documentation, together provide you much more than just an SDK and IDE, they actually teach the developer how to write code properly. As you write applications for Apple platform, you get more acquainted with patterns in a practical and effective way, you learn one behaviour and can become more productive as time goes by.

Microsoft have attempted to do something similar, Microsoft Patterns & Practice web site is where they are trying to complement where Visual Studio is lacking. There is a lot of good examples on how to compose Microsoft tools to produce results, it’s the best source I’ve come across if you only target Microsoft platforms. But I’ve found Microsoft Patterns&Practice to be too heavily biased towards APIs, and those APIs tend to change before you get to master them. So, unless you are immediately applying the techniques that you learn in an active project, preferably very close to the publishing time period of the articles, the learning may not stick and might get dated. I’ve had my fair share of disappointments learning Microsoft development libraries. For example, I’ve been through numerous Microsoft data access technologies and every time I had to learn a totally different approach for no clear reasons.

IBM’s DeveloperWorks is huge and for a time it offered lots of good articles on various development topics. But usually, they helped a lot if you were targeting IBM WebSphere and Lotus product stacks, they required more effort if you didn’t. I’ve long not done much with IBM technology stack, I look at DeveloperWorks every now and then, the venerable WebSphere stack is chugging along. I would think that IBM WebSphere development toolkits may help in learning some good practices, but I think unless you can afford the pricey IBM Rational suites you may not reap good learning fast enough and may end up having to patch things up to become proficient.

I’ve watched Oracle technology stack get more and more complex as they acquired companies. I’ve used many of the their components at separate times and when companies like BEA and Sun MicroSystems shipped products. In recent years I’ve come to believe that the JavaServer Faces (JSF) approach isn’t an efficient one if you didn’t specifically target Oracle platform. I’m not particularly fond of what I see on Oracle sites, I don’t think they help much in teaching good practices to developers.

These are the largest technology solutions that I have significant experience with, and I haven’t really seen the sort of purposeful learning that I see when dealing with Apple development toolkits.

In my opinion, Apple has done a better job in this critical area of developer enablement than many others, and what you learn in the process will serve you well beyond Apple platform. If you know C and you get properly acquainted with Objective-C, you will realise that Apple succeeded in making people write large C code without hating it or getting into trouble. Before iOS became popular, and aside from Linux hackers, you could’t convince a young developer to learn C programming. Apple has somehow pulled that trick without people realising it. And if you know your design patterns, for example the Gang of Four book, you will find it a delight to discover how Apple’s Cocoa code hangs together. The way you design and write iOS applications is closely aligned to the way patterns should be recognised and applied, for this reason you are learning patterns as you code for iOS. This choice alone ensures that developers grow quickly to maturity when they develop for iOS platform.

I’ve not talked about HTML  development toolkits so far (meaning HTML, CSS, JavaScript), for a reason. I have yet to see any toolkit in this area that actually teach good practices. It is actually paradoxical that that kind of web application development could become so popular, because I think it offers the highest learning curve of all. Yes, sure, people clone (GIT) a To Do List application sample, make a few changes and promote that into an application. But there is no good practice in there, actually that’s where the learning begins. The number of concepts and technologies that a developer must learn before they can write solid HTML code is astonishing. And if they don’t learn those things all they tend to do is create more mess and never learn any good skill in the process. So I’d say that there is no useful learning environment there, unless the recently announced Adobe Html would prove me wrong.

Talking about web development specifically, there are many popular development platforms that help people produce applications quickly. However, the most popular ones such as PHP, Ruby On Rails (RoR), won’t teach you much about good practices. RoR did a good job in helping beginners get in the game with its convention over configuration practice, but that is it. Once people got started with their first RoR application, they usually don’t know where to go next and quickly run into learning shortcomings as their application usage picks up.

In summary, I think the benefits that iOS developer realise is greater and more durable beyond the platform alone. People say, and I agree, that learning Functional Programming (FP) makes you a better programmer even if you were to go back to non-FP languages. I think the same thing can be said of programming for iOS using Apple provider toolkits. Learning to code iOS application yields much more than solid applications, it also teaches you how to be a better programmer.

Leave a Reply

Your email address will not be published. Required fields are marked *