Peter Marklund's Home
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