= Keynote by Dave Thomas: The Art in Rails "Did David Black just call me monumental?" At first RailsConf I gave a keynote about Rails, that was a major mistake! Germany: I'm gonna talk about software engineering! There really is no such thing as software engineering - but what can we talk about that benefit Rails? What makes engineering good? I look for elegance and beauty. Who recognize this man? (No-one) - Frederick P. Brooks: The Mythical Man-Month Written 30 years ago - to his credit and our shame not a single thing has changed in software engineering In the fourht part of the book: The programmer like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by the exertion of the imagination. Few media of creation are so flexible, so easy to polish an rework, so readily capable of realizing grand [...] potential. Programmers are like poets: == Writers block: - Writers are faced with a blank sheet - Painters with a blank canvas - Programmers create our project, open it in the editor, and it's blank! - I know programmers who will sit there and stare at it - How does artists handle this? - Leonardo da Vinci was also commissioned - "How much money is there in it?" - He started sketching, although he hadn't cast anything in bronze before - Leonardo was prototyping - what we should do! - Playing around, prototyping - This project was also cancelled due to budget cuts We often forget to prototype - Everytime you step away from your keyboard, you engage another part of your brain - It's crazy to start out by coding "the application" - We don't know what it is supposed to do - Fred Brooks say: Be prepared to throw one away - I say: Throw 10 away! Exploratory testing: - When you don't know really know what you do, write some unit tests to try it out - Little small prototypes, written as tests, are really useful The tracer bullet: - Covers all the appliction from end to end, but without any detail - We can lean on things like prototyping The solution to the writers block problem: - Get started - Tell yourself: This is not the real application, I'm going to throw it away - Start anyway - prototype and tracer bullets - Test First - Act on Worry: Every single one of us has a little lizard in the back of our brain - Get's nervous when things are wrong - Tells us: You should be worried about this == Know When to Stop How do you know when you're finished, when you are only working on a small part of the big picture? - Michelangelo divided the cathedral ceiling into panels (stories, modules) - Modularization is great when it comes to software development Break things up in time - Write your software in fixed time slots - iterations - If you can't finish within the iteration, you stop anyway, and say: To be continued - Break what you do up into chuncks == Satisfy the customer "Paint my picture - and make me look nice!" "Develop the software - and make me look good" - The same technique that works for artists, works for us as developers Only one of the portraits actually really looks like a person - There is massive difference between a portrait and a picture - Great photographers takes portraits, not pictures - Painters can look deeper inside and express what they need to When you speak to a client, you are looking at a picture of what this software is supposed to do All great refuse to listen to that, they dig deeper for the underlying requirements The Space Pen story: - The US government needed a pen that could write in any environment - Meanwhile, the Russians used pencils - Really both used pencils, but the Fischer company said that it was dangerous - They developed the Fischer Space Pen - "This thing will write upside down in a boiling toilet" - Both countries ended up using that pen We all need to get into the habit of not listening to our clients - And to get in to their real needs The Robot camera: - Would locate a face and take a picture - Sold it to the US government for the perfect drivers license picture - They started getting complaints: - That picture is not me! - The police was confiscating drivers licenses because there was just a smiley - The camera couldn't find 5% of the people - They would eventually walk away, and the picture of the next person would be stored as beloning to the former one The trick is: - Look beyond the surface - Be appropriate - Work with client - Emergence == Why? - Are these things art - or are they engineering? - Does the distinction make sense? - I don't think it does There is art in engineering, and engineering in art Without engineering, there is no art Without art, there is no engineering - En engineer, who doesn't look at what he/she does, has no soul, and will never produce anything worthwhile Ruby and Rails has that - Ruby is the paint - Rails is the canvas on which to paint And I mean that: Treat your next project as if it was a work of art Be an Artist Create Something Great Create Something Beautiful Think of that, when you create your next application Sign your work, get your name out as artist of that application