Progress is a temptress. And I give in to her every day.
I find no endeavor more gratifying than one that moves me toward my goals. In fact, I derive energy from knowing that my actions will do so—that with more time, more digging, and more understanding, I will continue to climb my mountain.
The most demoralizing thought for any worker is that more effort yields no progress. I find programming beautiful because sufficient effort must yield progress.
Any solvable programming problem is exactly that: solvable, and knowing this completely changes my mental game. If I know that there is an end, then I am guaranteed that enough effort will yield progress until a solution emerges. This alone can encourage me to keep taking small steps toward the answer, in spite of any transient doubt.
There is a certain amount of information about a problem that, once known, makes the solution eminently obvious. So, what better action than to keep digging?
The mental block, especially in programming, comes from the fact that the “progress vs. effort” graph is a step-wise function: long stretches of apparent nothing, then a sudden vertical jump. It’s been said that “Insanity is doing the same thing over and over again, but expecting different results” (Sudden Death, Rita Mae Brown).
In our discipline, you have to embrace a gentler version of that insanity—continuing to investigate, test, and think, even when the graph looks lifelessly flat—because that’s exactly what sets up the jump.
I find programming beautiful because it has taught me to measure progress not by instant results, but by the focused, sustained effort I bring to each problem. And it is beautifully simple, though not easy, to act.
I can hear her calling.