Dev Chair : My love-hate relationship with Apple development
First, let me start with the full disclaimer: I develop Windows .NET application by day (and by night too for ecto) and use Mac OS X at home for everything else. Before getting my Mac Pro last December I used to work on ecto using a second Windows machine, but since then I have been using Visual Studio 2005 in an XP virtual machine using Parallels.Whether you love or hate Microsoft, you have to give them credit for popularising programming on Windows. While I was a junior programmer fresh out of college learning C++ and working on train control software, truckloads of CS/Engineering graduates were learning to program in Visual Basic. Whatever faults VB has, the way it allows even beginner or causal programmers to learn the craft and produce quick and dirty applications means that programming for Windows was no longer the eminent domain of the traditional CS/Engineering graduates, where FORTRAN and C/C++ rules. Microsoft continues this trend with C#/VB.NET and the .NET Framework, providing a lot of built-in functionality that used to require hand-crafted code or expensive third-party libraries, freeing up developers' time to concentrate on problem solving instead of mechanics.
With OS X, Apple began with Objective-C and Java as the programming languages of choice but ever since version OS X 10.3 Java had been put onto the back burner and is expected to be phased out eventually. Unfortunately, making Objective-C the sole language of the platform also makes it difficult and 'expensive' for Windows programmers, such as yours truly, to join the party. The difference in syntax (despite the 'C' in the name it does not have much resemblance to C or C++), difference in framework and API, difference in IDE philosophy, and the lack of refactoring tools (ReSharper, CodeRush, etc.) and unit testing tools (NUnit, JUnit, etc.) mean that some of the more open-minded programmers (mostly Java and .NET) will not take an active interest in Apple software development.
The upcoming Xcode 3 looks like it would make a big step in closing the gap, but the IDE still lacks the tools mentioned above to attract the time-constrained, less hard core developers from the Windows side of the world. The dark horse may be the combination of Eclipse IDE and Mono project. The Eclipse IDE is mature and has a flexible plug-in architecture so refactoring and unit testing tools can be integrated into the IDE by third party developers. Meanwhile the Mono project has been making lots of progress as far as compatibility with Microsoft's implementation is concerned. And the ability to take code written in Windows and runs it in Linux or OS X (with some limitation, of course) will appeal to Windows developers, at least as a starting point.
In fact, Eclipse/Mono may actually achieve what Sun tried to do with Java all those years ago. Remember 'Write once, run anywhere'?












Comments
25
Subscribe to commentsAlex HungFeb 16th 2007 12:47AM
"I suppose I also rename variables and methods or add and remove method arguments, but those sorts of re-factoring can be handled with a good text editor, FileMerge.app, and global replace capability."
Yes, you can do that and almost all of us *had* been doing that. With refactoring tools, however, the uncertainty of making a mistake is gone and that's what I am looking for. I don't have to worry that the global search and replace overwrite something I don't want, etc.
Category in Obj-C sounds very similar to Extension Method in C# 3.0, which is a fundamental part of LINQ.
Seems to me that C# and Obj-C is getting closer to each other in terms of feature set. Unfortunately, to my untrained eyes, Xcode 2.4 still feels very 'last decade' but then I haven't used it enough to pass judgement.
I can't wait for when Leopard/Xcode 3 are released so I can dive into OS X development more.
grrrFeb 16th 2007 11:51AM
I almost never use the refactoring stuf of eclipse. any compiler can do the same just try to compile it and see where yuo have to adapt yuor code after refactoring (line number and file).Interpreters need the extra work of writing unit tests and then yuo still do not know exacly that is why they still suck.
YujiFeb 16th 2007 1:05PM
Alex, I understand the difference in IDE and the framework,
but I don't understand your comments about the difference in syntax of Objective-C.
obj.doSomthing() is [obj doSomething], right ?
It's just superficial and can be gotten used to in a few days.
OK, retain / release is a bit tricky if you use garbage-collected language like Java/C#, but it's much easier than plain C++ or C.
and Obj-C will also be garbage-collected in the coming Leopard :)
Alex HungFeb 16th 2007 2:01PM
@Yuji
Yes, the difference in syntax is entirely personal. I'll probably get used to the difference after a few days of continuous usage. On its own, it is not an issue but if you look at the experience as a whole (i.e. having to adjust to all the different things at the same time) this is just one more difference that we don't have to adjust for.
It is not just the simple difference in square brackets vs. parentheses. Obj-C also allow for named parameters so the ordering does not matter which throw me off visually when I scan code.
SteveFeb 18th 2007 11:15AM
As I said recently [1], we just need Apple to put a couple engineers on Cocoa# and then we'll be set! :)
[1] http://iqueryable.com/2007/02/16/HeyAppleCanYouPutACoupleEngineersOnCocoa.aspx