Friday, March 19, 2010

So much to do with such constrained resources

Well, first things first, Crab Crawl 1.0 is now available in the iTunes app store!

 

So what next?  That brings me to my point.  I am just one person, with a full-time job which takes the bulk of my day.  But I have tons of ideas / desires, and not enough time to see them all through.

Aside from any ideas I have, I’ve got to make sure that I’m keeping my existing apps up-to-date.  That’s an issue I didn’t properly anticipate.  The more apps I create, the more maintenance I have to do.  From a business perspective, it doesn’t make sense to spend much effort updating apps unless they generate a significant amount of revenue, but I still feel compelled to continue to add cool stuff for the customers who support me.  (I had to try really hard to avoid sounding markety-businessy there.)

Beyond that, what should I do next?  Another iPhone game?  That’s my current plan.  But what about the iPad?  It’s had some impressive preorders already and it has a lot of potential.  I could create a game on it, sure, but there are other interesting applications I can envision.

And then, of course, there’s this little thing called the Windows Phone 7 Series.  My knee-jerk reaction is to stay far, far away from any Microsoft phone.  I bought one before, after all – a fancy HTC smartphone with features that put the iPhone to shame.  But Windows Mobile killed my soul.  It was every negative stereotype about Microsoft rolled into a single device.  Slow, cumbersome, annoying, with an OS that felt like it was ported from a desktop version. 

So now, finally, Windows Mobile 7 – er, wait, Windows Phone 7 Series – is on the horizon.  The developer tools are available.  It looks slick and streamlined; more like the Zune (which is good) than a desktop OS (which shouldn’t be on a phone).  But it’s Microsoft, and they know how to take a good thing and screw it up.  I don’t believe I have any unwarranted bias against Microsoft, though.  I want them to succeed, desperately, because I want to use their far superior development tools, and their less-closed platform.  I’ve even gotten over my troubles with the long, Microsoft-esque name: “Windows Phone 7 Series”.  I can write it off as foresight on MS’s part.  (Assuming all goes as planned, we’ll just be calling these things “Windows Phones” and we’ll just tack on a number / designation for whatever the latest version is.)

But it’s so risky to leap to the Windows Phone, and admittedly it’d be a bit soul crushing to come crawling back to Windows after I invested almost 2 years in the iPhone platform.  But if I had a magical guarantee that the Windows Phone was going to have identical marketshare as the iPhone, you better believe I’d jump on it.

Tuesday, March 16, 2010

GDC Notes Day 1 Part 2

SCRAP METAL: Pushing the Envelope With a Team of Two

Scrap Metal (top down 3D racing game with nice visuals / lighting / etc.) developer talked about his experiences working on scrap metal.  They attempted to write the game using C# / XNA but the performance was “terrible”, they claimed.  It’s a shame that they didn’t dive deeper into the causes of these perf issues.  I’d be really curious to know if managed code optimizations would have fixed this.  Anyway, they switched to C++.

They made a physics engine specific to the game and their general sentiment was that using a one-size-fits-all physics engine “took away the personality” of the game. 

They focused a lot on tools which verified game assets (and even behaviors) in real-time.  Changing AI behaviors, shaders, and even car physics and testing in real time.

They really stressed iteration, focusing on a basic mechanic and creating “vertical slices” and iterating on them.  They said that 80% of the art in the game was created in the last 3 months; it took a long time to get the game to “feel” right.

From Big Studio to Small Indie: Guerilla Tactics from Hello Games (Sean Murray):

(Sadly, my notes became exceptionally crappy as the day went on, so here’s my summary)

- They used an application called Procrastitracker which runs on your PC and tells you how much time you spend doing each activity on your computer, so you get a good idea about how much time is wasted.

- They were very data-driven… I have no idea what this means exactly but I just wrote “very data-driven”, so apparently their game was written in a data-driven way, following the theme of cutting the time needed to test changes.  I am personally horribly lazy, and will all-too-often gladly wait the long time necessary to test changes.

Ugh, worst blog entry ever.  I think I’ll just post highlights from talks I liked rather than pretending to offer full coverage of all the talks I attended.

Tuesday, March 9, 2010

GDC Day 1 (part 1)

Today was spent divided between the Independent Games Summit and the new iPhone Games Summit.  I’m going to summarize my short notes from the talks today, though I’m pretty tired.  It’s rare for me to be tired at this hour, but it always happens when I’m on vacation and have to walk any significant amount.  I think this is what’s called “normal”.

Indies and Publishers: Fixing a System That Never Worked

Traditionally, when indies get money from publishers, publishers give much more than they need, and as a result expect more of the reward.  Back then, publishers controlled distribution as well, so there was an expectation that they were owed more.  But realistically, indies need less and can handle distribution on their own through various services like Steam, XBLA, Direct2Drive, etc.  As a result, something called The Indie Fund has been created to fund promising indie projects.  contact@indie-fund.com

Abusing Your Players Just For Fun

I thought this would be a tongue-in-cheek title, and assumed the talk would be about ways to present interesting challenges to the player.  But no, this talk was pretty much exactly as the title implied; no deeper meaning whatsoever.  The presenter just presented various Hollywood directors and game makers who make wacky, nonsensical movies, plus some he just thought were cool.  His slides were gratuitously seizure-inducing, with flashy backgrounds just for the heck of it, following his overall theme. 

He showed an example of a mercilessly punishing modded Super Mario Brothers level which essentially breaks all the game design lessons we learned over the past 20 years.  He unapologetically talked about the fun of punishing players and not caring about them, but rather just enjoying watching them suffer.

 

I’ll continue this later.  I need to sleep.

Monday, March 8, 2010

GDC 2010 so far

Well, I was a tiny bit sad to be arriving at GDC on the first day, after all the keynotes had finished, but my pass doesn’t include keynotes so it wouldn’t really matter anyway.

Then, come to find out, despite swearing I had seen GDC listed repeatedly on its website as spanning March 8-13, I suddenly saw listings of March 9-13 everywhere.  Apparently the conference does not in fact start on Monday, but Tuesday.  So I didn’t miss anything.  Though one annoyance was that registration, which I assumed would be open all day, didn’t start until 5pm, so I had to wait for that for an hour and a half.

Also, though I was certain that there were several keynotes, the “Keynotes” link at the GDC 2010 home page only leads to a single keynote, by Sid Meier, on Friday (the day I leave).  So… somehow, despite my intense diligence, I was completely wrong about everything.  It’s like elementary school all over again.

So now I’m in my hotel room, unsure if there’s any sort of party or anything going on that I should attend.  I certainly didn’t hear or read about any.

GDC 2010, here I come

I’m at the airport, waiting for my flight to San Francisco and GDC 2010.  I always plan on blogging / photographing everything and it never works out, so I won’t make any promises this time, but I’d at least like to highlight the stuff I care about.

I’ve only been to GDC once before, in ‘07, and my company footed the bill then.  This time I’m paying for it all myself, which is quite a commitment but it’s sort of my way of telling myself that I’m committed.

Sunday, March 7, 2010

I don’t like to admit that I like to say “I told you so”, but…

http://www.creature24.com/2010/03/well-that-was-a-trip/

There’s no easy way to say this but we’ve come to the realization as a team that we need more time to implement all the content that we have for this title, as you can see from the screenshots down below we did set ourselves a quite a tough challenge on this project, however we do want to stress the game will be finished and finished soon.

Monday, March 1, 2010

24 hours from iPhone game idea to submission to the app store?

Creature24
An iPhone/iPod touch game made by 3 guys in just 24 hours!

Yes, you read that right! 3 guys… 24 hours.

Starting with just a skeleton idea; the three of us will implement a complete game from nothing, to full submission to the AppStore within 24 hours.

The fun begins on Saturday, March 6th at 9:00am EST.

Okay, I’m all for game jams, and I like to be encouraging of people’s creative ideas, but this is stretching it.  It takes an hour at least to just prepare your app for submission.  I’d hate to see the type of game that can realistically be completed in 24 hours.  And somehow they’re going to make time to blog their experiences?

We’ll see.

Sunday, January 31, 2010

Reflections from Global Game Jam 2010

I posted a characteristically long blog entry via my account at globalgamejam.org, which I will repost here:


I've survived the Global Game Jam, and my team created something resembling a game. To say that I'm happy with it or proud of it would be untrue, unfortunately. It's hard not to look back at all the things that could have been but weren't, or imagine what could have been added if only we had slightly more time.

In the end, we created an espresso stand themed mini-game, essentially. Was it innovative? Not really. Was it fun? Not in its 48-hour state, but there was potential at least. Was it the game I dreamed of making during the months preceding the Jam? No. Why? What went wrong? I will try to address these questions in a way that won't spiral into hopeless negativity.

My first blog entry listed the lessons I learned from my last Game Jam. I want to revisit them to see how well I did, and then see what new lessons I learned from this one:

* Find a team you mesh well with.

My teammates were cool people, but it was clear that we had very different goals and very different sets of experience. Dwelling on this will only sound like blaming, but suffice it to say I didn't do a good job here.

* Use source control.

We had an SVN server up and running pretty quickly, and this saved us. I don't even want to think about the challenges we would have faced otherwise.

* Scale scale scale

Our overall game idea was indeed very straightforward, but we aimed for far too many embellishments than we should have for a 48-hour game. Probably half of the time was spent creating/working with content in some form, rather than coding actual essential gameplay logic. Because of this, we ultimately had to cut key features of the game.

* Throw solid coding practices to the wayside

I feel we reached a really good balance here. Our code was structured in a fairly logical way but with some corners cut for the sake of time (for example, avoiding unnecessary future-proofness by hardcoding logic which assumes two players).

The lessons I learned from this Jam were mostly rehashes/reinforcements of the previous lessons:

* Find a team that you mesh well with, part 2: I had been excitedly anticipating this event for months in advance, and all my friends knew because I talked about it constantly. Naturally I arrived early, brought tons of supplies/food/drinks with me, set up my laptop with source control, etc. ahead of time. I should have immediately seeked out other developers who shared the same passion. And remember, you are inevitably going to have to compromise on a design idea. So find people who have design goals as close as possible to yours (e.g. don't group with someone who is passionate about Myth-esque puzzle games if you really want to make a retro shooter)

Speaking of design, I might get flak for saying this, but for a 48-hour game, a designer with little or no programming experience is dead space unless they're also an artist. Everyone is a designer. Everyone has ideas. Yes, there are good designers and there are horrible designers. But even a great designer who does nothing but design is not worth it on a 48-hour game. More likely than not, a dedicated designer will only increase the scope of the game by dreaming up infeasible features, causing friction with the developers who actually have to [dare I say] do the work.

If you're lucky, you'll find a programmer who is already good-enough at art. The artistic bar is not exactly high for a 48 hour game, so "good-enough" is all you need. A dedicated, exceptional artist is a great asset as well though, because it's often the aesthetics that really boost the appeal of games of this scope.

I didn't mention sound designers, because again, the scope of the game is so small that sound is often an afterthought, but they can be a great addition if you can afford the opportunity cost.

* Scale scale scale, part 2: Your design should be iterative even for a 48 hour game, but a crucial point is that this design should start extremely simple. Find a core mechanic, keep the mechanic DEAD SIMPLE, and if you have time, iterate on it. Here's a counter-example of what I mean:

For our espresso game, "Cheap Shots", the original plan was to have players create different drinks by pressing buttons in a particular sequence on an Xbox controller. So, one drink might be A, B, B, X and another might be X, Y, A, B (the buttons were supposedly associated with different ingredients). Before we had even completed implementing this basic mechanic, we began dreaming up new ways to add ingredients; for example, holding the trigger and releasing it at a particular time might be associated with steaming milk, or turning the thumbstick on the controller might be associated with stirring the drink. This was a mistake from the start. I ended up spending precious amounts of coding time trying to implement these special case scenarios (keep in mind they all required additional UI assets as well), while core gameplay mechanics were being neglected (score board, game timer, essential UI elements, etc.)

Further, we spent what felt like half of our time dealing with mountains of sound assets that were completely non-essential to the gameplay. These were the types of niceties that could be added after the fact, when the core gameplay was done.

So, in short, it's not just the game that needs to be simple; the core mechanic needs to start dead-simple and optionally build from there after you have a complete gameplay experience.

Here are some additional lessons I learned, though some are minor:

* Make sure that your working environment is comfortable.

DigiPen was great. There was an active work environment with plenty of space. But when you're working for 48 hours almost nonstop, even the minor things can become major annoyances. I was foolish enough to position myself in the middle of a long table, separated enough from my team that any time they called me over, I needed to practically climb over my table or else squeeze by several people to get to them. After the 25th time having to do this, I was ready to relocate.

Also, make sure you have the best setup you can get; a large monitor, comfortable mouse, etc.

As soon as you sense an annoyance, fix it, or it'll be a thorn in your side for the next 48 hours.

* Time is precious; don't waste it.

Yes, I know, this is obvious. My point isn't about goofing off excessively or being lazy. If you're inclined to do that at a game jam, you're probably not passionate enough for it to begin with. I'm talking about other time wasters. For example, you don't need to notify your team about every single change that doesn't affect them, show them every cool thing you added, or ask them questions that you can easily find the answer to yourself (i.e. "Where is X defined in the code?"; there's a search function for that). Remember, assuming you picked a good team, their time is every bit as valuable as yours. Every time you interrupt them in the middle of coding, you break their concentration. You force a "context switch", and it takes them time to regain their focus. Don't have needless conversations in which you explain at length how you intend to implement something; just do it. And similarly, don't explain at length how someone elsemight possibly implement something, unless they are requesting your help or are working on a shared component. They could be using that time to actually implement rather than discussing it.

In the off chance that anyone actually read through this in its entirety, I hope it provides some value.

Sunday, January 17, 2010

Indie game developer YouTube/Vimeo channels

I think that blog posts would be a horrible place to store reference material if not for the indexing power of search engines.  So with that, I am going to compile a list of independent game development teams who post videos of their progress on YouTube or Vimeo.

(Last updated: 1/23/2010)

Adventures In Game Development / Elysian Shadows

Fireravens Unlimited

JForce Games

phantasqProductions

Amateur Game Development

I find these really interesting.  The team members vary in age from early teen to around college-aged and slightly beyond (which admittedly makes me feel old), and I love seeing the process they go through, the lessons learned, etc.  You’ll see a lot of common themes: over-confidence and optimism initially, drama amongst team members, loss of motivation, major design changes / scaleback, and other issues typical of any software development team.

Monday, January 11, 2010

The State of Middle Brain Software

Admittedly, it’s been a long time since our last update.  I will try to be brief regarding our status:

The Bad

  • As you can tell, our first project, an XNA Game Studio game, made a slight amount of progress and then, like so many others, died.  We have no plans to resurrect it, and even if we did, it would likely be on a different platform.
  • Our second project, the iPhone game, also failed to get far off the ground.  I blame myself for taking on a project that was too challenging for someone just beginning with iPhone development.

The Good

  • I continued to train myself in iPhone development over the past year, and Dave and I actually released a cartoon-photo-editing app called PhotoToons

It’s a fun app that I’m excited to continue updating with new stamps and features.  Most of the stamps were created by your favorite artist and mine, Dave Johnson.  You can look forward to continued releases in the coming months.

  • We also released an iPhone app for Dave’s podcast (The Dave and Steve Show), called Dave and Steve’s Droppings.  It was remarkable how much faster the development process went compared to PhotoToons thanks to the learning hurdles I had since overcome.

63d0711453425042.jpg Dave and Steves Droppings (entertainment)


The Present and Future

Oddly enough, my previous post discussed the necessity of me learning OpenGL ES in order to create a game with reasonable performance.  Well, over a year later, I’ve become far more competent with the technology, and have surrounded myself with resources (both text-based and meat-based) that have become invaluable in the past couple months.  More importantly, I’m making a conscious effort to ween myself of the “it’s too difficult, don’t bother” mindset. 

Given this, I’ve been hard at work on a 2D game and engine.  I want to start with something feasible and simple as a learning project.  One potential application Dave and I have discussed is a mini-game incorporated into the Dave and Steve’s Droppings app.

Stay tuned to see what becomes of our efforts!  If nothing else, you can laugh if the next post arrives a year from now.

Wednesday, October 8, 2008

OpenGL ES

After seeing the multitude of AppStore games which undoubtedly use OpenGL ES instead of my hacky method of what amounts to UI controls as sprites, I've decided to bite the bullet and switch to using OpenGL ES for the game.

This of course means that I will spend weeks more doing research, learning how utterly crappy the APIs are (not to mention the utter lack of thorough documentation) compared to XNA Game Studio and wishing I didn't have to put up with this just to target a popular platform. Changes to the game will be virtually non-existent if not backwards for a while. I am crossing my fingers that I'll be able to work on an XNA Game Studio project simultaneously in order to keep my spirits up.

That's right, folks. C#/Visual Studio/XNA Game Studio is so much more pleasant to work with that I'd rather work on two projects at the same time than suffer with just one for the iPhone.

Sunday, September 28, 2008

Latest gameplay video, at the cost of boring dev details

If you want to skip boring details about my struggles, skip to the video at the bottom of this post.


I've at least found a good temporary solution for the landscape issues, and I've been progressing with learning Objective-C / Cocoa / UIKit / etc. but not to the point at which I can concretely delineate between each of these terms. I'm also struggling a bit but getting the hang of several things.

I finally installed a third-party mouse configuration software so that I can get more than a kindergarten level of control over my mouse sensitivity.

I'm getting the hang of the MacOS app launching model, the dock bar and how it represents running versus non-running programs, the "Finder" file browser and its quirks.

XCode is like Visual Studio lite, or perhaps "Visual Studio Gimped". I've chatted endlessly on IRC with people who gladly praise XCode over Visual Studio, but I wonder if they've used VS2005 or greater. It's just no comparison; there are redundant windows/panels everywhere, the debugger runs in a separate tiny window, though you can resize it, covering your other windows. The expression watcher is nowhere near as powerful as Visual Studio's, and Intellisense (or its equivalent) is weaker in its implementation, requiring more keystrokes for simple tasks.

Speaking of the tiny debugger window (obviously resizable), this is a common observation with MacOS. It seems the norm to be expected to manually drag windows around and place them as you need them; stretching them to just the right extents, etc. In Windows my usual mode of operation is to only do that when I'm copying files from one explorer window to another. When I'm running apps, I generally switch to the app, then maximize the window if it isn't already maximized. Windows seems to work well with users who are used to this behavior. MacOS doesn't seem to be expecting it; hence, I'll find that apps have lots of little "helper" windows that are expected to be resized to comfortable dimensions for the particular user at that particular time. This is not how I want my apps to work. Visual Studio supports this, but also a very extensive docking scheme so I can have all my windows docked where I want them instead of floating about in the ether, always getting in the way of content behind them, or else getting hidden themselves when I click somewhere else.

Again I find it ironic that so much of what makes the iPhone dominant over Windows Mobile is the same that makes Visual Studio dominant over XCode and the general Mac development situation. Of course, I am trying very hard not to bias my arguments with my existing familiarity with Visual Studio. There's still much more to learn.

Other factors which add major hurdles include simple things like the feel of the keyboard. It's no longer Ctrl-C, it's Command-C, etc., not to mention completely different dev environment hotkeys. And on my particular keyboard, the Esc and F-keys are tiny.

I finally bit the bullet and sacrificed dual-monitors on my PC in order to have a dedicated monitor with a DVI input from my Mac. I also switched placement of my keyboards/mice so that my Mac is in my primary workspace on my desk, and my PC is riding shotgun. This will encourage me to give my Mac some more love.

If you've read this far, your reward is a video of the app in its current state, run through the iPhone simulator. Long story short, I need to go through a long, painful process to enable deployment to my iPhone ever since switching Macs.

Saturday, September 27, 2008

F#$king Landscape mode

I have spent the vast majority of my coding time on this project trying to get the damn iPhone to properly handle content created for a Landscape-only orientation.  I never realized how much easier life would be if I was a good boy and just kept everything in Portrait mode.

I heard rumors that the 2.2 SDK (currently 2.1) will include a fix for the landscape-mode hackery that exists now, and hopefully this will prevent me from needing to create a transform and do some sort of wild, seemingly arbitrary calculation to find the center point of my view (used in the aforementioned transform).

This really is insane.  I don't know how people say they've been able to get apps going in like 10 days.  Actually I do know why: they weren't creating apps in landscape mode.

Sunday, September 7, 2008

Vacation...

I know you've all been wondering why I haven't updated in a while. There are two reasons: 1) I haven't had a Mac available for iPhone development since August 28th or so, and 2) I'm on vacation right now in Disney World, returning September 10th.

I'm having an awesome time but it'll be really nice to be home and back to my geeky endeavors.

Wednesday, August 27, 2008

iPhone development delayed, Xbox development proceeding

So my Dell notebook was supposed to be repaired by an on-site technician, but they failed to fix the problem and now I've got to send my laptop in for repairs, and I won't get it back until several days from now, at which time I'll be on vacation.

I have been considering purchasing a cheap Mac mini to use as my dev machine in order to avoid the issue of having to borrow my girlfriend's MacBook and also to give myself more screen real-estate.  So far I'm holding off, and instead will just focus on the XNA GS version of the game until I can get my Dell back (and swap with the gf).

One issue I'll have to solve with the Xbox version of the game is how to support different video resolutions in the easiest way possible without sacrificing quality for hi-def players.

Sunday, August 24, 2008

Another bit of art.

Here is another small bit of art:



I also created the game logo tonight, but we're not quite ready to reveal the name of the game just yet, so I'll save the art and show it to you one day in the not-too-distant future.

Saturday, August 23, 2008

Exclusive Game Teaser Video!

Since I won't be needing to take my Dell laptop in for repairs until Tuesday, I've weaseled some more quality time out of my Mac dev environment for the weekend. Still, I'm trying to convince Dave to do a XNA Game Studio version of our game, or barring that, a different (simple) game for that platform.

As I work out the kinks and frustrations with iPhone SDK development with the help of my trusty l33t gaggle of cybergeeks on IRC, the experience gradually becomes more tolerable. If I ever need a break from the stresses of programming, I just open up my XNA Game Studio project and enjoy the pleasures of programming.

And here's another teaser of our game, complete with more information than I should probably reveal:


Friday, August 22, 2008

iPhone development temporarily on hold -- with a good excuse!

I love my Dell XPS m1330 laptop, but ever since I've had it it's had an intermittent problem in which the screen goes blank for no apparent reason.  I tolerated it for a long time, but finally called Dell tech support a few weeks ago since my warranty ends in September and I want to make sure I get a hardware replacement if needed.

Well, naturally Dell did what they could to avoid the hardware replacement option, exhausting every software and firmware option they could think of, but finally I insisted that I get a hardware replacement since my warranty is almost expired. 

What does this have to do with anything?  Well, as I mentioned in my last post, I've been borrowing my girlfriend's MacBook for iPhone development, but what I didn't mention was that she's been borrowing my Dell in return (she's so sweet).  Since I need to take my Dell in for service, I need to give her back the MacBook for now.  It's a blessing in disguise because it gives me the opportunity to plug away on the XNA Game Studio version of our game, which I can develop much more rapidly.  Now I just have to send Dave a new request for art assets.

Oh, and I should have the Dell fixed by Tuesday, so I should have the MacBook back either that day or the next.

Thursday, August 21, 2008

All that fancy Dev talk have you down?

If Mike depressed you with his last post, then I hope the latest shot from the intro will cheer you up!



If that didn't work, then might I suggest perscription drugs?

Microsoft development, I will never forsake you

Warning: The following post was originally posted to a development blog of mine, and is thus heavy on the programming jargon and ranting.  Feel free to ignore for your sanity's sake.

For the past few weeks I've found myself jumping from one shiny project to the next.  I was enticed into trying game development using Silverlight, which I still regard as an exciting technology with lots of potential, but my heart just isn't in it.  If I targetted that platform, I'd be doing so out of pragmatism instead of passion; that is, I know there's a potential market there, but I wouldn't enjoy the work.

My latest flavor-of-the-month project has been game development with the iPhone SDK, whose Kool-Aid I drank in one giant gulp.  The iPhone is amazing.  The interface is slick and intuitive; the app store is exciting and full of great (and not-so-great) apps with a promising revenue model for independent developers, and the development platform is... utter shit.  Without breaking the NDA (I hope), let me just say that just about everything about the iPhone development story is inferior to what Microsoft has to offer.  I don't claim to be an expert after only about a week of experience (albeit with many hours put in), but here are some gripes so far:

1. First, there's the fact that you have to use MacOS to develop for the iPhone.  In my case, I'm borrowing my girlfriend's MacBook.  I would very much prefer to utilize my dual widescreen LCD monitors, but I realize that this complaint is circumstantial.  I'm sure that a savvy Mac user could navigate the MacOS with ease, but it's a struggle for me.  It would be nice if there were a Windows option somehow.

2. Second, I have to use XCode, Apple's free IDE.  I will be fair; for a free IDE, it's packed with decent features, and I can't really compare it to Visual Studio Express (another free IDE) given that the latter benefits from the features of the full versions of Visual Studio.  But it's still a giant step backwards.  The syntax highlighting is overly subtle, the code completion guesses at what you're trying to type but doesn't pop up a list of options (at least not automatically).  I've yet to see a list of method overloads appear; you're at the mercy of your memory and the greatly-inferior-to-MSDN documentation, which lists all of an object's methods/properties in one long list.  There doesn't appear to be any sort of refactoring capability, though I can probably blame the language (which I'll get to soon enough).  The solution explorer equivalent is strikingly un-Apple-like, showing redundant information while lacking important information at a glance.  I've run into bugs in which error and warning markers in the code don't disappear even after you fix the errors. (I even deleted the offending code entirely and rebuilt with no luck). 

3. Objective-C.  Oh my god.  Could Apple have picked a more obscure language?  Why not just stick to C or C++?  The syntax in objective C is unnecessarily arbitrary, with objects calling methods (or more specifically, "sending messages to call a method") of the syntax:

[object methodName]

(including the brackets.)  You can even (and are encouraged to) nest these calls, for optimal confusion:

[object1 methodName:[object2 getSomething:[object3:getSomethingElse]]]

My favorite (sarcasm, in case it wasn't obvious) detail about methods is the parameter passing.  You see, a method signature is defined not by its return type, name, and parameters, but rather just its return type and parameters.  Read that again: Return type and parameters.  Something missing?  That's right, there's NO METHOD NAME.  Or more specifically, the method name IS the parameter list!  So, a hypothetical method to open a file read-only might be:

[FileObject openFile:@"myfile.txt" readOnly:YES]

Or an even better example:

[MySpatialObject setPositionX:100 andY:120]

That's right, I can't have a method called "SetPosition".  Instead, the method is technically called: "setPositionX:andY".  Of course nobody would use the word "and" in a real-world parameter name, right?  GUESS AGAIN, it's encouraged!  Method names are supposed to read like prose.  I am a strong advocate of longer method/parameter names for the sake of readability and avoiding obscurity, but there are much better solutions to this problem than this.

And just as an extra kick in the nads, the standard coding conventions fly in the face of everything that modern, civilized software developers have evolved toward (e.g. curly braces on separate lines for the love of God, curly braces surrounding one-line if statements, non-cryptic class/variable names, etc.)

Oh, did I mention that this language isn't strongly typed?  Enjoy.

4. Interface Builder.  Fine, this relates to XCode, but it's bad enough to deserve its own category.  This is the GUI tool that creates...well, GUIs.  Hell, even Apple devs don't seem to like it.  It's again another ironic example of Apple's dev tools flying in the face of Apple's typical design philosophies.  This tool is completely unintuitive to use as opposed to Visual Studio's designers, involving all sorts of GUI elements that can be connected with lines as a way to graphically "wire up" events and relationships.  So much of what you'd expect (i.e. you click on a control in the visual designer and immediately see a context menu with this control's attributes and event wiring) just doesn't exist.  You have to dig through options to even see these things, and even when you find them, their function is not obvious.  Can the people who designed the iPhone interface please help out designing this tool as well?

---

There is much more to write about the iPhone dev woes but I'll save that for another post.  In general, if you want to know what the iPhone dev environment is like, use an iPhone for a week.  Then use a Windows Mobile phone the next week.  The extra pain you'll feel the second week is analogous to the pain you'll feel switching from the standard Visual Studio/C# environment to the iPhone's.  But at least in Windows Mobile's defense, it does have extra features it's trying to pack in.

 

After working on iPhone development/learning for a few hours today, I worked a bit on my XNA Game Studio project.  It was an almost orgasmic experience.  It felt like the feeling you get right after stepping off a treadmill after a long run.  Suddenly you feel like superman, almost gliding along the floor effortlessly when you walk.