For Software Developers
(This essay draws much inspiration from Fred Brooks.)
We are created in the image of God, and being created in His image we naturally exhibit His divine qualities in miniature. I believe that the aspect of God’s nature we call Love is exactly the same multifaceted, spiritual phenomenon as the love we share with our friends, our spouses, and our children but that, in our case, that divine quality is simply scaled down to human proportions.
It is no new revelation that through certain human activities we can obtain a clearer understanding of God’s nature and his character. People have always known that the joys and trials of parenting are Christian object lessons, giving parents a unique insight into the joys and trials God himself experiences in relating to us. In the book of Hosea, particularly, God uses human marriage as an object lesson to attempt to convey to his children Israel how deeply they were hurting Him with their idolatry.
Love, joy, peace, hope, jealousy, beauty, patience, kindness, and so many other aspects of God’s nature are reflected in miniature in our own human lives, and by experiencing and exhibiting these qualities on the human level we grow in our practical understanding of who God is. Our preachers could preach every Sunday for a decade on God’s patience and we might gain a surface level understanding of the concept, but after caring for an elderly relative with Alzheimer’s we might suddenly feel like we understand God’s patience so much more fully. So, in our continual pursuit of a closer relationship with our Savior, we often use our daily, human experiences as object lessons that teach us on an intimate level who God really is.
One aspect of God’s nature, that is simple to understand on the surface but very difficult to personally experience, is God’s role as creator of the universe. That one doesn’t scale down to the human level quite as easily as some of God’s other divine qualities, or does it? Painters and sculptors have always claimed that their respective arts are reflections of God’s artistic genius in the creation of the heavens and the earth. The artist’s eye for beauty must be due to his being made in the image of the One who sculpted the first landscapes and painted the first sunsets.
But the claim of the fine artists is only partially accurate; a landscape is not just a sculpture on a grand scale, but a dynamic, living ecosystem. A sunset is not just an aesthetically pleasing phenomenon on the horizon; it’s the result of an intricate and carefully planned system to power all life on earth. The God of creation is not playing the role of fine artist; he is fundamentally concerned with more than aesthetics. He is a designer of complex systems that work together for a useful purpose.
So, who can claim to reflect this creative nature of God? What occupations involve designing and building complex systems that do something useful, striking a balance between form and function, creating systems that serve a useful purpose and do so in a way that is elegant and beautiful?
I will venture to claim that the occupation that most clearly reflects God’s creative nature is that of the software developer. I make this claim from personal experience because I see so many similarities between what I do in my daily work as a software developer and what our God did at the beginning of time. Of course I realize that my creative acts are only a meager shadow of God’s creative power in the same way that our love for our children is only a meager shadow of God’s divine love for us, but the joys and trials I experience as a software developer continually give me a deeper appreciation and respect for God’s creative genius. Let me provide a few specific examples.
First of all, software developers, like the Creator, build our creations out of pure thought. There is never any need to struggle with some intractable physical medium like clay or steel. We simply speak the words (well, type them on a keyboard) and the thoughts of our minds spring into existence out of nothing. Even a sculptor cannot really claim to make anything. He must at least start with stone or clay and then whittle or shape it. But, the software developer says “Let there be a binary search tree” (in rather more words than that, of course), and there is a binary search tree. There are no limits to what he can produce. He is constrained only by the feebleness of his mind and the vague boundaries of Turing computability. But his creations of pure thought are not confined to the realm of thought like those of a fiction writer; his creations can move images on a display or direct a robot and otherwise interact with the real world. He can then look at the real effects of his creation and “see that it is good”.
Secondly, software developers, like the Creator, cope with the complexity of intricate systems by using layers of abstraction. Basic functions and general tools reside in the lower layers of a software system while higher layers in the system use those lower-level tools as building blocks for more complex functionality. The point is to hide the complexity of the lower layers from the higher layers in the application. In the same way, the universe is constructed in layers; the incredible complexity evident at the quantum level is neatly invisible to us humans who are primarily concerned with the universe at the molecular level. We can live our entire lives in a world of wood and plastics and soil and, thanks to the layered design of the universe, never once concern ourselves with the odd behavior of quarks. So, because the concept of abstraction is such a key tool in the work of a software developer, we can readily recognize it and appreciate it when we notice it being used elegantly in God’s created world.
Thirdly, software developers can appreciate the subtle design decisions involved in the creation of any functioning system. So often people will look at a beautifully designed piece of software and not appreciate the numerous design decisions that guided its development, each decision often requiring many hours of agonizing over the various design possibilities. But, oddly, the user’s lack of appreciation for the software’s complexity is the mark of a beautiful system. If the developer has done his job correctly, even an inherently complex software system will appear simple and obvious to the user. The highest compliment a software user can give is: “Well of course it works this way. How else would it work?” So, we have the unique opportunity to sympathize with our Creator when people, blinded by the elegant simplicity of life and the cosmos, fail to appreciate or even acknowledge the genius involved in its design and creation.
Finally, software developers have a unique perspective on the interrelatedness of command and creation. People often wonder why God needed to rest on the seventh day of creation. After all, he only spoke a few sentences; what could have been so hard about that? The creation account in Genesis appears to most people to cast God in a management role. He doesn’t really seem to be doing any creating; he just sits there and gives orders. “Let there be light,” he says, and they assume that due to his divine authority the uncreated light just leaps into existence at His command. This is a disturbing view of creation because it casts God as a passive actor and allows no place for Him to pour His genius into the created things. We want to be able to attribute the beautiful and clever aspects of the created world to design decisions made by God Himself. We don’t want to picture Him chanting some magical incantation like “Let there be fish” while some lower spiritual being faithfully follows the order and painstakingly designs the anatomy of marine life.
Software developers have an answer for this dilemma because we recognize that the command itself can be a creative act. The source code we write is technically a set of commands to the computer, but it is important to realize that all of the intelligent design decisions are encapsulated in the command. The computer doesn’t get to make any decisions. It is only an automaton executing its orders according to a set of predetermined rules. No one would claim that the programmer is playing a managerial role by simply giving commands to the computer which does the real work. Knowing that the acts of command and creation are one and the same, we can read Genesis in a different light. We must assume that the scripture “Let there be light” is a rough and simplified translation of what God really said which was to utter a precise encoding of the physical properties of light in the machine language of the universe. (In case you missed it, God already built the hardware in Genesis 1:1.) This understanding of creation preserves God’s full participation in the creative act, reassuring us that the intricate design of our bodies, our ecosystems, and our galaxies are the result of God’s careful planning and creative genius.
A common question among Christians is: how does your occupation harmonize with your Christian faith? This has been a difficult one for software developers to answer. We don’t have an easy answer like ministers and teachers and other Christians whose jobs involve working directly with people. But our occupation does serve as a perfect object lesson in getting to know God intimately as “Creator”. It’s as if we are three-year olds, happily banging away with our little Fisher-Price tool sets, and looking up to find that we sit at the feet of our Father who also is toiling at His workbench. Although what we do is only a meager reflection of God’s creative power, we can feel the same satisfaction as a child who feels like he is, in some small way, following in his Father’s footsteps.
“Dad and I, we make stuff.”
2 comments:
I'm curious about how your opinions about software design interact with your opinions about the nature of creation.
For example: if big design up front is extremely difficult and generally a bad idea when programming, might God have avoided it as well, and for similar reasons?
Absolutely. I tend to think of the creation as an incremental design, with God beginning with the lower life forms and gradually adding more and more complexity. I didn't mention it in the article, but my experience in software development has also helped me realize how essential incremental design is in the creation of complex systems.
Christians have generally been pretty hostile to the concept of evolution because it is difficult to reconcile it with our view of creation, but it seems so natural for God to have gradually refined the design of his creatures by incremental improvements.
The theory of evolution absolutely does not preclude the existence of a Creator, rather it gives us an enlightening insight into how he might have carried out his task.
Post a Comment