in Search
Welcome to Neopoleon - Sign in | Join | Help
Navigation: Home | Forums | Galleries

Cross-Platform Development for OS X, Windows, and Linux with RealBasic

[Note: This is a long post. If you don't like reading long posts, but if you choose to read this one anyway, then spare me the "That was really long" comments. Devs have the worst ADD in the universe and the capacity for whining to match. This post isn't for people who get their knowledge exclusively from Twitter and Facebook status updates. I'd also appreciate it if you READ the post before commenting. There's always that jackass who reads one sentence, jumps to the comments, and vomits up opinions that were already in the post - this jackass will also start an argument that, it often turns out, is not in any way contrary to what I've written. Basically, don't be retarded - if you want to participate, then do your homework.]

Got this email from reader Steve Cholerton a few days ago [Steve's Blog --- Steve's Bidniss]:

I've noticed from your posts over the last few months that you now own a Mac as well as PC's. Have you considered putting your considerable programming talents into creating something cross platform using REALbasic? As the Smartest Man In The World I'm sure there are many people who would benefit from your unique and eloquent insights and experiences :-)

By the way - love the blog, been reading since the early .NET rocks days with you and Carl.

Just a thought.

The bolded section has nothing to do with this post. I just wanted to highlight how awesome people think I am.

I've actually been using OS X for most of this decade. I began with version 10.1.3 and have been along for the ride ever since.

As a geek, one of the first things I wanted to do was start developing for the platform. Compared to Windows, there isn't much software out there for OS X, and there are all kinds of utilities that I think could provide people like me with pleasant little conveniences. I also wanted to develop apps that would fill the freeware gap. When you do find OS X software you like, you usually have to pay for it. I support that model wholeheartedly - people deserve to make the big dough from their efforts - but I also believe that people ought to have access to apps if they don't have the money to purchase what they need. I've done a little freeware over the years, and I find it very rewarding to help people out (though I had an experience gone horribly wrong that killed my interest in that scene).

The first dev platform I tried on OS X was the native Objective-C + Cocoa staple. The only problems with it is that I hate it. It's primitive - backward - compared to the options we have for Windows development. I may think Vista stinks, but I still believe that Microsoft makes the best dev tools the universe has ever seen. And, no, I don't want to debate this - it's simply my opinion - I'm not trying to encroach on your own preferences. This is not an assault on other platforms. I'm not trying to change your mind. I'm beating the crap out of this dead horse because the argument is inevitable, but I'd at least like to know that I tried to avoid it.

Having no interest in pursuing the Objective-C + Cocoa bidniss, I took a look around to see what else was out there. Not much as it turns out - good dev tools seem to be as rare as apps in the OS X world. There was a great Java story for OS X - Cocoa bindings and tight, tight integration - but it was buggy and disappeared, which is too bad. For client apps, it was the finest Java implementation that ever did done exist.

The one hope left - again, for my interests - was RealBasic. As you can probably guess, it was more or less a Visual Basic clone. When I first used it - version 3.0, I think - it most closely resembled VB6. I hate VB6. VB6 is a cruft-o-matic hellhole of a dev tool. Imitating it seemed retarded, but at least I knew VB6 well enough that making the transition would be painless (sort of - read on for more on that).

After a little while, I lost interest. I was disappointed. RealBasic was easy enough to use, but it felt just as primitive as Objective-C. My preferred dev thingy at the time was Java, and although Java is its own world of confusion, it was a far better world of confusion than many others at the time.

That was the end of my interest in developing for OS X. There was no reason for such a nice OS to have such crappy tools. It was principle that drove me away. Why would Apple go so far out of its way to provide a superior user experience but make it such a pain in the ass to dev inside that world? It's just stupid, and I don't have much patience for stupid.

Over the years, I watched the progress of my OS X dev options. Small advancements were made, but disappointment continued, right up until today.

When I left Microsoft, the Apple Dev Tools Team contacted me and axed for my thoughts on OS X dev options. I wrote what might as well have been a small book on what I think is good and what I think is utter garbage. I'll share some of those thoughts near the end of the post.

For now, I'm going to provide you with some context so that you understand why I'm so opposed to RealBasic and Apple's dev tools. Without understanding where I'm coming from, you won't understand my arguments. This is especially true for devs who've never coded outside the Apple world (OS X specifically - previous version of MacOS are a whole other horrific story).

I'm going to skip the first couple decades of my coding life. I grew up with Basic, C, assembly, and other miscellaneous tools as I slowly learned what I liked and what I hated (by the by - I love assembly, and I miss the days when you could be a hobbyist and get your computer to do funky things that might not have been possible any other way - it was the hackiest hacker language, and it was fun - for the record, my preferred assembler was TASM - not MASM - good ol' Borland).

Here goes, then... Beginning with life around the VB6 era...

---- Visual Basic 6: Teh Fugly ----

[Wikipedia Link]

We all know it. Some of you, most likely due to a colossal error in judgment, think you like it. I've even witnessed expressions of longing for the days when VB6 was one of the most popular businesses dev tools. I liken it to mass hysteria such as the fear that Halley's Comet was going to deposit a lethal quantity of cyanogen in Earth's atmosphere, killing everything on the planet below. This belief was due to ignorance and popular opinion.

See the connection? Of course you do.

My beef with VB6 was the mix of old-school procedural stuff with a tacked on object-based thing. VB6 is loaded with functions that were carried over from decades of versions of basic that preceded it. The kind of functions that leave you scratching your head, wondering where in the hell each function was stored in associated libraries - it made searching for that right function... well... lame. The object-based cruft was crippled and sloppy. The language was full of little traps waiting to ruin your day.

One word: Variant.

---- Visual J++: Victim of Dork Politics ----

[Wikipedia Link]

The people who flipped out because this wasn't a proper implementation of Java missed the point. VJ++ wasn't about providing a true cross-platform Java tool. It was obviously a Windows dev platform. We can argue about legality and bullhonky politics all day, but that's stuff for the lawyers to worry about. At the coder level, and provided you're grown up enough to be able to separate the politics from the tech, VJ++ was probably the best tool of its generation for dealing with the mess of COM.

It was truly object-oriented, unlike VB6, and it wasn't the clusterfuck nightmare that was, is, and always shall be C++.

I'd say it's too bad that everything went south, but VJ++ paved the way to the best modern platform in existence...

---- .Net: It Actually Makes Sense ----

[Wikipedia Link]

With .Net, we saw a few great advances and downright miracles.

In the Making the Impossible Real Department, Visual Basic suddenly stopped making me vomit in my throat with every keystroke. I started with .Net back when an early preview compiler was released. Didn't do the VB, but familiarized myself with the tech.

Wrote my first production .Net app with Beta 1 of Visual Studio .Net. I was still learning the ins and outs, but it had a profound impact on my life as a dev. I immediately replaced Java with .Net as my dev platform of choice. It was gorgeous.

Chris Sells called Java "Sun's little research project" at a talk he gave at Borders in 2003. That was the moment when thing gelled for me up in my noggin. Before that, I wasn't able to articulate all the reasons I preferred .Net over Java. When Chris said that, I saw how right he was.

Java was great Back When, but it has accumulated so much cruft that it's simply turned U-G-L-Y. .Net was a clean slate, and Microsoft was able to closely examine what was great about Java and what stank (yes, there were many other influences that drove .Net, but Java is clearly one of the biggest). Everything from a much more sensible framework hierarchy to handling of basic data types was superior in .Net.

I wrote that first .Net app with Visual Basic.Net. It wasn't ideal, but the whole way through, I couldn't believe how much nicer the language became when matched with such a great platform. There was still a lot of garbage available to people who refused to ditch the mess that was VB6, but you could ignore it and go for straight-up framework goodness.

C# was... is... a beautiful, beautiful thing. It's so clean and consistent. It makes so much sense. As with anything, it's loaded with faults, but so much more was done right than wrong. It's an elegant thing, that C#.

The mobile story was also superior to anything else. Where Java was abused and reformed in a sort of Frankenstein way into a billion little crappy pocket-sized implementations driven by a billion little crappy "standards", the .Net Compact Framework shares the same beauty of its big brother.

Client-side, server-side, phone-side... forget your stupid politics and give it a chance - .Net is wonderful.

---- Moving on to the Mac ----

I've already commented a little on this, so I'll try to keep these short.

---- Objective-C: Coding like it's 1979 ----

[Wikipedia Link for NeXT - Wikipedia Link for Objective-C and Cocoa]

Objective-C and Cocoa are remnants of NeXTStep - the dev platform for Steve Jobs's NeXT computer. You can see the history in the Cocoa framework - classes are preceded by the "NS" prefix which, you guessed it, stands for "NeXTStep".

It's like looking at the coder's version of cave drawings. This stuff is ancient.

OS X devs love to go on about how awesome Objective-C and Cocoa are, but these are people who've obviously spent very little time exploring what else is out there. Very little advancement has been made in the platform over the years. Christ, they just got garbage-collection. There was previously a reference-counting implementation that was so bloody simple that you couldn't write a single block of code without wondering why they didn't just go one more step and handle it for you. It made no sense, and the offense was another matter of principle. I hated having to do this crappy drudgework that every other truly modern dev platform had left behind.

The syntax is funky, but actually pretty interesting. I don't find it especially offensive, particularly given the OO options of the day. Steve could have pushed a C++ platform, and, even if I find the OS X dev story crappy, at least it isn't based around that.

But, still, the whole damned thing is primitive, and Apple needs something better.

---- RealBasic: Almost ----

[Wikipedia Link - Company Product Page]

(Don't bother trying to find much useful information from the official RealBasic site - you can find one-bajillion variations of the same bulleted list of features, but code samples? Where the hell are they?)

Finally, we come to the subject of the post.

I've presented the tools I've used/explored most over the years and a few opinions about why I did or didn't dig 'em.

Hopefully, I've provided enough context to help you understand my feelings about RealBasic.

Simply put, RealBasic, is something that could be great, but isn't, and that's much more frustrating than something that fails entirely. If something's completely out of reach, you write it off, but when you can almost grab it, you strain and lean and contort to try and get to it. Unfortunately, you just don't make it, and it pisses you off. It's total "Indiana Jones and the Last Crusade" when Elsa tries to grab the grail before it tumbles down into the belly of the world, never to be found again. Remember what happened to her? SHE DIED.

My introduction to RealBasic was version 3.0, and it was little more than Visual Basic 6 for the Mac. I hated it. Wrote a couple small apps, and had a decent experience, but only in comparison to what it would take to write the same apps with Objective-C and Cocoa.

I don't know about you, but I can't trust a dev tool whose code editor defaults to a non-fixed-width font. I'm not writing a frelling book. I want to write code, and I want it to be neat, and I want it to be easy to read, and I want it to fall in pretty little columns. Why didn't they just do wingdings? Or Comic Sans Serif? Or effing cursive? Gimme a break.

It was the same mix of old school procedural and object-based crap as VB6. The problem inherent to this mess was made readily apparent when you discovered the subtle differences between the two languages. When you learn VB6, you memorize along the way the stupid functions to use that you only know about because you've beaten your head against the keyboard, trying to find something that does what you need it to do. With Java and .Net and other sensible platforms, you simply follow the hierarchy to the Good Stuff. VB6 is almost a matter of guessing.

RealBasic, as I've been saying, has that same mumbo-jumbo, but because of the small, small differences, you want to slit your wrists after the first ten minutes because you feel like you're learning VB6 all over again.

Up through the versions, not much changed. Some modern stuff was tacked on, but the language is still that crufty nonsense, and the code editor still defaults to a non-fixed-width font. That's just frelled.

The one thing RealBasic has going for it is that, unlike Java and .Net, it is truly cross-platform. If you spring for the fancypants version, you can tell the build to spit out binaries for Windows, OS X, and various flavors of Linux. There's no denying that that's a wonderful thing.

But... AGAIN! You have to do it with such an ugly language. If RealBasic were forced into the 21st century and made into a clone of Visual Basic.Net, it would be not just a great tool for OS X development, but an excellent choice for development period. True cross-platform support is coding nirvana.

That's why I'll kick and scream and bite when it comes to RealBasic - it's so bloody close to greatness, but it's just out of reach.

It's unlikely, but maybe they'll find this post, think about what I'm saying, and get their patooties in gear.

However, it won't matter that much if Apple moves on the advice I gave during my exchange with the dev tools team...

---- My Solution to this Stupid Problem ----

[Wikipedia Entry on Python - Python isn't my solution, but it's an inspiration]

I'll spare you the thousands and thousands of words I wrote about the details, but here's a summary list of what I want:

  • A dead-simple dev tool for coders who want to get things done. It's not for showoffs or the coders who intellectualize a tool until it's no longer useful. It's not for academics. It's for people who just want to write apps and who don't need tons of "advanced" features. Something very much like Visual Studio.Net. This isn't to say that those "advanced" features aren't made available - just that you don't have to use them.
  • A Python-like language - Python suffers from a lot of the same messes as VB6 and RealBasic, but the language itself is sound. Lazy coders don't like the way it forces you to write code that at least looks organized, but since so many can't be bothered to write readable code, I think the arm-twisting method is a good way to enforce compliance with Rory's aesthetic sensibilities.
  • An abstracted framework wrapped around Cocoa. Some elements of Cocoa remind me of Swing. I hate Swing. Anybody except Sun apologists hates Swing. Screw flexibility - if you think I want to do the work of creating my own composite controls just to make controls that any sensible UI toolkit already offers in full, then you're wrong, and you're an asshole. I don't want to spend my days slapping textboxes on forms and then attaching a scrollbar and then having to wire the god-damned things together myself just to get functionality that comes out-of-the-box elsewhere. If you want people to develop client apps using your tools, then you need to let them drag something as simple as a scrollable textbox from a palette onto a form. Flexibility always comes at a cost, and that cost is tedium. Cocoa's UI designer is a confusing, backward mess. This is another place where Microsoft's approach is so obviously superior. With Visual Studio.Net, you can slap a UI together in minutes, and it's already wired up and ready to go. You aren't forced, for example, into an MVC paradigm, though MVC is trivially easy to implement using .Net. You have the option to use as little or as much power as your app needs - you aren't cornered by the tyranny of having to build everything up yourself.
  • A true IDE - a dedicated IDE. Don't hand me tools that aren't truly integrated, and don't give me a tool that supports twelve-million languages. Again, this would be a dev tool aimed at a completely different crowd from those who like Objective-C and Cocoa. Choice - options - flexibility - innovation - these terms and ideas are tossed around and worshipped by the geek masses, but without consideration to the enormous drawbacks. Choice freezes you - if you have to stop and study all your options before you make a choice, you can't get right down to working on your project. It's metawork, and metawork sucks. Sure, giving devs one choice won't be optimal in some cases, but neither in my mind is presenting them with an intimidating spread of options - for those who want options galore, there are still many other dev tools out there. This is especially important for beginners. They don't know enough to be able to make an educated decision - make the decision for them, and they'll be much more productive. Flexibility and innovation... it's overrated crap. Perl is built around the philosophy of flexibility, and not only is it one of the worst languages ever made, it's one of the worst things human-beings have ever done outside war. Innovation is another big pile of bullshit. It doesn't even exist - at least not in the way coders talk about it (this is an area where Microsoft is a huge offender - if you claim that 100% of your products are innovative, then you're full of shit, and you don't know what the word actually means). The way geeks use the word, innovation is just doing something differently for the sake of doing something differently. Given the chance, a coder would stick the steering-wheel of a car in the back seat for the sake of "innovation". Don't make my dev tools "innovative" - make them approachable and easy to use.

There's much more, but, as I said, I'd spare you the details. You probably get the idea from this little list anyway.

Apple needs a VS.Net equivalent. I couldn't care less about how they get there. Copy it outright with changes appropriate to Apple development. That's another thing I don't understand - coders go nuts when Company X copies something Company Y did. Who cares? What's wrong with imitation? I don't want your navel-gazing argument - I want a dev tool that works.

---- Wrapping it all Up ----

I don't use RealBasic because it sucks, but mostly because it doesn't have to suck.

The OS X dev story is awful. It's my favorite OS - just gorgeous - but I can't dig in and contribute because I refuse to have to  get my coding De Lorean up to 88 MPH to kick in the flux-capacitor, sending me back to the age of disco whence these dev tools hail.

With Apple's resources, there's no excuse for this. Sometimes I feel like they don't want people to learn how to code for their OS. It's like the arcane technology is the secret-handshake of Apple elitism.

I hope this is a satisfactory response to your email, Steve :)


[Gratuitous Links to my Homies - Not Part of the Post Above] [Learn More]

- Rajiv Popat - Totally, mister. I'd much rather have and exercise my arrogance than keep quiet and put up with stupidity. Being opinionated, even if you're dead-wrong, is at least a way to get a conversation/debate going that might fire people up enough to find some kind of resolution. It's hard to tell it like it is without pissing people off, but it's a start toward figuring things out.

- Dream Better - Another bad experience with the Windows Live installer getting in the way of a good Windows Live Writer experience. When you have to resort to a user-produced install package, there's something seriously wrong with the original installer.

- Cliff - Cliff has been getting on my case about the Facebook project I never started. The problem is that my idea seems to have been implemented by someone else. Not exactly, but close enough that I'm not sure going forward with my idea would add much. Actually, the version this other guy did is crap and drives me insane, but, still... I dunno.

- Rory on Twitter - Yes... a link to myself. As some of you know, I started twittering. I hate it. Come hate it with me.

Published Monday, March 17, 2008 4:06 PM by Rory

Filed Under: , ,

Comments

 

Adam Bomb said:

TL, DNR
March 17, 2008 4:37 PM
 

Don Snabulus said:

That was a great journey through my same frustrations with these languages.  I've always been a BIG fan of cross-platform development and have longed for a decent tool to handle them.  I thought I was missing something and that my inability to get excited with RealBasic was my fault.  Thank you for lifting that burden from my shoulders.

I've turned to Ubuntu Linux on my home PC, but I think my fun-time coding is going to turn towards C# now (Linux gotz  Mono; good enough for screwing around).

I am glad that a formerly blind guy who fled Stumptown for Sin City turned me on to your site.  I've been lurking for a few months now and I enjoy (and envy) the writing style here and like to visit your link homie(tte)s.
March 17, 2008 5:19 PM
 

Tim said:

Interesting article - I've been frustrated with the lack of good cross-platform stuff.  The trouble is, basically you need:

Angel [A] Language/compiler
Beer [B] Nice framework/library
Coffee [C] Debugger

So far the only stuff I've found is:

Angel [A] C/C++
Beer [B] Qt or wxWidgets
Coffee [C] Er...

I haven't tried either of the libraries seriously. I looked at wxWidgets but it seems to make all the same mistakes most other libs do (example: they have two different classes for list controls, because Windows has two different list controls. I don't expect to have to care about that kind of shit any more).

I like C#, but when I looked at Windows Forms it just seemed like a clusterfuck waiting for a bunch of trains to arrive so they could all collide and explode, and not in a good way.  My thought was "You had the chance to wipe away Win32 and start again, and *this* was what you came up with?"

I haven't had a chance to look at WPF/Silverlight (Windows Forms put me off, tbh) but that will probably change in the next few months.  I've no idea how cross platform it will really be but my guarded cynicism tells me I won't like that 'story'.

I'm learning about Objective C/Cocoa, and it doesn't seem *sooo* bad so far, but I haven't done anything except go through a couple of tutorials yet.  Having heard Mac zealots bang on about Objective-C for YEARS I expected a little more.  The messaging stuff is neat, but I did find myself thinking "Is that it?  That's all you got?"

It all felt very C/C++, i.e. manual labour, which in reality is to be expected as the languages are of similar vintage.  It's just the endless cheerleading by Mac fanatics had upped my expectations for Objective-C.  See what a fool I've been.

I am going to have a go at an Objective-C/Cocoa app, if only to teach myself something new, and also because it's in an area (MIDI etc) that Windows traditionally sucks at, and sucks more with each passing release. And I really want this app, so I can use it, and no other bugger is going to write it for me :-)

The main problem I have with Cocoa is that Apple's docs seem to suck (a truth seemingly universally acknowledged, even by the Mac priesthood).

In summary, in terms of cross-platform dev, I think you're fucked.  And so am I.  But then we knew that.

PS. Swing is shit. You are correct.
PPS. If you think Python's enforced indentation is cool, you've obviously never tried to comment out an 'if' statement when testing some code.  Or had the dreaded mixed tabs/spaces scenario.
March 17, 2008 5:49 PM
 

Tim said:

Those stupid icons are supposed to be a, b, c... etc

Goddamn emoticons. Get everywhere. And you with no post preview option.
March 17, 2008 5:51 PM
 

Jersey Girl said:

Why Python-like? Why not, like, Python?
March 17, 2008 6:22 PM
 

Matt said:

Phenomenal post Rory, I remember feeling the same way when exploring the linux side of things.

My only advice to you is check out mono/monodevelop. In the last few months they have really beefed up their OSX support, and started treating it like a first class citizen. Monodevelop is like going back in time a decade or so compared to Visual Studio, but it is still lightyears ahead of what is out there on other platforms. The only thing is you gotta learn Cocoa#, which is a direct binding to cocoa.

@Tim
WPF is absolutly wonderful. I come from the web world, so the whole idea of markup for the front end wired to code behind is pretty natural to me. The GUI designer is a joy to work with in split view, but it is still lacking if you want to take the whole VB6 "I don't care what the code looks like, just generate it for me" approach. WinForms was really just a stopgap between win32 and WPF, what we have now is a gui toolkit worthy of the framework.
March 17, 2008 8:15 PM
 

AW said:

C'mon dude, you're <3'n the .NET but you haven't used Mono?

http://www.mono-project.com/Mono:OSX

Runs on Mac OSX, has IDE, and more importantly, has Coca-cola bindings so your shit looks good.

Make sure to get Mono 1.9 (2.0 runtime support) 'cuz .NET 1.1 in general is rank.
March 17, 2008 10:15 PM
 

The Cowboy said:

I just read the first sentence then jumped down here to complain about how long the post is.  

Seriously though, I'm a .Net junkie and haven't explored most of the tools you're talking about, but I do remember the Mono project from a while back.  They seemed to be constantly behind the curve so it didn't really help the I-need-to-deploy-.net-code-to-a-linux-box-because-my-orchestra's-isp-is-a-bunch-of-frelling-morons problem.  It sounds like they have an Apple implementation now?  Maybe I'll get that Mac after all.  Maybe.  Last Apple I owned was a IIGS (still have it, as a matter of fact--Go Woz!).  

Thanks though, that's good stuff.
March 17, 2008 10:18 PM
 

Massif said:

What no LISP? Because, you know, it's a really useful tool for pragmatic folks who just want to get things done.

Ahem...

Also, we have emoticons? how do they work? is it (a) or Angel [A] or something? How long have we had these features without my knowledge?
March 18, 2008 1:47 AM
 

Massif said:

Angel [A]Wilted Flower [W]Email [E]Sleep [S]Time [O][m]Email [E]
March 18, 2008 1:50 AM
 

rajiv said:

Wow. I didn’t know you were listening when I was calling you “loud, direct and completely arrogant” :)

Btw, please keep the loud, direct and highly opinionated posts coming; they end up being excellent food for thought and inspiration; particularly for folks like me.
March 18, 2008 3:15 AM
 

Todd McKinney said:

I read the entire post. I want to disagree with most of your points, but I can't because you're right.

The real reason for my comment is to say that I also hate twitter. It's like having a conversation with a very poor implementation of a brick wall. FYI - unless someone is following you, you can't talk to them. It's like a weird tech elite thing.
March 18, 2008 4:36 AM
 

SDC said:

Overall a nice write-up, I for sure know not to mess with RealBasic now, whereas b4 there was maybe a 10% chance I would.

You are looking to flame up some language wars with the 'Python-like' and Perl - war < epsilon comments.  On the second comment, I switched from Perl to Python (you'd be shocked some of the places Perl is used, first off, and secondly shocked that it gets the job done A-OK in these places, tho), so I don't REALLY have a dog in the Perl fight.

And as to comparing Python to VB6, now that's just wrong.  I suppose it being (Python I mean) 'multi-paradigm' can be interpreted as 'trying to positively spin being able to do whatever, with a predictable horrid mess as a result'.

Having switched to Python (and Mac) recently, I find Python really great, but I tend to do more nerdy number crunching and analysis type things than widgety UI things.  Also Python seems to have gained momentum (Microsoft hired the IronPython dude,  Sun hired some Python people, etc etc.).  In terms of having a handy-dandy scripting type language which can also do some heavy lifting, it is great.  But it won't solve yer problem of developing GUI type apps on the Mac, so perhaps this is all academic.
March 18, 2008 10:36 AM
 

Koogle said:

Rory - awesome post

normally I'm not one to give Apple much consideration as its not an OS that in the past I have particulary had much to like about it.. but MS is continuing suck in so many areas that its getting harder not to look around for a better alternative. Or at least hoping a better alternative comes around in time to jump ship. I'm think Win 7 might be that time, if MS doesn't seriously improve its ways and software design/features.etc etc.

Unfortantly I think the reason most haven't completly switched to OSX is because of Apple itself..  Its these kind of posts that get down to certain areas that if improved could really make a huge difference and certainly the development tools could make that difference , it is the mainly the software/addons/tools  that you can get for windows that keeps many people using windows. And if no coder is wanting to use Apple developtment tools then OSX will never see any better improvements, other than what Apple decides on for each upgrade of its OS.

So I hope Apple listens to you Rory, your perspective these issues is pretty much bang on tbh :)


"That's another thing I don't understand - coders go nuts when Company X copies something Company Y did. Who cares? What's wrong with imitation? I don't want your navel-gazing argument - I want a dev tool that works.
"

+ I Agree with that aswel and not just for dev tools but for all software,features etc really. Can't stand those types who don't look around to see that certain things have been done better else where, and the solution is so much more simpler than forcing users to put up with there methodologies.
March 18, 2008 11:01 AM
 

Yuvi said:

I read the post, then the comments, wanted to add something, then realized I couldn't: I have not seen a Mac (even a screenshot!(atleast intentionally)) with my eyes. But, if we are to develop for the iPhone with THIS shit, then, well, I'd be as enraged as The-Neopoleon-about-the-word-Innovation. I hate semicolons with a passion that is only surpassed by my hatred for curly braces and casts.

For someone like me who went from simple TurboC to the wonder (for a 10 year old) of VB6 and then to the greatness of .NET, and now LINQ (I can't even use .NET 2.0 after using LINQ for 3 months), I would rather drown in a tar pit with negative pH along with a coupla dinosaurs than be dragged into any C++ish cludge...

(Here's hoping someone remembers that I'm back here after 4 months of hopeless, useless studying for a totally useless exam that, incidentally, determines weather I go to a college of cocksure Jocks or roryish Geeks. (Oh wait! Here's hoping that someone atleast "recognizes" me(What's the forum for, btw? (And, can the Holy Royal Highness add yuvipanda@msn.com(or @gmail (or @yahoo)) to his IM so that I can keep telling Holy Royal Highness to complete that goddarn creation story?))
March 18, 2008 11:49 AM
 

Steve Cholerton said:

Great post Rory - while I don't agree with everything you said (cannot express any love for .Net even while using it regularly, it was VB.NET tho' - should I have gone down the dark path of C# ?)  you do make some great points.

I too would like to see a really sexy Dev environment for OSX,  XCode, Interface Builder etc are OK but cannot be called straightforward or particularly enjoyable, and even if they were they would not be cross platform.

I'm going to continue trialling REALbasic and also check out Mono, as AW suggested, I hope its moved on significantly since I last looked around a year ago :-)

Cheers - Steve

March 18, 2008 12:46 PM
 

Chris said:

I was a real basic user. I was actually the one who popularized it on Channel 9 way back when the first linux builds were released.
That being said, I haven't used it in years. They started charging for the Linux version at one point and that's when I stopped being interested.

One good thing I want to briefly point out in this comment is that BeerCo is closed, and that this is our new office suite in sunny CA
http://www.flickr.com/photos/8606487@N03/2343713467/
http://www.flickr.com/photos/8606487@N03/2343713471/
I knew that if I hung in there long enough God would save me from French Canada and deliver me to sun and palm trees and the broke @ss Canadian software market.

The nice thing about XCode is that it comes free with your OSX disk. I will read your whole article in a bit, as I am finishing client work. It looks interesting though.
March 18, 2008 5:40 PM
 

Chris said:

That should read "from the" broke @ss Canadian software market. Your podcast on Canada was right on.
March 18, 2008 5:41 PM
 

Graham said:

Eclipse & Java with SWT
March 19, 2008 2:51 AM
 

Photochicken said:

Firstly, this was a great analogy,

"The OS X dev story is awful. It's my favorite OS - just gorgeous - but I can't dig in and contribute because I refuse to have to  get my coding De Lorean up to 88 MPH to kick in the flux-capacitor, sending me back to the age of disco whence these dev tools hail."

Secondly, I wish you'd develop some freeware that would allow Netflix instant-view movies to work with OSX without having to run Windows on the Mac with the Netflix software installed.

Thirdly, I totally agree with your annoyance while trying to enjoy the café experience while a baby is screaming. I hate it, too, and I have a baby! It's obviously not the baby's fault but the stupic, selfish parent(s) for not a) listening to their baby's cry for help b) ignoring their baby's cry for help and c) being fucking idiots.

A baby cries to let it's parents know that it is hungry, tired, uncomfortable or overstimulated. All of which are easily remedied by a responsible adult. Not an idiotic child-parent who would rather indulge in their social lives than care for their infant.

A crying baby in a doctor's waiting room is a whole 'nother story.
March 19, 2008 9:48 AM
 

Photochicken said:

Shit!!! Sorry for the spelling and/or grammar mistakes. I keep forgetting I can't edit my posts here.
March 19, 2008 10:04 AM
 

What’s Really Good? « Can’t see nothing but the source code said:

March 19, 2008 4:06 PM
 

Austin said:

I would be using a Mac today if there was a Visual Studio quality IDE for building native OS X apps.
March 20, 2008 10:31 AM
 

Traffic « Can’t see nothing but the source code said:

March 21, 2008 1:34 PM
 

Chris said:

"I would be using a Mac today if there was a Visual Studio quality IDE for building native OS X apps."

Why don't you just use XCode?
March 21, 2008 5:21 PM
 

Rx for Rory said:

How about Trolltech's QT for all platforms?
March 22, 2008 8:20 AM
 

Chris said:

"VJ++ was probably the best tool of its generation for dealing with the mess of COM"

Yeah, I actually just read part of your long post. I haven't had time until now. JDirect was actually pretty horrible.
http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&rd=1&item=120236982453

Again I am moving to long beach, so if you ever wanted to experience some really old and bad technology, you can buy my copy of Visual J++ from 1998 and step into a time machine of badness. Please note that the runtime to use Visual J++, though included with this IDE, is no longer available on Windows. The dreaded MSJVM. It would produce an EXE with an entry stub to start the MS Java runtime.

I worked with J++ for at least 2 years and it was an abomination. The WFC class library was vastly different from swing and the other java namespaces and there was tons of duplication on classes. It's was just completely ugly and very badly thought out ... by Anders who later copied Java when he created C#.
March 24, 2008 12:45 PM
 

Rob said:

FINALLY!
Rory, I may follow you around forever like a fanboy now. You live in Portland, right?

Someone who actually agrees with me about the semantic and lexical messes devs made for themselves by using C++ and/or Perl. Every time I have to do C++ my development slows by a factor of 20. And Microsoft's Windows Media team keeps forcing me to do it for friggin' simple stuff, like, y'know, chaining a bunch of pictures into an animation!

That's six months of my life I'm never getting back.

I remember the heady old days of NextStep development, with the Objective C messaging and the other stuff. At the time it was the best stuff out there for a really nice platform. Never really did get my brain around that NetInfo stuff, tho...

XCode seems the same as that, and considering the fact that it hasn't changed much-if-at-all in the last FIFTEEN YEARS, as far as tools support goes, Chris, that's your answer.

I have the same complaint about Microsoft's failure to bring the full .NET 2.0 data binding stuff into WPF. I hate them for doing that to me. Still and all, FINALLY, an easy way to do 3D scene graphs! Woot!
March 24, 2008 9:10 PM
 

Yuvi said:

@Rob: Wait a sec! No full .NET 2.0 Data Binding in WPF? Here I am, wishing all the Data Binding Goodness was present in .NET 2.0, and there you are, wishing it the other way round? Perhaps, you're talking about the missing (not-for-long) DataGrid?

March 25, 2008 2:45 AM
 

Mark said:

Nice post and in my case timely. I'm not a developer; I'm a sysadmin who supports macs (NFS servers), linux (application and development), and windows (just because everyone has to have a windows box for some reason). The only issue I have with a python is the required libraries. When coupled with other apps requirements, system library conflicts can be a nightmare to resolve. Runtime libs could be a real mess. Wrist, meet razor blade.

I gave the java IDE a test run last night on the mac. What a pig. But it does promise to provide portable code. Something I really need to be able to write. I don't know that it will pan out but for now I'm going to give it a shot.
March 25, 2008 7:55 AM
 

full belly project said:

March 26, 2008 1:54 PM
 

updates galore said:

March 26, 2008 2:55 PM
 

Rob Perkins said:

@Yuvi -- Hardly. The data binding stuff in WPF is actually very good, and I never missed DataGrid; it was always too general and too fragile a control for my customers.

The thing that's missing in WPF is *tools support* for data binding. In VS 2005 I get drag and drop hookups for my object data sources, complete with a BindingSource object which I love. In WPF... I have to type in the { source of the data } and there is no intellisense, no checking, and no automatic management. That, and once again, typed datasets have taken a back seat to EX-EMMM-ELLLLLL!

(I simply don't *care* that it's XML, and I'm vaguely resentful of the requirement to learn Yet Another Programming Language. Sigh, at least it's not based on C++).
March 26, 2008 3:34 PM
 

Carolus said:

Another great post. I am always trying to explain things to the JAAVAA coders from Canada. I am wondering why they don't GET IT. I have suckled from the nub of .net for years, and have never experienced the pain of other languages, other than BASIC,FORTRAN-77 and PASCAL. I thought I was crazy when I couldn't code nothing for my MAC except for Hypercard!

What's your opinion on FLASH/SILVERLIGHT/AIR for developing cross-platform, seems to be where people are going, well except for SilverLight, why does it ask me to install it even though I ALREADY INSTALLED 10 GAGIILLION TIMES!

I digress, thanks for the great post.

April 2, 2008 8:56 AM
 

joshv said:

Adobe's Flex/AIR might be the holy grail you've been looking for.  With Flex 3, the IDE is a top-notch Eclipse plug-in with support for step by step debugging and memory profiling.  The graphical widget toolkit is very nice, and infinitely skinnable/customizable.  No, you won't get native look and feel without a lot of work, but personally I think you can do better than native with Flex.

AIR allows you to compile your Flex applications as installable desktop applications for both the Mac and Windows (Linux coming soon).

The only downside is that OS integration is a bit lacking.  An AIR app can access the local file system and the Internet, and that's about it.  And there's no native code escape hatch (yet).
April 4, 2008 6:49 AM
 

Jarin Udom said:

Have you taken a look at RubyCocoa? Ruby is like Python but better, and RubyCocoa allows you to write real Cocoa apps in Ruby.

That being said, Adobe AIR development with Flex is pretty darn nice.
April 4, 2008 7:27 PM
 

Diego said:

RealBASIC? Not smart enough to try a real programming language? At least something that's not for beginners? That's kiddies stuff.
April 5, 2008 8:59 PM
 

Rory said:

Diego -

"RealBASIC? Not smart enough to try a real programming language? At least something that's not for beginners? That's kiddies stuff."

Read the post, you moron.

Anyway, RealBasic is *not* "for beginners" - yeah, it's one of the "basic" languages, but there's very little most coders would need to do for OS X that couldn't be done with RB. Certainly no way to get it done faster - Objective-C/Cocoa is a pain in the ass.

I'm guessing you're one of those coders who equates complexity of the dev platform with how good the dev platform is, or whatever. I left that mentality behind when I was... I don't know... eight years old?

If your interest is academic, then, yeah, you'll find far more interesting platforms than RealBasic, but if you actually want to get things done, RB is probably your best bet for OS X.

As I said in the post, though, which you apparently didn't read, is that I'm philosophically opposed to it, as well as Objective-C/Cocoa. There's no reason for Apple not to have a modern, kick-ass dev platform. They do an amazing job with the OS - why not the dev tools?

It's ridiculous.

But I've already said all that.

My main reason for responding here, just to make sure we're all on the same page, is that you're a douche.
April 6, 2008 10:11 PM
 

Rory said:

Jarin -

"Have you taken a look at RubyCocoa?"

I don't like Ruby - at all.

I like some of the *ideas*, but the syntax... well, it feels like the worst of C, Perl, and PHP all crammed into the same language.

I think I'm a form-over-function person. I need to find something aesthetically pleasing to be able to appreciate it functionality. For me, though, there's some overlap - when it comes to dev tools, I tend to have a far easier time with the ones that appeal to my aesthetic tastes.

I'm told I was like that when I was a baby, too. You could try to feed me baby food I didn't care for - even though it provided the basic nutrition I needed, I held out for the good stuff.

My survival instinct has never been any good. I still only eat if I remember to :)

So, if I'm that obstinate about something I need to be able to live, then you can imagine how much pickier I am with something I simply want...
April 6, 2008 10:14 PM
 

Diego said:

Obviously you can't see a play on words (or in this case on an acronym) when it's right in front of you. The BASIC in RealBASIC and Visual BASIC is an acronym. The B stands for Beginner's, hence my facetious remark. Maybe you needed an emotion to help you along, to comprehend?
April 7, 2008 9:29 PM
 

Rory said:

Diego -

"Obviously you can't see a play on words (or in this case on an acronym) when it's right in front of you. The BASIC in RealBASIC and Visual BASIC is an acronym. The B stands for Beginner's, hence my facetious remark."

Your comment seems openly hostile and condescending. If it's a joke, I missed it.

I didn't suspect "a play on words (or in this case on an acronym)" because every possible joke about basic has been played out.

Plus, even now that you've notified me of the "play on words (or in this case an acronym)," it still isn't funny. Had it been funny, I may have gotten it, but "a play on words (or in this case an acronym)" isn't an especially appealing form of humor, and certainly not when put to use against a source of joke material that ran dry many, many years ago.

"Maybe you needed an emotion to help you along, to comprehend?"

Is that another "play on words"? Because I have no idea what you're trying to say here.
April 7, 2008 9:41 PM
 

Diego said:

"Maybe you needed an emotion to help you along, to comprehend?"

Is that another "play on words"? Because I have no idea what you're trying to say here.

--

Rory,

I was referring to the overuse of smiley faces and the like these days, and that I didn't use one. You know the kind, people lacing their emails, IMs etc with an over enthusiastic amount of smiley faces to make sure you get their jokes.

Nonetheless, please don't take any animosity from my comment. It's all cool.
April 7, 2008 10:23 PM
 

Jim G said:

What about Revolution?
We just had to use JUCE and C++ for a tiny cross platform applet. Took months and months and it's still not very cross platformy.  Very JUCEY tho.

How's AIR with MIDI/Audio?  
April 11, 2008 5:55 PM
 

Daniel said:

I've just been reading your site for the first time and this post of yours is typical of the false assumptions that Windows developers are laboring under. I've been a Mac and a Windows developer. Stating that Cocoa reminds you of Swing makes me seriously question how long you've worked with it! The old Java bridge the Apple has killed off now was pretty awful too.

First off, Object-C is not 'primitive'. Cocoa Bindings, the wonder that is Core Data (which you MUST check out if you haven't already), value transformers and the outlet-action mechanism remove so much of the glue code common in other languages while proving that you don't need a complex class structure and namespaces etc to produce awesome applications in a fraction of the time. Not to mention a true introspective language with real late-binding support and impressive APIs (Core Animation comes to mind) And unlike .Net, Cocoa compiles native code (transparently 32 and 64bit, for both PPC and Intel), not byte code that is dependent on a separate runtime and can be disassembled by anyone with Reflector.

And the greatest thing is, you can use C++. Within the same project. Mixed with the Obj-C code or in separate libraries. Apple calls this Objective-C++ and although badly documented it's been around for years. You can build a complete app with C++ (real, standard C++, not the crippled version that MS ships), using Obj-C only for the GUI layer which can be very light when you use bindings. Infinite undo? Easy peasy. XML/SQL persistence? Easy. Webservices? easy. Localization? easy. Even end users can provide their own localizations because your code isn't tied to the UI like in .Net; it's all outlets and actions. The major attraction of Cocoa is that you're not forced to write code for trivial stuff.

XCode is a clean, simple IDE which beats Visual Studio in every case except the debugger, which still needs improvement. And there's no legacy cruft to have to deal with - no COM, ATL, unicode issues. The the API is clean and well documented; just two libraries! Core and Foundation. People who bemoan the lack of VS on the Mac need to get their head around to the fact that there are different ways to right code; not all of us are fans of monolithic, bloated IDEs that do everything from UI design to documentation.

Now I've programmed with VB (yuck), RB since 1.0 (100% agree with you), Carbon (yikes), Win32 and MFC (double yikes), Java and now C#. Microsoft's tools have improved 10-fold and C# _can_ be nice, but whatever you do with it, you're locked into Windows, which is a crummy, non-64bit, shitty OS full of legacy junk which you WILL have to deal with. VisualStudio for instance provides solutions to problems that don't exist in Cocoa. Saving and loading preferences in a Cocoa app is a simple case of using NSUserDefaults which looks like a key-value map. And when you use bindings, it's no code at all. Installation? Also a non-issue on this OS. No need to download any runtimes. No need to tweak list-drawing code etc for performance because you never work with it directly; you provide a datasource and the OS handles the rest. Dito for the clipboard, search, system services and so much more.

I love C++ but it's limiting in a lot of ways, and finds solutions to problems that should not exist. Besides the proof is in the pudding; OSX is bursting with high-quality apps these days and it's all down to Cocoa and the open APIs provided by the OS. Plus Cocoa is free on every copy of OSX, unlike bloated Visual Studio and MSDN. How many decent .Net apps have you seen recently?

.Net is a much needed effort to get Microsofts shit together, but however good those tools get, you're still a prisoners of Windows, a fact that's rammed home to me every day I go into work.
April 11, 2008 6:02 PM
 

Khaiersta English said:

I read through the part where you discussed your frustrations regarding use of Java with OSX. I find it interesting that you had such a difficult time. Did you ever discover Eclipse (http://www.eclipse.org/)? My husband and his team at Google use it exclusively for their Java development. My understanding is they also use Python for all internal application development, though I couldn't tell you what application they write it in. He went to school at Standford where they have one of the top five CS programs in the world. They use Macs only in their CS department. After five years with Google, and never using a PC, my husband is more than happy to be free of the constraints of viruses, poor UI design and other frustrations related to Windows.

I just think its interesting to note these differences given your comments.

K
April 13, 2008 12:37 AM
 

Rory said:

Daniel -

"I've just been reading your site for the first time and this post of yours is typical of the false assumptions that Windows developers are laboring under."

You're assuming I'm a Windows developer. Yeah, I've done a lot of work with Windows, but I've done a lot of work with many systems (AS400, *nix, OS X (yeah - *nix - but its own world), Windows, blah blah blah...). I've worked with many languages and IDEs. This post wasn't written from the point of view of someone who's only done Windows work - I take everything into account. In my experience, Windows provided, by far, the best dev platform, so it might look as though I've lived in Windows, but it's just not the case.

"Stating that Cocoa reminds you of Swing makes me seriously question how long you've worked with it!"

It *does* remind me of Swing. Not at the API level, but in an abstract way. I figured the Windows devs who read my site are much more likely to have encountered Swing than Cocoa, and I wanted to give them some kind of context in which to get an idea of what Cocoa, to me, is like. Mainly, it's about composition. Things have changed a bit with WPF, but Windows developers aren't used to the level of GUI granularity in Swing and Cocoa.

Others might not make the connection, but it makes perfect sense when you're looking at Windows, Swing, and Cocoa from a high level.

"First off, Object-C is not 'primitive'."

I utterly disagree. For me, it comes down to drudgery. There are things you have to think about with Objective-C that simply aren't present in C#/.Net (for example).

Once you get used to doing all the extra little things, it might not seem like a big deal to someone who's used to Objective-C, but you notice them when you've spent a lot of time working with a far more modern language.

"Cocoa Bindings, the wonder that is Core Data (which you MUST check out if you haven't already), value transformers and the outlet-action mechanism remove so much of the glue code common in other languages while proving that you don't need a complex class structure and namespaces etc to produce awesome applications in a fraction of the time."

Have you done much coding with .Net 2.0+? I think you'd be surprised. Especially with 3.5 and WPF. The degree to which the IDE, language (C# has had some fascinating additions for data manipulation), and APIs take the burden of data-oriented drudgework off your hands is incredible.

"And unlike .Net, Cocoa compiles native code (transparently 32 and 64bit, for both PPC and Intel), not byte code that is dependent on a separate runtime and can be disassembled by anyone with Reflector."

Irrelevant. The fact that you don't *have* to recompile for 64-bit with .Net is a *good* thing, and the runtime does away with the problem entirely. To the user, it's no different from having a universal binary.

As for Reflector (and other similar apps), what's the big deal? There's advanced obfuscation software out there. If you're worried about people prying your secrets out of assemblies, then it's a simple step to ruin their spelunking.

"And the greatest thing is, you can use C++. Within the same project."

That's a *horrible* thing. Playing with being able to mix C# and VB.Net in the same project (you can, of course, have projects in different languages under the same solution, but that's very different from being able to mix in the same project) is a nightmare.

For maintenance and clarity, it only makes sense to separate different languages into different libraries. While some people can code just fine in multiple languages, there are many who can't - mixing like that would screw a lot of people over. Plus, if something went wrong with the C++ side of things for such a coder, he'd be even worse off. C++ is a mess, and it's unlikely he's going to be able to just hack his way through it without creating many more problems along the way.

"Infinite undo? Easy peasy. XML/SQL persistence? Easy. Webservices? easy. Localization? easy."

I seriously doubt it's as easy as it is with .Net. From the start, .Net's support for web-services (etc.) has been outstanding.

"Even end users can provide their own localizations because your code isn't tied to the UI like in .Net; it's all outlets and actions."

Uh... you clearly have little experience with .Net and localization - and with .Net in general.

You can easily put together a proper MVC app with .Net - Windows Forms *and* WPF. WPF makes it a no-brainer. You don't even have to understand MVC to be able to take advantage of it. And with strong typing - beautiful interfaces - there's little room for error.

"XCode is a clean, simple IDE which beats Visual Studio in every case except the debugger, which still needs improvement. And there's no legacy cruft to have to deal with - no COM, ATL, unicode issues."

I don't understand what "issues" you're talking about. If you're coding along in C# or VB.Net, it's rare that you have to deal with "legacy cruft."

And, for someone who's happy to mix C++ with Objective-C, your opinion about "legacy cruft" is hypocritical.

"People who bemoan the lack of VS on the Mac need to get their head around to the fact that there are different ways to right code; not all of us are fans of monolithic, bloated IDEs that do everything from UI design to documentation."

This is exactly why I put a note at the top of the post, telling people to read the *entire* thing *before* responding.

If you had actually read the thing in its entirety *and* paid attention, you'd see that I'm not saying VS is the only way to go. My argument is that there needs to be an *alternative* to Objective-C/Cocoa/XCode, and there does.

Let's look at this part of your quote more closely: "there are different ways to right code."

YES - that's correct, but *YOU* are the only one who's coming close to arguing that there *shouldn't* be different ways. You say you aren't all "fans" of "bloated blah blah blah," and that's fine - I *am* a fan of VS, and I want an alternative to XCode.

I was SO clear about that. I'm not looking to replace anything.

You, like many coders, are *really* irritating when it comes to this kind of stuff. You wind up with double-standards, hypocritical opinions, arguments made against arguments that don't even exist in the post, and instead spend your time crafting something in response to what little fragment you read.

Your comment is lengthy, and I'm surprised that you would have left something that detailed without actually having done your homework. My post is *right up there*.

Plus, I'm not asking for VS on OS X - I'm asking for a VS-*like* IDE for those of us who want to be able to write everything from quick and dirty apps all the way up to full-blown big time solutions.

That's something VS offers. I don't care what any other devs say - Objective-C, Cocoa, and XCode have a steeper learning curve than .Net and VS.Net. Having worked with many different platforms (like you), I've never seen anything so easy to approach as VS.Net and .Net itself. It's hard to shoot yourself in the foot, whereas you could totally screw up an Objective-C app without a problem. Typing comes to mind. It's far, far easier to deal with type in .Net, and that's one place beginners would mess things up fast. Tons of other things come to mind, but I'm not going to make an extensive list. The fact is that Objective-C is lower-level than C# or VB.Net, and that *always* gets you closer to trouble - even if you're an expert coder.

"Microsoft's tools have improved 10-fold and C# _can_ be nice, but whatever you do with it, you're locked into Windows, which is a crummy, non-64bit, shitty OS full of legacy junk which you WILL have to deal with."

You're not locked into Windows, and you're not locked into 32-bit.

Mono. 64-bit Windows. And, when coding for a client, it isn't your place to dictate platform. Unless there's a *strong* reason not to go with their platform of choice, you work *with* them to get them what *they* want and need. If they have more Windows devs, then Windows is likely to be the platform you're going to work with.

Plus, in what way does working with Objective-C and Cocoa *not* lock you into OS X? Yeah, there's some crossover with OpenStep, but OS and Cocoa really are two different worlds despite their similarities.

Seriously - more hypocrisy. With .Net, you can code for Windows *and* *nix with Mono, and that includes OS X.

How easy is it going to be for me to migrate my Cocoa app to Windows? Or any other platform?

Think before you write. Your smug attitude combined with your lack of thinking this through is just crap.

"Saving and loading preferences in a Cocoa app is a simple case of using NSUserDefaults which looks like a key-value map. And when you use bindings, it's no code at all. Installation? Also a non-issue on this OS. No need to download any runtimes."

Here we go again... .Net provides the exact same ease for dealing with things like preferences. In fact, *far more* sophistication in personalization is possible with .Net right out of the box. Again, it's really, really, *really* obvious that you've done very little with .Net.

Non Windows devs also love to refer to the downloading of runtimes, but:

1. Who gives a fuck? There are *always* dependencies for *any* app written for *any* platform. Unless you're connecting to the net with a 28.8 modem, this is a total non-issue.

2. Window ships with the runtimes. Yeah, you have to upgrade sometimes, but what's the big deal? Seriously. The user generally doesn't have to worry about it. There are ways to check to see if the required version is installed, and if it isn't, you just help the user out - it's *not* a problem.

And you're talking about how easy it is with OS X and blah blah blah, but, yeah, you don't have to download as many updates, but you *do* have to get the OS in the first place.

Also, what about the users who're on Intel Macs who try to run older binaries? A lot of software just won't run, and a lot that does is packed with problems.

You can still run DOS apps if you want to with Windows, but when it comes to some OS X software that was just written in the past few years, there's a lot that simply WILL NOT WORK.

It's maddening how preachy you are, but how little you know.

"No need to tweak list-drawing code etc for performance because you never work with it directly; you provide a datasource and the OS handles the rest. Dito for the clipboard, search, system services and so much more."

Jesus Christ... see previous arguments about how you haven't done your homework on the .Net side of things.

"OSX is bursting with high-quality apps these days and it's all down to Cocoa and the open APIs provided by the OS."

And Windows is "bursting with high-quality apps" - what's your point? And who cares what technology is behind it? Users sure as hell don't. They just want their apps - they don't have the slightest concern for what language/platform was used to create them.

That's your own philosophical issue.

"Plus Cocoa is free on every copy of OSX, unlike bloated Visual Studio and MSDN."

Dude... "bloated" has become so irrelevant. If you're a dev, then what does it matter? I can fire up VS.Net inside Parallels and use it without a problem - zero noticeable performance impact. It just doesn't matter.

And, to get Cocoa, you have to pay the Apple tax. The machinery is more expensive, so how "free is it, really?

You also get what you pay for. MS has constantly updated its coding technology to give devs a better, easier experience. Apple has retained stuff that's old, old, old... I don't have a problem with that, but there are R&D costs.

Plus, nobody's forcing Windows devs to use VS. There are free alternatives. Microsoft offers its Express line of IDEs at no charge. Yeah, they're "crippled" compared to full-blown VS, but they're still amazing products. If you want to use something else, though, you're welcome to do so.

You are in absolutely no way tied to VS when developing for Windows. There are tons of free IDEs for tons of languages and coding platforms. In fact, your options for free dev tools on Windows greatly outnumber those for OS X.

The only thing the "free" inclusion of Cocoa etc. gets you is that you can install from a disc that came with the OS. This saves you a download. Whoopee.

"How many decent .Net apps have you seen recently?"

Plenty, actually. One of my favorite apps - Windows Live Writer - is .Net. Often, you won't even know you're running a .Net app unless it throws an unhandled exception or whatever - or unless you check system logs. You don't *need* to know, and the fact that you don't seem to think that you're using .Net apps regularly under Windows indicates that you either don't use Windows often, or that the apps *are* so good that you apparently don't suspect they're .Net.

".Net is a much needed effort to get Microsofts shit together, but however good those tools get, you're still a prisoners of Windows, a fact that's rammed home to me every day I go into work."

1. The "prisoner of Windows" argument is trite and it's bullshit. With Mono, .Net is cross-platform - can you say the same of Cocoa apps? Something tells me the universal binaries you're so hot for won't work under any other OS. In other words, you're much more a "prisoner" of OS X than you are of Windows, but you have little idea of what you're talking about, so you apparently haven't figured that out.

2. You say that "a fact that's rammed home to [you] every day [you] go into work" is due to your being a "prisoner of Windows." That, too, is bullshit. You have a choice. Nobody's forcing you to be a Windows dev. And don't blather on about the economy or prevalence of Windows coding jobs over OS X jobs - it's still a choice. You could be a waiter if you wanted. It's a choice. You make yourself a "prisoner of Windows" by putting all the power in Windows. *I* don't consider myself a "prisoner of Windows," and so I'm not. If you're so easily imprisoned by an OS, then that's your own doing.

Jesus. Read the post. Do your homework. And if you want to be smug about anything without looking like an idiot, it helps to be correct and to know your subject matter.

Have fun enjoying the portability of Cocoa apps and not having to be a "prisoner" of an OS.

Douche.
April 13, 2008 5:02 PM
 

Rory said:

Khaiersta English -

"I read through the part where you discussed your frustrations regarding use of Java with OSX. I find it interesting that you had such a difficult time. Did you ever discover Eclipse (http://www.eclipse.org/)?"

Yes, and I hate Eclipse. I won't go into my list of reasons. It simply doesn't appeal to me.

"He went to school at Standford where they have one of the top five CS programs in the world. They use Macs only in their CS department."

The quality of the CS program is absolutely nothing to me. Telling me that something is good without explaining why isn't a compelling argument.

I'm sure many people would argue that Mercedes makes the best cars in the universe (or whatever your favorite auto maker is), but I hate Mercedes. I find them dull, conservative, and overpriced.

Status, as I was saying, is irrelevant.

I also don't see how a CS program could be any good at all if it uses only one platform. That's like raising a child in a Christian/Muslim/whatever household without telling your child about other religions and other options (agnosticism/atheism).

You *can't* come to a meaningful decision about something if you don't know anything at all about the alternatives.

The fact alone that you say they only used Macs tells me that, regardless of what others might say/think, this CS program *stinks*. How could you possibly know what's good or bad when you were roped in to one platform? I've developed for many different platforms, and I have a lot of perspective. I dropped out of high-school and couldn't afford more than two years of college. So what? I still have the critical-thinking skills to know better than to trust empty arguments made from nothing more than authority from consensus.

Who's deciding these are the best CS programs? Are these people biased? What's the criteria? Does the CS program even apply to this post I've written?

CS programs tend to be academic (as you'd expect), and also *way* behind the times. I've worked with many academic institutions, and I've been shocked by how backward *every* CS program has been. If that's all Stanford had to beat, then I'm not impressed.

"After five years with Google, and never using a PC, my husband is more than happy to be free of the constraints of viruses, poor UI design and other frustrations related to Windows."

Uh-huh. How could he know what's good or bad when never uses the thing he thinks is bad?

I don't want to try pate, but I'm not going to tell you whether it's good or bad. Other people like it. It's not my business to judge *for* other people whether a food is appropriate for them. I've determined by *my own* criteria that I don't want pate, but, again, I don't know if it's good or bad.

You have no say in what's good or bad without having experience with the things you're judging.

I'm glad your husband is happy, but his happiness has nothing at all to do with my feelings on the matter, and I'm not arrogant enough to argue that his choices are somehow wrong when based on my own values.

This post - if you paid attention to all the context I gave - is NOT a my-tech-is-better-than-your-tech post. I went way out of my way to make this clear. I'm not looking for what someone else wants - I'm looking for what *I* want, and I haven't found it, so I don't do OS X development.

But I'm *not* arguing that other people should switch - or that I'm correct.

Your husband's fancy education and lack of experience is in no way relevant to the purpose of my post.
April 13, 2008 5:16 PM
 

Chris Hanson said:

Rory, I really don't think you make a very good case when you compare Cocoa and Objective-C to .NET and conclude that the former are "primitive."  Sure, you hate having to do reference counting, that's fine, whatever — you don't need to worry about that any more since you can enable garbage collection for new apps you write that will be run on Leopard.  But your overall perception of Mac OS X and its tools appears to be diametrically opposed to pretty much every other .NET developer I've ever talked with who has dug into Cocoa development with Objective-C.

Your primary objection has generally seemed to be that Cocoa isn't really suited to building IT-department-style line-of-business apps.  The Cocoa framework and tools pretty much require you to follow a real model-view-controller architecture throughout your development, and are built entirely around the assumption that that's what you're doing.  What was it you were you saying about "choice" above? ;)

To put it another way, you've basically asked why Cocoa and its associated tools don't support throwing controls on forms and then double-clicking them to go to some event-handling code like HyperCard did in 1987 (and Visual Studio does today).  The reason is that enforced MVC behavior:  The action a control invokes will often not be tied to a single specific object of a single specific class under your control (especially not a "form"), but either to a pre-existing controller object with no code behind it, or to an object that is part of the responder chain at runtime.  It's extremely powerful and once you understand how to work within it nothing about Cocoa will seem backwards.

By and large, for professional application developers this enforced MVC hasn't represented a large learning or effort curve for Cocoa.  In fact, this has generally meant less work for professional application developers, because they don't have to implement the infrastructure to handle MVC themselves, or deal with integrating code that doesn't follow Cocoa's brand of MVC:  The framework already takes care of MVC, and code written against the framework follows its patterns and conventions.  It does mean, however, that if you do want to just throw controls on a form and write some spaghetti code in event handlers, Cocoa won't be your cup of tea.

There are a lot of things that Cocoa, Interface Builder, Xcode and Objective-C can improve and they've certainly been improved in every release of Mac OS X.  But largely what Cocoa has targeted has been end-user desktop apps rather than IT/line-of-business apps.

One last thing:  Please don't say "the Apple Dev Tools Team contacted you."  I contacted you only as myself, not as a representative of Apple.  I was interested in your opinions because I work on the developer tools, certainly, but I don't set policy and wasn't getting in touch in any official capacity.  (I thought I made that clear in my email, if not I sincerely apologize.)  I really do appreciate our exchange, too:  You gave a HUGE amount of valuable feedback, just as you do here, and I do refer back to it often.

There's a lot that can be improved in the documentation, the tools, the frameworks, and the language, and these will lead to an overall higher-quality developer experience.  But there's also a lot that is great already in the Mac OS X developer experience.  I hope you can eventually have that "a-ha moment" with Cocoa and its tools yourself, whether because you've had enough of a chance to spend enough quality time with them to get the gestalt or because we've improved them.
April 20, 2008 1:22 AM
 

Some Guy said:

I'm so  happy you've lost interest in developing code on OS X.  Apps on the Mac should have a certain level of taste, which you clearly do not possess.   Please, for the sake of Mac users everywhere, confine yourself to Windows.
April 20, 2008 1:33 AM
 

Rory said:

Chris -

I'm not sure what it is you're responding to. It seems like you didn't read the post in its entirety. I'm sure you did, but you're bringing up certain things as though we're in disagreement, or I didn't know, or blah blah blah...

Garbage collection, for example.

I know about the GC. I mentioned it in the post. I've actually mentioned it quite a few times elsewhere as well. It's out there. I've talked about it. I'm excited about it. It's in this post. It's great. I know. I talked about Cocoa and Objective-C 2.0 during a recent popular MS focused podcast - I talked about it until everybody told me to shut up, and then I talked about it some more. I've repeated this pattern since. I know about the GC, and so do people who never, ever wanted to.

Or this: "Your primary objection has generally seemed to be that Cocoa isn't really suited to building IT-department-style line-of-business apps."

No. That isn't my primary objection, so I won't bother refuting it. It isn't even a secondary or tertiary objection. It's nowhere on my list of objections.

It's 4:30 AM. I'm tired. I just got home from a four-hour debate about tech and coding with a friend. I'm not in the mood to deal with more straw-man arguments.

I realize that this post has pissed people off. That's fine. What I've written here is my opinion, and my opinion is unchanged. I've been coding for about 85% of my life. I've had to work with [insert whatever tech here] over the years. I've worked with a lot of ugly stuff, a lot of beautiful stuff...

I place Objective-C and Cocoa in the ugly camp, though I wouldn't have if they weren't Apple's dev offering. I expect something more from Apple - something better. And that's by *my* criteria. I'm not saying my way is the right way for other people.

I don't find Apple's dev tools to contain the same greatness as many Apple products. There are plenty of apologies to make, and, as I've said over and over, people will make them - particularly when they haven't gone out and given many other tools a try. During my years as one of Microsoft's public faces, I met *so many* people who attacked MS's tools, but who would, following long arguments, admit they'd never actually tried them.

I'm getting too tired to type.

Basically, if I'm coding with something that requires I know about and understand header files, that thing is probably older than I am, and probably a bit archaic.

There's absolutely no reason application devs in 2008 should have to work with C.
April 20, 2008 4:52 AM
 

Rory said:

Some Guy -

"I'm so  happy you've lost interest in developing code on OS X.  Apps on the Mac should have a certain level of taste, which you clearly do not possess."

No! I haven't lost interest! You brought me back from the brink.

Because of you, I'm going to start coding for OS X. As you say, Mac apps "should have a certain level of taste," and I plan to write something tasteful.

Yes... a great, big, nice, tasteful memory leak.
April 20, 2008 4:55 AM
 

Daniel said:

I wasn't going to spend any more time commenting on the diatribes of someone who so obviously has his head buried up his own rectum but what the hell. (Also I notice you started insulting me first - charming).

"Once you get used to doing all the extra little things, it might not seem like a big deal to someone who's used to Objective-C, but you notice them when you've spent a lot of time working with a far more modern language. "

I would love to know what 'little' things you're referring too. These kind of ambiguous statements are the reason I commented in the first place and made my original that you didn't know what you're talking about.

"Have you done much coding with .Net 2.0+? I think you'd be surprised. Especially with 3.5 and WPF. The degree to which the IDE, language (C# has had some fascinating additions for data manipulation), and APIs take the burden of data-oriented drudgework off your hands is incredible. "

MS are masters when it comes to hyping a technology, only to abandon it a few years later (Avalon). WPF represents a totally new way to developer Vista-savvy apps but making apps that simply look good is besides the point. Again, it's not an issue with Cocoa - you have to literally TRY to make a bad UI with Cocoa. Also C#'s support for 'data manipulation' amount to improvements in ADO.Net, itself a reworking of the old ADO COM cruft I mentioned. It's just a nice way to deal with SQL database back ends. Core Data, by comparison gives you far greater power, especially when it comings to key-value-observing and data bindings within the application. ADO is awesome for Enterprise apps, but most Enterprise apps SUCK because of all the complexities and dependencies and the politics involved. Cocoa was designed for creating small, self-contained applications.

"Irrelevant. The fact that you don't *have* to recompile for 64-bit with .Net is a *good* thing, and the runtime does away with the problem entirely. To the user, it's no different from having a universal binary."

You don't have to recompile for 64bit with Cocoa either and unlike Winblows, there's just one version of the OS for 32 and 64bit which handles everything transparently to the user, not mention platform testing.

"As for Reflector (and other similar apps), what's the big deal? There's advanced obfuscation software out there. If you're worried about people prying your secrets out of assemblies, then it's a simple step to ruin their spelunking. "

It's a HUGE deal for companies worried about losing trade secrets. I once had to encrypt a web.config file for an ADO.Net app exposed via an IIS directory and it was a miserable experience - each section of the file had to be encrypted separately using various command line tools based on machine-keys and other such technologies that I had to figure out from MS's fragmented documentation. And that was just the web.config.

"That's a *horrible* thing. Playing with being able to mix C# and VB.Net in the same project (you can, of course, have projects in different languages under the same solution, but that's very different from being able to mix in the same project) is a nightmare. "

No it's not - it means you're not forced to decide between one technology and the next. C++ is just awesome at certain things (math heavy stuff comes to mind). MS forces you to use C# or VB but not both in the same projects. It is not a nightmare and has saved me a lot of effort in the past.

"For maintenance and clarity, it only makes sense to separate different languages into different libraries. While some people can code just fine in multiple languages, there are many who can't - mixing like that would screw a lot of people over"

Right so let's all dumb down our code and write in VB so the script kiddies and keep up shall we?

"Plus, if something went wrong with the C++ side of things for such a coder, he'd be even worse off. C++ is a mess, and it's unlikely he's going to be able to just hack his way through it without creating many more problems along the way. "

C++ is not perfect by any means, but you can do pretty much anything with it and there's a wealth of knowledge and code out there which is not platform-dependant. Being able to code in such a well-known, standardized language instead of being confined to a single vender's propriety language is a huge boon.

"I seriously doubt it's as easy as it is with .Net."

It is from what I've seen. There is NO support in .net (at least in 2.0) for undo-services, never mind automatic undo.

"From the start, .Net's support for web-services (etc.) has been outstanding. "

WebServices are one of the most over-hyped technologies out there. Small apps that take HTTP requests and return XML data via other HTTP requests. Cocoa can do that too. And in far less code.

"Uh... you clearly have little experience with .Net and localization - and with .Net in general. "

Another sweeping statement. Care to back it up?

"You can easily put together a proper MVC app with .Net - Windows Forms *and* WPF. WPF makes it a no-brainer. You don't even have to understand MVC to be able to take advantage of it. And with strong typing - beautiful interfaces - there's little room for error. "

Haha that's funny. How much error can there be in Interface Builder when you have to write, oh ZERO lines of code. The Forms Designer is just a code generator. As for beautiful interfaces, well that is funny, especially as the developers of the Forms Designer ripped off IB in more ways than one.

"I don't understand what "issues" you're talking about. If you're coding along in C# or VB.Net, it's rare that you have to deal with "legacy cruft."

Again, very funny. Even in .net 3.5 much of the API is not exposed to .Net and you have to start messing with C structs and dozen ways to handle strings.

"And, for someone who's happy to mix C++ with Objective-C, your opinion about "legacy cruft" is hypocritical. "

So C++ is 'legacy' hmm? I'm sure that's what MS wants you to believe as it's a real standard they don't control. Oh and that nice CLR runtime of yours? C++. That OS? C++.

"If you had actually read the thing in its entirety *and* paid attention, you'd see that I'm not saying VS is the only way to go. My argument is that there needs to be an *alternative* to Objective-C/Cocoa/XCode, and there does. "

What alternatives? You've made it perfectly clear that you love big, bloated IDEs, and that Microsoft make the best development tools - ergo, you want VisualStudio on the Mac.

"I was SO clear about that. I'm not looking to replace anything. "

Hahaha! You should be a comedian.

"You, like many coders, are *really* irritating when it comes to this kind of stuff. You wind up with double-standards, hypocritical opinions, arguments made against arguments that don't even exist in the post, and instead spend your time crafting something in response to what little fragment you read. "

And so you are right and everyone else is wrong. The Mac and Cocoa are flourishing - even hardcore windows devs are switching platforms.

"Your comment is lengthy, and I'm surprised that you would have left something that detailed without actually having done your homework. My post is *right up there*. "

Sigh.

"Plus, I'm not asking for VS on OS X - I'm asking for a VS-*like* IDE for those of us who want to be able to write everything from quick and dirty apps all the way up to full-blown big time solutions. "

YES. WE GET IT. And it's not going to happen (thank god)

"That's something VS offers. I don't care what any other devs say - Objective-C, Cocoa, and XCode have a steeper learning curve than .Net and VS.Net. "

Check out the book 'Cocoa Programming for OSX' sometime to see just how 'steep' the learning curve is compared to ANY .net book you want to use. It's one of the easiest development environments I've ever had the pleasure to learn.

"Typing comes to mind. It's far, far easier to deal with type in .Net, and that's one place beginners would mess things up fast."

Yes, ObjC doesn't handle type safety as well as say, C++, and this is only thing you've said so far that I agree with.

"Tons of other things come to mind, but I'm not going to make an extensive list. The fact is that Objective-C is lower-level than C# or VB.Net, and that *always* gets you closer to trouble - even if you're an expert coder. "

Lower? How? Cocoa has a string class, classes for dealing with containers...I don't see how it's any 'lower' than #C? Cocoa apps have a main() just as #C have a main().

"You're not locked into Windows, and you're not locked into 32-bit. Mono."

OK stop. Right. There. Mono is a totally independent, 3rd effort that is unsupported by MS. Only parts of the .net/CLR specification are standardized - the Mircosoft namespace for instance, isn't. Mono is not the silver bullet that will release you from Win3d bondage.

"And, when coding for a client, it isn't your place to dictate platform. Unless there's a *strong* reason not to go with their platform of choice, you work *with* them to get them what *they* want and need."

Oh I didn't know we were talking about 3rd party client specifications? OK so if you're client is a Mac user, you'll happily use Cocoa?

"Plus, in what way does working with Objective-C and Cocoa *not* lock you into OS X? Yeah, there's some crossover with OpenStep, but OS and Cocoa really are two different worlds despite their similarities. "

Well there's GnuStep or Cocotron, but then I'd be making the same BS argument as you with Mono. OSX isn't a platform I want to get out of. Windows IS. If development with Cocoa locks me to OSX then I don't mind one bit. It's a superior OS.

"Seriously - more hypocrisy. With .Net, you can code for Windows *and* *nix with Mono, and that includes OS X. "

GnuStep, Cocotron, oh wait it's that argument again....seriously what would you do without Mono?

"Think before you write. Your smug attitude combined with your lack of thinking this through is just crap. "

Try looking into the mirror sometime.

"Here we go again... .Net provides the exact same ease for dealing with things like preferences. In fact, *far more* sophistication in personalization is possible with .Net right out of the box. Again, it's really, really, *really* obvious that you've done very little with .Net. "

OK so create a .Net app and try adding (in code) some keys to the registry - oh that's right. You can't.

"1. Who gives a fuck? There are *always* dependencies for *any* app written for *any* platform. Unless you're connecting to the net with a 28.8 modem, this is a total non-issue. "

Anyone who's ever tried to use a small .net app only to be told they need to update the runtime. And update it again for all the security issues.

"2. Window ships with the runtimes. Yeah, you have to upgrade sometimes, but what's the big deal? Seriously. The user generally doesn't have to worry about it. There are ways to check to see if the required version is installed, and if it isn't, you just help the user out - it's *not* a problem. "

Windows users put up with soooo much shit and here you are, telling them to 'deal with it'. Cocoa app - drag to the HD. Done.

"And you're talking about how easy it is with OS X and blah blah blah, but, yeah, you don't have to download as many updates, but you *do* have to get the OS in the first place. "

Erm...what?

"Also, what about the users who're on Intel Macs who try to run older binaries? A lot of software just won't run, and a lot that does is packed with problems. "

As Wikipedia says, citation needed. Can you name some PPCs apps that arn't low-level drives that don't run on Intel?

"You can still run DOS apps if you want to with Windows, but when it comes to some OS X software that was just written in the past few years, there's a lot that simply WILL NOT WORK. "

And this is precisely the reason Windows is in the mess it is today. Backwards compatibility is Microsoft's ball and chain. Mac users are generally very good at keeping their systems updated. Forcing people to use the latest OS for the latest software is a GOOD THING.

"It's maddening how preachy you are, but how little you know. "

Hypocrite.

"And Windows is "bursting with high-quality apps" - what's your point? And who cares what technology is behind it? Users sure as hell don't. They just want their apps - they don't have the slightest concern for what language/platform was used to create them. "

Ok so where's the Windows version of Delicious Library, or Final Cut, or iMovie, or Pixelmator? Window's is 'bursting with high quality apps'? hahaha!!!!

"Dude... "bloated" has become so irrelevant. If you're a dev, then what does it matter? I can fire up VS.Net inside Parallels and use it without a problem - zero noticeable performance impact. It just doesn't matter. "

It does when you have to wait 5 mins for VisualStudio to actually startup.

"And, to get Cocoa, you have to pay the Apple tax. The machinery is more expensive, so how "free is it, really? "

Oh god...

"You also get what you pay for."

Yep. You're right about that.

"Plus, nobody's forcing Windows devs to use VS. There are free alternatives. Microsoft offers its Express line of IDEs at no charge. Yeah, they're "crippled" compared to full-blown VS, but they're still amazing products. If you want to use something else, though, you're welcome to do so. "

They're great, until you want to develop commercial software. I assume you actually read the EULA? That bit about educational software and 'shareware' development only?

"You are in absolutely no way tied to VS when developing for Windows."

Haha