The greatest of all weaknesses is the fear of appearing weak.
A good idea is an orphan without effective communication.
Well, software doesn’t quite work that way. Rather than construction, software is more like gardening – it is more organic than concrete. You plant many things in a garden according to an initial plan and conditions. Some thrive, others are destined to end up as compost.
Most people assume that maintenance begins when an application is released, that maintenance means fixing bugs and enhancing features. We think these people are wrong.
Pragmatic Programmers won’t sit idly by and watch their projects fall apart through neglect.
We who cut mere stones must always be envisioning cathedrals.
You Can’t Write Perfect Software. Did that hurt? It shouldn’t. Accept it as an axiom of life. Embrace it. Celebrate it. Because perfect software doesn’t exist. No one in the brief history of computing has ever written a piece of perfect software. It’s unlikely that you’ll be the first. And unless you accept this as a fact, you’ll end up wasting time and energy chasing an impossible dream.
Tools amplify your talent. The better your tools, and the better you know how to use them, the more productive you can be.
All software you write will be tested – if not by you and your team, then by the eventual users – so you might as well plan on testing it thoroughly.
Every day, work to refine the skills you have and to add new tools to your repertoire.
The amount of surprise you feel when something goes wrong is directly proportional to the amount of trust and faith you have in the code being run.
One hundred years from now, our engineering may seem as archaic as the techniques used by medieval cathedral builders seem to today’s civil engineers, while our craftsmanship will still be honored.
But while you can always write ‘spaghetti code’ in a procedural language, object-oriented languages used poorly can add meatballs to your spaghetti.
We who cut mere stones must always be envisioning cathedrals. – Quarry worker’s creed.
Have you noticed how some project teams are efficient, with everyone knowing what to do and contributing fully, while the members of other teams are constantly bickering and don’t seem able to get out of each other’s way? Often this is an orthogonality issue. When teams are organized with lots of overlap, members are confused about responsibilities. Every change needs a meeting of the entire team, because any one of them might be affected.