[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.