The audacity of [some] Windows Developers
Thanks to our beloved iPhone (I do refrain from calling it “My Precious”), we have seen a sudden influx of Windows Developers. Now, when most of us came over to OS X and Objective-C from whatever platform we hailed from we did not assume that everything would be the same. Most of us are reasonable people and realize that OS X is different for a reason. Unfortunately, it appears that we are unusual people. Perhaps this would explain why we came over to this platform before it became “popular”.
With this recent influx of developers, most of whom we have welcomed with open arms, there are some who expect everything to be the same as the platform they came from and without bothering to learn or experiment have proclaimed our development tools to be “prehistoric”. This truly amazes me.
First, welcome to OS X and iPhone development. This is not the same language, platform and API you have been dealing with. Accept that or go home. We are not going to change it to suit you. We like it just the way it is.
We do things differently over here. Accept that or go home.
You have an interest in either OS X or the iPhone. To do a proper application for either one (barring a few edges cases), you need to learn Objective-C and Cocoa. Accept that … well you get the idea.
Objective-C has been around for a long time and it is a well thought out language. It is a runtime focused language and therefore things work differently than you are used to in your more structured environments.
Most of the time when these so called developers complain about Objective-C I simply roll my eyes and walk the other way. It is the sane thing to do. Never wrestle with a pig — you get dirty and the pig likes it. However, one particular “genius” has decided to out himself on his own blog. Of course I speak of none other than Jesse Ezell.
It is clear from this blog post that he has no interest in learning why OS X, Cocoa and Objective-C are different from his beloved Visual Studio but instead cries that it is too hard. I mean, seriously, complaining about NSObject vs Object? Perhaps he did not bother to learn that there is more than one root object in Objective-C? And then go to on and complain about MVC like its the devil’s music? Hopefully he is not the best that .net has to offer us!
But even with all of that, I read his post, chucked and moved on. It was not until he responded to the comments on that post that I decided to respond. It seems, from his perspective, that if a developer cares enough about their development environment to respond to his rant (and try to educate him!) that we are all “rabit elitists” out to get him!
First the word is rabid, not rabit. If you were using OS X you could have seen that it was misspelled and used the dictionary to figure out what the word meant. If you can’t even bother to run a spellchecker why bother writing at all?
Second, we care about our platform. We care about the code that we produce and how our applications look and are presented to the user. I know that is probably an extremely foreign concept where he comes from. But we care!
When developers come over here with preconceptions they do everyone a disservice. If they cannot even be bothered to pick up a book and read about the language to understand its fundamentals and its tools then why bother complaining about it. They are a waste of space. Move over and let someone who is willing to learn step up to the plate.
As for this developer’s ego and contempt for the developers on this platform — shame on him. His arrogance speaks towards his ignorance. He probably has written more lines of code in the past few years than I have. I have found that applications on Windows tends to take ten times as many lines of code as the same application would written on Objective-C and Cocoa. That does not make this developer better — if anything it makes him worse.
My suggestion is this: Pick up a book and read. You can even just read blogs like this one and avoid having to pay any money to learn. If a developer can’t be bothered then go home, we have no interest in you and certainly have no need for you.
I think I can speak a little from both sides… I have done both windows programming in .NET and Mac/iPhone programming in Obj-C, and Cocoa.
I remember when I moved from ASP and VB, to .NET with both VB.NET and C#.NET. Even then I could not believe how much extra code I had to write to do the same things, and that was going from a MS language to a MS language.
When I got my iPhone a year ago, I wanted “in” on the development of apps and went right into learning Obj-C and Cocoa. Things were a little strange at first, but I still felt somewhat at home with the similarities with C/C++. I have now been developing iPhone applications (for jailbroken devices) and some Mac applications for a year and I love it. I look back at my past with .NET and wonder how I was willing to deal with it.
I am still not a total fan of the flow of working in Xcode, but then again even back in the day I hated Visual Studio.
It all comes down to what you know and how willing you are to learn something new.
Its the same as if you tried to learn a new language but went into it with the thought that ‘they should just speak English.’ It just won’t work.
For the .NET people I am sure if they look back to the first time they tried Visual Studio that they would remember that they were lost as could be.
For the Cocoa people I am sure if they look back to the first time they tried Xcode or tried to setup connections in Interface Builder without knowing how it really worked, they would say they were lost too.
So then the question is, is one language/tool set better then the other? Well… I don’t think this comment block is big enough to hold that one (plus I am sure no one is still reading this). Lets just say that it’s like religion. To the person using it, it is the best. To outsiders, they wonder how anyone couldn’t be on “their side”.
One thing I have to reiterate from Marcus’ post is: “If a developer canâ€™t be bothered [to pick up a book and learn the language] then go home”
To that I just have to say, AMEN.
/* end of my own rant / agreement */
As a recent convert to Cocoa development I’m all too aware of the commitment necessary to move over from the Windows platform. I had the advantage of having been a Mac user at home since around 2003 and therefore I have a strong attachment to the platform. I was also lucky in that the switch was the result of my employer deciding that there was an opportunity to develop Mac software so I managed to do all of my learning on their time.
I think that the key point is that it is a commitment which involves a lot of reading and an appreciation of the platform and its users. It was inevitable that the success of the iPhone and the launch of the iPhone SDK would draw a lot of new developers over to Cocoa and I imagine that a lot of them will also disappear again over the coming months when they realise that they can’t pick up the language and tools in a few hours.
Hopefully, however, we will be left with some new, talented developers who will enhance the community and produce some great software for both the iPhone and Macs.
It’s been nearly a year now since I hung up the C# gig and I haven’t looked back. It’s not to say that there aren’t some interesting facets and worthy developer tools on the .NET platform, however, it pales in comparison in, if nothing else, pure engineering enjoyment. The tools, while not perfect as there is no such thing, are great once you get to know them. I can’t say there is anything I lack now that I’ve transitioned to the Mac platform–though others have made this claim.
Frankly, I think the biggest issue Windows programmers have is the learning curve. Most don’t want to admit that and then simply blame the tools and/or the language. The transition is not trivial. Not to contradict Marcus, but when I was only reading (Hillegasse, et. al) about how to do things for the Mac platform, it was a slow process. I was making some strides, but it wasn’t until Marcus started to mentor me that I was able to start thinking like a Mac programmer. It was then that I really started to get it. I can’t tell you how many lines of Obj-C I stared at blankly until I started to understand the methodology. Now that I’m passed that hump, I find Obj-C very intuitive and even second nature. Then again, I find perl intuitive and second nature, but that’s another story. ;-)
From Jesse Ezell’s post:
I’m going to publish a beginners tutorial on iPhone dev on this very blog once the NDA is lifted. It will show you how it couldn’t be much simpler in the “tooling department”. whatever that is. ;-)
And, by the way, Silverlight? On the iPhone? Less of a pain? Now that’s a rare sense of humor right there. ;-)
I am a .Net developer, and I was totally caught off guard by Obj-C. I considered myself pretty proficient for a recent college grad 2 years ago in C++, but the iPhone sample apps confuse me way more than I thought they would. You recommend picking up a book and reading it to learn Obj-C? Could you recommend any in particular?
I’ve noticed alot of .Net developers hoping silverlight will solve multiple .Net shortcomings. Especially ones who want to replace legacy java applets, but this just won’t happen, in runs in a limited sandbox. I’ve not seen a single useful silverlight app that couldn’t be done equally well in flash.
Aaron Hillegass’ Cocoa(R) Programming for Mac(R) OS X (3rd Edition) is the one I recommend.
Learn the language and the CocoaTouch changes will be much easier to consume.
@Matt Long and relevant to original post:
I’ve come to the conclusion that a large part of learning Cocoa is coming to terms with the different approach to many problems it takes, compared to other languages and frameworks. From my own personal experience, I find learning new parts of Cocoa is much easier when you try to put aside your expectations of how it will work. Effectively, you have to “Unlearn” your previous experience and then learn Cocoa.
I wrote a block post about this a couple of weeks ago:
A good starting point is free Objective-C documentation on Apple’s site.
Anyhow Marcus, I appreciate your efforts, but I personally suspect that your time is probably better spent working on your apps then on worrying about what crossover developers think of the platform. Let them complain and flail while you go on and do great things. It just isn’t worth entering a battle of wits against an unarmed opponent, regardless of what the issue is. In this specific case, the best possible outcome is that those who disdain the platform &| environment simply will not develop for the iPhone. You have fewer competitors, the public gets better apps, and the complainers can go be happy with some other platform. Its a win for everyone.