Código a gente joga fora, conhecimento não.
Marco Sbrolini
The shortest path to exceeding expectations doesn't necessarily go through meeting expectations
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.
A complex system that works is invariably found to have evolved from a simple system that works
"Coders are special. We are expected to know how to do things we've never done before and estimate how long they will take."
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?
Good judgement is the result of experience ... Experience is the result of bad judgement.
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.
"Software design is a constant battle with complexity. We must make distinctions so that special handling is applied only where necessary."