Less Technology - The Ruby and Rails Revolution
Alex Bunardzic
Jooto Inc.
About the presenter (me)
[any material that should appear in print but not on the slide]
Artist, musician, software developer
Zen teacher
Teaching Zen to a group of dedicated Buddhist practitioners
I am clueless
I am pre-emptive
Lessons from one of the Master musicians
The discipline of letting go
"You can accomplish anything if you don't care who takes the credit for it"
Clueless means going with the flow
Pre-emptive mostly applies to assumptions
Curing the symptoms -- but the real cause is always the inflamed sense of Ego
Inflamed Ego is always caused by preconceived notions
So, reaching a clueless state ensures that preconceived notions are not flaring up
Zen practice is only concerned with eliminating the suffering
It is a human-centric discipline
Software development is also a human-centric discipline
Software is an invention that proposes to assist in eliminating human suffering
Like anything else, it is a double-edged sword
Right now, instead of living up to its promise, software is contributing to human suffering
Instead of being our servant, software is turning us into its servants
This pattern is symptomatic to technology in general
We put technology to daily use in order to minimize our suffering, and end up being enslaved by the technology
The bottom line is that today most of us are spending our lives serving the technology
This is utterly unethical
Why does it hurt more when software becomes the master?
Software products have mind-like qualities
When a mind-like entity hurts us, it pains us much more than when a dumb inanimate entity inflicts pain on us
Being mind-like, software brings tremendous promise to serving the human kind
In reality, this promise turned into a nightmare, where we must attend to the whims and caprices of horribly designed software products
This pains us and disappoints us to no end
What are the factors leading to such a disastrous situation?
Software is mystified (no one seems to know what kind of a discipline it may be)
Is it a branch of engineering?
Science?
Art?
Craft?
Gardening?
Anything else?
I have a theory:-)
Almost all of the software products I've ever seen have the quality that's similar to products made by carpenters
The science, engineering, art and craft of cabinet making
There are many outstanding software 'cabinet-makers' making top-notch software 'cabinets'
What's wrong with this picture?
To begin with, we usually don't need software 'cabinets'
What is it that we actually need?
We need software instruments
Carpenters and luthiers
Did you know that master carpenters are the worst possible luthiers?
How's that possible?
Carpenters specialize in making rock-solid products
A good carpenter will ensure that all the dove-tail joints are perfectly crafted and seamlessly glued together
A good luthier practices an entirely different discipline
If a luthier were to make a guitar or a violin by adhering to the carpenter's standards, that musical instrument would produce the most horrible sound
Working in an almost opposite direction than a carpenter would, a master luthier strives to make his instrument as loose as possible
In the words of one of the most famous luthiers today (Danny Ferrington), a guitar must be at the verge of falling apart if it is to produce the sweetest possible sound
In order to make a musical instrument truly sing, good luthier will forsake the time tested principles of solid carpentry in favor of the wabi-sabi of building an object that breathes and vibrates
A good guitar will respond to the person playing it, will adjust to that person's quirks, and would allow him to express his intentions, his personality
All that is possible only if the guitar is not 'uptight'
Most today's software products are way too uptight
They are made according to the strict code of solid carpentry
Air-tight joints, rigid structure, industrial strength construction, make sure that the product cannot 'breathe' and vibrate in harmony with its human users
What we need is software products that would breathe with us, that would vibrate in harmony with our intentions
We need software that will make us 'sing' when using it
In this way, software is similar to a musical instrument
How to make software sing?
Direct contact
So long as we keep building software indirectly, using hooks and crooks and Mickey Mouse-ish 'methodologies', the software will remain rigid and unusable
We need to dismiss those training wheels and crutches and replace them with simple, direct means of expressing our intentions
Memo to the machine
If I intend to accomplish something in real life, I usually express my intentions by writing a memo
Things usually work out that way, because I am not mystified by the writing medium
But if I try and write a memo to the machine, I end up being mystified
Do what I mean, not what I tell you
This meaning proved incredibly difficult for the machines to glean
More likely than not, machines will grossly misinterpret my intentions, as expressed in software code
Therefore, we need to focus on a language that will bridge this gap between humans and machines
Once we get to the point where to write a memo to the machine feels as natural as it is to write a memo to a local service bureau or a government office, we will reach the breakthrough
Balderdash!
What about rounding errors, bugs, testing?
I seem to be living in a dreamland. Yeah, what about all those concerns?
Let's look at how these things work in real life
When I write a memo, or an email to the client, do I have to test it?
What would be a real life equivalent of a good unit test?
Simple -- submit it to my lawyer's office
They will give it a good shakeout, and for a handsome fee will ensure that it's safe to mail the memo
How realistic is that?
When was the last time you've submitted your email to the lawyer and waited a week before they gave it a green light?
Yes, to err is human, and mistakes are bound to creep into any memo/email
But in real life, that's usually not a show stopper
Why should it all of a sudden be a showstopper in the proxy world of software?
Of course, there are particular memos, emails, press release statements that must be scrutinized before being sent out
But those are typically in minority
If we were to enforce strict scrutiny of any material that leaves our offices, businesses would come to a screeching halt
How to write a memo to the machine?
Embrace less technology
The age of industrialization and automation is behind us
No use in hanging nostalgically to the bygone days
Realize the power of Smart Servant
This movement began with the realization that 'less code' is more desirable than more code
Less is more... yadda yadda yadda
Then David Heinemeier Hansson and 37signals realized the 'less software' mantra
Finally, and inevitably, the push for radical simplicity brought us to the 'less technology'
Even Bill Gates and other big-ass vendors now admit that 'less code' is more desirable
However, they still hang on to the old dream that 'more software' and 'more technology' is very desirable
Time for a wakeup call
What are the first symptoms of the impending 'less technology' awakening?
Ruby
Ruby on Rails
Of all the software products I've ever seen, only Ruby and Ruby on Rails resemble to a certain degree products made by master luthiers
This is due to their focus on context
Context == common-sense
Or, as David likes to put it:"context beats consistency"
When a cabinet maker attempts to build a musical instrument, he tends to adhere to the high building code of carpentry
This is an exemplary case of 'foolish consistency'
Both Ruby and Ruby on Rails come with a strong built-in bias against foolish consistency
That bias is one of their strongest qualities, enabling them to focus on building a Smart Servant
What is a Smart Servant?
It is a mind-like entity that is sensitive to the context
Or, put another way, Smart Servant is a mind-like entity that has the ability to avoid foolish consistency
Being sensitive to the context and able to avoid foolish consistency is the pinnacle of sophistication
Right now, almost all software products are painful to use due to their lack of sensitivity to the context
Context tends to change faster than the weather, yet all those pricey software products are blissfully unaware of these shifts
Even products that are deemed as being head-and-shoulders above the competition sorely lack the sensitivity to the context
For example, iTunes
Almost universally hailed as bringing unprecedented levels of sophistication in end-user interaction, this product nevertheless sucks
Why is that?
My theory is that most software applications cannot help but be largely useless
What's the application's reson d'etre?
The application is the middle man between the underlying information processing system and the end consumer
Software application's job is to translate the intentions of the end-user into the language that the underlying system can understand
That means that the end-user is illiterate
Similar situation existed not that long ago in real life, when most people were mystified by the world of reading/writing
Those were the days where people had to use professional services when having to deal with any formal situation
Today, most people can cope with reading and writing and can fill out government and other forms by themselves
The need for the middle man intermediary brokerage services had almost disappeared
Same thing must eventually happen to the intermediary services of software applications
Once the barriers of talking directly to the underlying information processing system get sufficiently lowered, people will begin bypassing applications
For that to happen, we need languages that are much more expressive than Ruby is today
But, Ruby is a good, and a very beautiful start
When that happens, we'll find ourselves writing scripts (memo to the machine) much more often than writing applications
Of course, the need for writing rigid, industrial strength applications (that will govern our nuclear warheads) will never vanish
But in everyday affairs, we'll learn to ease up a bit