Peter Marklund

Peter Marklund's Home

Fri September 21, 2007
Programming

RailsConf Europe 2007 Notes: Dave Thomas Keynote

The Keynote by Dave Thomas was to me the most inspirational and profound talk at the conference. I have the greatest admiration for Dave Thomas. I can't offer Dave's entire talk in every detail here, nor do I know if that would be appropriate. What I have is key fragments from sentences in the talk presented sort of in the format of a poem. Hopefully someone who didn't hear the talk can make something out of it. Enjoy...

There is no such a thing as software engineering
What we have been doing is taking a whole lot of dirt and filling up a hole
What makes engineering good? I look for elegance
Fred Brooks - The Mythical Man Month
Written 30 years ago. IBM mainframes. Not a single thing has changed between then and now, tragically
The programmer, like a poet, creates castles from thin air. We can create anything we can imagine

Writers block. Write something, throw it away, start over
The blank canvas of a painter
The blank editor buffer. Frightening. Since you start, you've made a commitment

Leonardo was commissioned to produce a statue, how much money is there in it?
He started with a sketch on a scrap of paper. He is doing what we should do but aren't doing
He was prototyping, playing around, experimenting
If you step away from the keyboard and use a different medium,
you are engaging a different part of the brain
The statue was canceled due to budget cuts...

With a prototype you have not invested, so you can change your mind
Brooks says be prepared to throw one away
I say be prepared to throw 10 away
You can ignore the details when you prototype

Exploratory testing. When you don't really know how something works
You write unit tests and experiment and align your understanding with what's going on
Prototypes written as tests are really useful
The end to end prototype. The tracer bullet. No error checking and no details
Leonardo sometimes drew a composition and threw it away
Scaffolding is good for prototyping

- Start anyway. Start with something and then throw it away
- Test first
- Act on worry. The lizzard at the back of our minds is giving you a sense of worry. Listen to it

Just as important: know when to stop

How do you work on something that is really big if you can only see a small part of it at a time?
It's like painting a big wall or ceiling
The trick was to divide the ceiling into panels with low coupling and strong cohesion
Each panel tells only one story
Modularization is great and we don't do enough of it

Time slots. Iterations. Boxes to work in
Do what cartoonists do if you can't finish - "To be continued..."
Knowing when to stop is incredibly important
When you've set a boundary and you reach it - stop

Satisfy the customer
Paint my picture and make me look nice
Develop the software and make me look good

Increasingly less realistic portraits through history
Each portrait satisfies, but only one of them really looks like a person
There is a massive difference between a portrait and a picture
Look inside and find out what something is really like and then find a way to express that
A picture is merely the surface representation
Painters don't have the restriction of photographers
When you are capturing requirements you have a picture
Developers are looking for underlying requirements

USA was trying to invent a pen to write in space, meanwhile, the russions used pencils
Nasa was using pencils. The Fisher company offered a pen. Nasa (the client) didn't want it
It could write upside down in a boiling toilet. Nasa still didn't want it
We need to get into the habit of *not* listening to our clients
Instead figure out what they really want and work with them to establish that

Software for producing a perfect drivers license picture bought by the state government
Pictures got interchanged and smileys were being used instead
The camera was off by one after a customer left
Another customer put a smiley on a piece of cardboard...

Is there a meaningful distinction between art and engineering?
No. In reality they are the same
They share elegance, grace, understanding, digging beneath the surface
Is software engineering an art or a craft?
There is no distinction

Without engineering there is no art

Without art there is no engineering

Without art there is no soul and you won't produce anything worthwhile
We have a responsibility to demonstrate that with Rails

With Rails we have a canvas on which we can draw
Be an artist
Treat your next project as if it was a work of art
Think about the impression that you want to make
Create something great, as always
The community is full of people that make great software and applications
We are changing the world of software development
Create more than great things. Create beautiful things

Let the world know

Sign your application as the artist

That's how you know how to take pride in what you do

Comments