There is a certain state of mind, a certain transient condition that arises, where everything seems to resonate and effort becomes effortless. Athletes call it being in the zone, some others call it flow. Flow has nothing to do with triumph or accomplishment; it isn’t the product of your labors. Flow is the merging of a watchmaker and his watch or an artist and her paints.
The dot com bust was a confusing time for web development, but rising from the burst dreams of instant wealth, something strange and exciting happened. The web development community as a whole reached a kind of flow. In a world filled with duct-tape solutions and proprietary formats, suddenly web developers were clamoring for standards compliance, for elegance and simplicity. And it wasn’t just to fend off browser compatibility issues, but because the code looked beautiful.
Through the fits and starts, the competing ideas, and the explosion of development frameworks that followed, an identity began to emerge. This identity is as much a philosophical statement about what the web could be as it is a technical one about how to accomplish those goals. This identity is still emerging, and there are still many problems to be solved, but one thing is now certain: web application development has come of age as a rich discipline of programming that stands up on its own.
Ruby on Rails is just one part of this much larger story taking place, but in many ways it is the symbol of this coming of age. Rails challenged the web development community to rethink what it meant to build a web application. It provided an entire application ecosystem when most developers were embedding their code inside HTML files. It made unit testing not only easy, but cool, at a time when debugging web applications was, at best, a black art. It introduced a new generation of web developers to the ideas of meta-programming and domain-specific languages. And most of all, it found the voice of the change that was taking place: that the web provides a natural and elegant architecture on which to write applications if only we can create the right metaphors to harness it.