For Homo logicus, control is the goal and complexity is the price they will pay for it. For normal humans, simplicity is the goal, and relinquishing control is the price they will pay.
Rosenberg's Law: Software is easy to make, except when you want it to do something new. And then, of course, there is a corollary: The only software that's worth making is software that does something new.
We find ourselves in a thicket of strategic complexity, surrounded by a dense mist of uncertainty.
Software development as both a thinking-intensive and communication-intensive activity presents an interesting dichotomy.
The human mind is exquisitely tailored to make sense of the world. Give it the slightest clue and off it goes, providing explanation, rationalization, understanding.
People who are committed to constant learning are people who know what they don't know. They know their own weaknesses, and they're not insecure in talking about them.
Agile implies being effective and maneuverable. An agile process is both light and sufficient. The lightness is a means of staying maneuverable. The sufficiency is a matter of staying in the game. The question for using agile methodologies is not, "Can an agile methodology be used in this situation?" but "How can we remain agile in this situation?"
Intrinsic motivation comes from the work we do, from pride in workmanship and a sense of helping a customer. Purpose is what makes work energizing and engaging.
Whatever I do, I try to do it in a way that has some elegance; I try to create something that I think is beautiful. Instead of just getting the job done, I prefer to do my work in a way that pleases me in as many senses as possible.
Creating a program often means that you have to create a small universe.
I don't believe in simple, prescriptive formulas for success. I wanted this book to acknowledge the complexity that creativity requires.
Every good work of software starts by scratching a developer's personal itch.
Programming is a craft skill. Regardless of the amount of arcane and detailed technical knowledge that a person has, in the end, application development comes down to feel and experience.
Someday I will learn that nobody cares about my technology whims.
It seems to me that the two most important modern skills are these: communication skills, learning and thinking skills.
Homo logicus are driven by an irresistible desire to understand how things work. By contrast, Homo sapiens have a strong desire for success.
Never lose sight of why software is being developed: to satisfy real needs, to solve real problems.
What hackers and painters have in common is that they're both makers. Along with composers, architects, and writers, what hackers and painters are trying to do is make good things.
Each one of us has, somewhere in his heart, the dream to make a living world, a universe.
In software development, "perfect" is a verb, not an adjective.
The importance of a more considered approach goes up sharply as the stakes increase. It's when the truly Herculean effort is called for that we have to learn to do work less of the time and think about the work more.
Good design is hard. If you look at the people who've done great work, one thing they all seem to have in common is that they worked very hard. If you're not working hard, you're probably wasting your time.
Where humans are concerned, context is everything.
Creating an interface is much like building a house: If you don't get the foundations right, no amount of decorating can fix the resulting structure.
Stress the importance of thinking hard, not working hard.
Maybe this is the key to productivity: just getting started.
Don't stop the proceedings with idiocy.
When good tools support creative activities, the activities can induce a state of "flow" in the user. This is a state of full absorption in the activity, during which time distorts, other distractions fall away, and the person can remain engaged for hours--the enjoyment of the activity is its own reward. Artists, athletes, and programmers all know this state.
For most of us, it doesn't matter to us whether we understand how things work, as long as we can use them. It's not for lack of intelligence, but for lack of caring. In the great scheme of things, it's just not important to us. Web developers often have a particularly hard time understanding--or even believing--that people might feel this way, since they themselves are usually keenly interested in how things work.
Irrespective of what type of work you do, the craftsman mindset is crucial for building a career you love.
Why is programming fun? ... First is the sheer joy of making things. ... Second is the pleasure of making things that are useful to other people. ... Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. ... Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. ... Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination.
Writing the code is the easy part of software development.
Software development is a discovery process in which technical people make continual tradeoff decisions in order to reach what they consider an optimal result.
Good design can help tame the complexity, not by making things less complex--for the complexity is required--but by managing the complexity.
When a person is able to organize his or her consciousness so as to experience flow as often as possible, the quality of life is inevitably going to improve, because, even the usually boring routines of work become purposeful and enjoyable.
Einstein repeatedly argued that there must be simplified explanations of nature, because God is not capricious or arbitrary. No such faith comforts the software engineer. Much of the complexity he must master is arbitrary complexity, forced without rhyme or reason by the many human institutions and system to which his interfaces must conform.
You have to believe that software design is a craft worth all the intelligence, creativity, and passion you can muster.
The purpose of each activity is to move the game forward. Work products of every sort are sufficiently good as soon as they permit the next move.
Eighty percent of software work is intellectual. A fair amount of it is creative. Little of it is clerical.
Those who avoid the sin of intellectual sloth could be called "engaged". They are more alert, more intellectually active, less willing to be satisfied with superficially attractive answers, more skeptical about their intuitions.