Código a gente joga fora, conhecimento não.
Architects are taught to look at buildings, and composers study one another's scores, but programmers - they look at each other's work only when there's a bug to fix; even then, they try to look at as little as possible. We tell students to use sensible variable names, introduce them to some basic design patterns, and then wonder why so much of what they write is so ugly.
Ward Cunningham being asked about XP:
- Well, your own work. Do you use it?
- Of course not, not always. Well, keep in mind that if you don't try different ways to do things how would I ever come up with XP? The computer is so powerful that you have to keep trying ways that can work.
What if software wasn't "made", like we make a paper airplane - finish folding it and fly it away? What if, instead, we treated software more like a valuable, productive plant, to be nurtured, pruned, harvested, fertilized, and watered? Traditional farmers know how to keep plants productive for decades or even centuries. How would software development be different if we treated our programs the same way?
It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?
The big idea is "messaging" -- that is what the kernal of Smalltalk/Squeak is
all about (and it's something that was never quite completed in our Xerox PARC phase).
The Japanese have a small word -- ma -- for "that which is in between" -- perhaps
the nearest English equivalent is "interstitial".
The key in making great and growable systems is much more to design
how its modules communicate rather than what their internal properties
and behaviors should be.
Think of the internet -- to live, it (a) has to allow many different
kinds of ideas and realizations that are beyond any single standard
and (b) to allow varying degrees of safe interoperability between these ideas.