Whenever I come across a new toolkit, find it's feature list appealing, and starting looking deeper at the documentation, I have a dream of what I want it to be. Interestingly, the dream is almost always the same regardless of what domain the toolkit addresses - mobile development, video game programming, video editing, etc. And it's so rare that they live up to that dream.
The dream is of an ideal, where the kit is mature and stable, has a huge user base and online collaboration community, and most of all solves it's problem well enough so that with a little learning I can be very productive and even creative.
The first speed bump I usually see is a fragmentation of the fundamental concepts of the toolkit. A master painter is able to visualize the entire painting before he begins. As he works through the layers of the concept, he adds part by part with a steadiness free from the obscurations of rethinking the design or understanding the product. A inexperienced viewer can immediately take the painting in all at once, because the paining is a coherent and elegant expression of the unaltered original concept. Someone who is less than the master produces work that is more fragmented and takes more effort on the part of the viewer to take it in and understand it.
I admit that I am an idealist and perfectionist, but with software the signs of fragmentation are immediately apparent. How easy is it to download install? Does the editor crash? Does it build, run, and deploy without any trouble? How hard is it to learn and perform simple tasks? Does it really run everywhere? Above all, is it possible to be creative with it?
Incredible, dream toolkits:
- emacs; just because it is
- Ableton Live; because it's original ideal is still clear at version 9, and it's easy to be totally creative.
- Max (Msp) For Live: because the concept is extremely clear, and it's easy to be creative.
- Titanium Appcelerator; because it is easy to learn, builds, runs, and debugs very fast.
- Unity3D; because it runs everywhere and is tons of fun to use.