From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laura Creighton Message-Id: <200309150633.h8F6XioN015202@ratthing-b246.strakt.com> To: 9fans@cse.psu.edu Cc: lac@strakt.com Subject: [9fans] Design and Workmanship Date: Mon, 15 Sep 2003 08:33:44 +0200 Topicbox-Message-UUID: 3618f3ac-eacc-11e9-9e20-41e7f4b1d025 I'm going to use David Pye's defintion here from _The Nature and Aesthetic of Design_ and _The Nature and Art of Workmanship_. (These books are wonderful to read, byt the way. Pye is a now deceased professor of woodworking and architecture who also designed ships during ww2. So no computers, in them, but a good language to describe the whole creative process. Paperback, reasonably priced, and if your csc library has collected the works of Chris Alexander, you should try to get them to stock these as well. According to Pye, 'Design is what you can communicate using words and pictures'. 'Workmanship is that which you cannot'. This does not mean that you cannot talk _about_ workmanship. Talk about Workmanship is called 'technique'. 'The Practice of Programming' is all about technique. But when you draw or write something on paper, and hand it to somebody and say 'make this', you are handing him a design. The notion of 'and do the job well' is all about workmanship, and generally goes without saying. We are living in a time of mass production. Machines can stamp out identical copies of most of the things we live with in whatever quantity we desire. But a machine, by defintion, produces _highly regulated workmanship_. Somebody designs a machine (and then somebody has to make or assemble it with good workmanship, but that is forgotten) and then the result comes out. Thus a false relationship between 'good work' is a result of 'good design' is widely believed. Designers, in all trades, are most victim to this. They specify a job, and get good work, and soon come to expect that people will do the job well. Then comes the day when they use a firm which isn't up to the standard they require. All there is to do is to request that they do the job over. When the result comes back, still shoddy, the designer has nothing to do but throw up his hand in despair, and either hire a different firm, or specify something within the range of the ability of the people doing the work. Good Workmanship can overcome modest Design flaws. Poor Wookmanship defeats the best in design. So where does that leave us? But you don't get to be a good Workman by getting your heads filled up with theory. You get to be a good Workman by spending 18 hell filled weeks working for Henry Spencer, when you are 18, willing to do _anything_ to get a driver into the utzoo kernel. Getting up at 4 am to read the v7 kernel _one more time_. And writing code, writing code, writing code, and having Henry Spencer and Geoff Collyer say 'that's bad' about it a lot. (Thanks Geoff). Hanging out with people who already know what good Workmanship is, failing to produce it, again, and again, and again, until you finally do something worthwhile. This is the experience csc majors, most of them, come to university hoping to get. Something that will make them good programmers. Unfortunately, they like everybody else, think that they need to become good designers. I don't know how to train good design into you. I can teach you to recognise bad workmanship, which generally comes with bad Design, and a certain amount of bad Design. But good Design? It may be a matter of 'either you've got it or you don't'. Unfortunately, I cannot treat you the way Henry Spencer treated me. This will just make you change your major, which I would love, but will get me in trouble with the university. I don't know if it is true that high school guidance teachers have all conspired to take all the smart, lazy, and completely unimaginative people that come to their offices wondering what to do in their lives, and tell them -- 'Computer Science, that's for you!' but it sure feels that way sometimes. But 'Design Patterns' is misnamed. It would be better named as 'Workmanship Patterns'. They are tools. They are things for regulating your work. They are like jigs, and vises, and the other things you use to make sure that you don't spoil the job as you work 'freely'. (Free workmanship == make a mistake and the job is ruined. Its opposite Completely Regulated Workmanship == push a button, get it done. Again, from David Pye). Boyd doesn't need them, because Boyd already works to an extremely high standard of workmanship, awesomely high, all the time. Boyd is also a fine designer. But he couldn't teach us that, much, either. He knows how to do it, not how to teach it, curse it all. But Design Patterns -- and read the Smalltalk one, not the C++ one, where half the book is not about the Patterns, but more fruitfully titled 'my struggles trying to do polymorphism with the C++ type system' (and there are better ways to do that than in the book) -- is a box of techniques of good Workmanship. We give them to the students who summer here. And one of the most wonderful moments of my life was when I showed this book to a new student, and said, the bookstore hasn't delivered yours yet but they've arrived ... when he looked at it he said 'I can get to the bookstore in 15minutes, and they shut in 30. Let me get it.' I said 'no'. He was totally excited. he had to get this book and show it to a friend. It had the solution to what was wrong with the engineering undergraduate students website and lab registration problem.... (I let him know that he could borrow my book until the delivery happened.) He and his friend hacked all weekend, and on Monday it was clear that they had hardly slept. But the site was better. They were going to refactor it _again_ next weekend, though ....) That's what its for. If you don't need that, then you won't understand, why its so important. But the world is full of people who desparately want to improve their workmanship, and _don't even know that that is what they are wanting_. More algorithm classes won't help them with this, nor will most of the things we teach at university. Most progamming problems can be served with very modest designs. 'Good rough work' is all you need when you want to take a list of your friends, and the pictures of your grandchildren from your digtal camera, and mail the second to the first without spending all day pasting in your Windows Gui. (I just taught a 70 year old woman enough Python to do that). If you need more regulated work, then DP is a tremendous help. And if you're an Artist, and want to do perfectly free work, and don't screw it up, you will probably get something better than if you just use good workmanship to properly assemble known components. Might be harder to maintain, though. Sorry for those of you I bored with my ramblings... Laura