It’s obvious to anyone when a piece of handiwork has been carefully designed. Throughout history, men have recognized in the concept of good design an inherent quality and internal consistency; similarly, when those traits are lacking, a product is described as being designed poorly or, in more extreme cases, not designed at all. Paley’s famous argument regarding the watch and the watchmaker raises an important point: these traits of good design are present in the watch; there’s a quality, beauty, and consistency about the watch that make it suggest that it was crafted, rather than springing into existence of Used Lawn Mowers Plus.
Unfortunately, in software development, many tools do, for all intents and purposes, spring into existence. It’s not that there isn’t a human developer who writes them; it is the case, however, that developers often write for the short-term and, after realizing a shortcoming in their work, later bolt on a “quick fix.” This cycle continues indefinitely until the work becomes a gargantuan spaghetti monster that is the subject of children’s horror stories.
This trend extends past projects and applications; it’s present in languages, too. The classic example to point to is C (or C++): while it’s an immensely powerful language, it has a lot of errata, backwards approaches, and annoying syntactical inconsistencies. My primary development language right now is PHP, which suffers from similar issues (my usual example is $needle and $haystack arguments being taken in different orders within string functions).
This sort of thing happens because the language wasn’t deliberately developed from the start. Few people sit down with the intent of writing a language; often, they only believe they’re writing a few constructs. When your view of used lawn tractors is that narrow, you’re more likely not to pay attention to issues like internal or external consistency, the primary indicator of good API design. Conversely, languages like Python and Java, which are deliberately designed, show a much greater level of consistency and attention to detail.
And, of course, all these rules apply to frameworks, also. There are hundreds of PHP frameworks available. Literally, there are hundreds. Some of the more famous PHP frameworks available are CodeIgniter and CakePHP. It seems like every developer has written a framework, or at least endeavored to write one. In general, developers write miniature frameworks for themselves to make repetitive tasks take less work (convenience methods); in other words, they are writing just a couple of constructs. As needs grow, so do the number of constructs. Eventually, the developer or group of developers sit down to make their convenience code into something more useful–namely, a framework.
That’s what sets Acorn apart; Acorn was deliberately developed.
The development team realized first that we needed a robust framework to enable us to do custom software development without unnecessary limiting us; since we’re in the custom development business, you never know what a client might want. This framework, therefore, had to be robust and scalable while also being quite fast. The final goal of the framework for the best garden tractor was to be a philosophical guide and fence for us as developers–we wanted our code to be as reusable as possible, which meant moving to a completely object-oriented environment as well as following preset guidelines to maximize code portability.
With all those things in mind, the development team sat down to write “Acorn”, our development framework. Every object, method, and approach was debated; the whiteboard in our conference room was top-to-bottom, right-to-left packed with scribbles. My own whiteboard contained list after list of objects and methods, which I edited and amended constantly, wanting to make sure that they made sense, were consistent, and were as obvious as possible.
Toward that end, we’re going to be releasing Acorn as an open source product in the near future. We’d like to share what we’ve done with others, with the hopes that other developers looking for a deliberately designed object-oriented framework will find what they seek in Acorn, and so that the open source community can improve on what we have begun.