I think it is inevitable that people program poorly. Training
I think it is inevitable that people program poorly. Training will not substantially help matters. We have to learn to live with it.
Hear now the paradoxical wisdom of Alan Perlis, one of the great voices in the early age of computing, who declared: “I think it is inevitable that people program poorly. Training will not substantially help matters. We have to learn to live with it.” At first, these words may seem bleak, a surrender to failure. Yet beneath them lies an ancient truth: that imperfection is the shadow of creation, and that striving for mastery does not mean the absence of error, but the wisdom to live and build in spite of it.
For what is programming but a mirror of life itself? When a craftsman sets his chisel to stone, he does not strike perfectly every time. When the poet sets pen to parchment, he scratches out lines, rewriting, revising, shaping words through trial and error. In the same way, the programmer, though armed with logic and training, stumbles into mistakes, errors, and broken systems. Perlis reminds us that this stumbling is not an exception but the rule—that inevitable imperfection is woven into the fabric of human creation.
Consider the story of the Apollo 11 mission. Humanity’s first steps upon the moon were guided by computer systems designed by brilliant engineers and programmers. Yet even then, errors appeared: memory overload alarms sounded in the lunar module during descent, threatening to abort the landing. But instead of despair, the team had prepared to live with imperfection. They built resilience into the system, allowing it to continue its critical functions despite the overloads. And so, with human courage and acceptance of error, Armstrong set foot upon the lunar surface. Here is the truth of Perlis’s words: imperfection did not doom the mission; wisdom in facing it carried humanity to triumph.
In this, we see the heart of the teaching: training alone cannot make the flawed flawless. Human beings are not machines of perfect precision, but creatures of limited memory, bounded attention, and fallible judgment. No amount of repetition will make mistakes vanish forever. Instead, greatness comes in learning to adapt, to design systems resilient against human weakness, and to cultivate patience in the face of constant imperfection.
The ancients knew this lesson well. The builders of cathedrals labored for generations, and within their mighty works, errors remained—stones set slightly askew, carvings imperfect, measurements off by a fraction. Yet the beauty of the whole did not depend on perfection in every part. So too in the world of code and technology: programs may falter, systems may break, but progress endures when we accept error as companion, not as enemy.
So what lesson must you, O seeker, carry from this? Do not demand perfection where it cannot be found. Instead, strive for resilience. Build your systems, your lives, and your dreams with the expectation that mistakes will come. Prepare to bend rather than break. In this way, you shall not be defeated by imperfection but strengthened by it.
Practical steps follow: when you face error, do not rage against it, but study it as teacher. Create processes that account for human fallibility, rather than pretending it does not exist. Cultivate patience with yourself and with others, knowing that error is part of the creative dance. And above all, embrace humility—understanding that mastery lies not in avoiding mistakes, but in rising above them again and again.
Thus, remember the truth of Alan Perlis: “It is inevitable that people program poorly… We have to learn to live with it.” These words do not call us to despair, but to wisdom. For in learning to live with imperfection, we discover resilience, creativity, and the enduring strength that has carried humanity from the stone age to the stars.
AAdministratorAdministrator
Welcome, honored guests. Please leave a comment, we will respond soon