This post isn’t about carpentry, it’s about Apple.
A bad carpenter blames his tools.
A good carpenter blames his tools, but for different reasons.
A bad carpenter will blame his tools uncritically when he can’t achieve the end effect that he desires, because he lacks the skill, the know-how and the wherewithal to produce the desired outcome. His frustration with the tool is borne of inexperience.
A good carpenter blames his tools with a sensibility and criticism not available to an unskilled initiate because he sees the inefficiencies in them, because he can produce the outcome he desires but may have to jump through hoops to get there, he blames the saw for ruining a perfectly good cut because it snagged in the last two inches and he most likely knows why it snagged and how to stop it happening again. His blame is a criticism of the essential qualities of the tool, not the tool itself.
I have frequent conversations with people about carpentry and they often want to know which brand of carpentry tools I prefer, or what particular tools I used to create something. These are people who are not carpenters themselves. They worry about the non-essential details, “Was that a Craftsman hammer you used or a Wilton brand?”
Tear down all barriers to carpentry tools. Give a large collection of extremely high quality carpentry tools to a number of people, running the gamut from utterly inexperienced to highly experienced. There’s no barrier to entry, only the desire to create something.
What do you get?
A whole lot of wood shavings and one or two masterpiece pieces of furniture. Maybe even a few craftsman houses. But only from those experienced enough to create them.
Now put up an artificial barrier, the tools are hard to use, their expensive, and only available to people who are willing to put in years of time and dedication in learning them before they are permitted to make anything.
What do you get?
A very small amount of people willing to commit to creating anything.
Ignoring the economics of production, labour demand and all of the other things, what you have now is a scarcity economy where only the most dedicated will create anything, willing to jump through artificial hoops to produce anything. Only the most well heeled can afford to pay the prices for carpentry.
When I am at parties and gatherings not frequented by game developers, the people I meet and converse with often ask what language I write my games in, as though the choice of C++, or assembler, or Python or even Visual BASIC, i.e. the tools I use, has any bearing on the quality of the work I am capable of producing. I’ve put in the time, I’ve learned my craft, give me the means to production, and whatever the tools at hand, I will produce something.
These people asking the question, whilst interested in what I do, don’t really understand the question they are asking. They are so out of touch with software development and video game production I might as well lie to them because they wouldn’t know any different.
I don’t worry about the brand of pots and pans that a chef friend of mine uses in his restaurant kitchen because whilst I dabble in the culinary arts, what he does and at the level he does it, I cannot even grasp. His years of training and work experience have taught him, in a way akin to osmosis, about how chemistry works and combines in the human mouth and nose to produce an entire experience. The same goes for me when I write code. I know how all of the parts fit together in the big picture, the individual statements in a function or the functions in a module are immaterial to the process of writing software, most of the time.
When Steve Jobs states that applications or games written in anything but Objective-C or C++ produces crap, it only shows just how out of touch he actually is with the whole world of software development.
It makes me cringe to hear it, that someone purportedly so tech savvy could be so ignorant. Put him in the same category of people at the party wondering if I use C++ to write my games. The answer is “No, I use whatever gets the job done. The tool is irrelevant.”
The problem doesn’t stem from the tool. The problem begins with the easy access by inexperienced carpenters banging ugly holes in the wall with a sledgehammer or making off-square cuts because they haven’t yet learnt their trade. They’re jumping in feet first, creating bad applications and games in whatever tools at hand, not because the tools that they use are bad, but because the barriers to entry of acquiring those tools are low and the barrier to putting it out there in front of the public even lower.
When the tools are easy to use, people will create, even if they create utter rubbish. When the tools are hard, sometimes artificially so and sometimes because the maker of the tool was not particularly clever and sometimes because the maker of the tool was too damn clever, the craftsman will often spend years honing his skills before he produces anything worthwhile and worthy of charging for or that people are willing to pay for.
We’re not seeing bad work from bad tools, we’re seeing bad work from bad workmanship. Putting in an artificial barrier such as only creating in C++ or Obective-C isn’t going to stop this because artificial barriers never succeed.
Disclaimer: I do not condone stealing software (creators have got to eat), I figured that in this case, it was fair use and I was grateful to a friend for pointing me in the right direction.
Last week I was able to download a torrent of thousands of iPhone and iPad games. Many more than I needed for my sample. After removing duplicates, i.e. the iPad release and the iPhone release of the same game, and also removing all games prior to August 2008. After a few hours of tinkering with Perl I had a script that could scan each of the apps and look for sequences of bytes that would identify what software was used to produce the game.
Number of Games
Percentage of Games
Pure C++ or Objective-C
Flash, Titanium, etc
Non-C++/Objective-C framework, i.e. I don’t know what it is, but it’s not C++
|Total Games Sampled|
Many of the games that are not pure C++ or Objective-C have been huge hits, selling many tens of thousands of copies. These aren’t exceptions to the rule, they are the norm. Games that I consider to be total dross that couldn’t have taken more than a few weeks are coded up in Objective-C or C++ and nothing else. Games that are top ten hits created in Flash or in Lua on top of a usually quite small C++ game engine.
Need For Speed Shift? Pure C++? Nope.
Mirror’s Edge? Pure C++? Nope.
Baseball Superstars 2010? Pure C++? Not even close.
Civ Revolutions? Pure C++? Don’t make me laugh.
Monkey Island 2? Pure C++? In your dreams.
I have sat on the fence about writing this post for a long time, ever since the 3.3.1 debacle.
Frankly, this entire Apple broohaha is just sabre rattling on their part. If Apple really wanted to fix it, they would create a more stringent submission process that actually tested for things like quality and playability, much like SONY or Microsoft or Nintendo do on their platforms.
But of course, they don’t, and they won’t, because having a quarter of a million applications in your online store gives you a certain buzz when comparing the size of your wang against everybody else’s.