Sunday, May 6, 2012

An IDEAL development environment

I've spent a good part of my life thinking about software tools, and the last four months doing a deep dive into the new generation of web tools. And I think I know what I want to build. So here goes.

First: I want to start with the smallest core I can.
Second: I want to be able to build all extensions using the tools themselves.
Third: I want to have the tools mange the process of extension building. That is, I want to be able to describe a unit of work (which may involve changes to various parts of the code base) in one place; that one place will include relevant documentation, as well as code. It will also include tests and other metadata as I figure it out.

After surveying the field I've made the following design decisions:

  • The UI will be browser-based
  • The development framework will be built on Brunch, which includes
    • NodeJS
      • Which includes NPM
    • Coffeescript
    • Backbone, which includes
      • Express
      • Underscore
      • LESS/SASS/Stylus
      • Jade/eco/Handlebars/mustache
    • JQuery and JQueryUI
Why this combination? As we'll see, it provides a framework that support some important ideas that I have about programming. I want:
  • A simple client/server architecture with an easy way to change both sides. NodeJS gives me that
  • An expressive notation for my code that makes it easy for me to create Domain Specific Languages for my tasks. Coffee does that
  • Simple, expressive notation for markup with jade or  Source HTML clutters my screen (and my mind) with unnecessary characters and constructs.  Jade/eco/Handlebars/mustache handle that.
  • Simple, expressive notation for presentation style. CSS is great but it clutters my screen. LESS/SASS/Stylus get around that 
  • A sensible predetermined directory structure for my application. Brunch does that