Why Is Moral Knowledge Necessary
— Willard — 6 min read
Software development, cloud enablement, and engineering are full of options. These options when compared use adjectives like “good”, “bad”, “optimal” but what really motivates a software developer, cloud developer or engineer to make a decision? Why learn Javascript over Python, choose AWS over GCP, or even use a doubly linked list over a singly linked list? I can remember back to a senior level computer science class where the entire premise of the class was to learn how to compare options, or how to make decisions. Specifically, we learned about the benefits and drawbacks of differing programming languages. As it turns out these programming languages had natures.
As Dallas Willard puts it, squirrels and Brussels sprouts have natures: Brussels sprouts don’t collect nuts and squirrels don’t grow in gardens. To overlay this idea with programming, if I were in search of a tool to collect nuts, I would not start with Brussels sprouts. I would likely want to start with something that already has a nature that is helpful for the purpose I’m after. This is true when making decisions in a software developer’s day-to-day. Do I write this continuous integration (CI) script in bash, in python, in the language of my repository? There are decisions to be made and not every decision comes with as many consequences. Now hear me out, I would not choose to write any CI pipeline code in Ada just to gain type safety, there are other considerations: readability over cost (in this case, Ada might save you costs by reducing programmer error but the cost saved through type safety is an order of magnitude smaller than the time it takes for another engineer to understand the code).
In programming, we weigh many of our options through the filter of productivity, namely in efficiencies of algorithms denoted by big O notation. When we consider efficiency of tools, algorithms, and data structures we must remember that this is a criteria that we decide (and for the most part, agree) is important and it is how we agree to define something as good or bad. Defining the big O notation of two algorithms (that solve the same problem) will help us make a decision on which algorithm to utilize for our use case, indeed an informed decision based on the knowledge of the nature of the algorithms at hand. So its true, squirrels, Brussels sprouts, CI tools, and even algorithms have natures that limit them. The nature of these things all differ and offer limitations of different kinds. So we can see that the knowledge of algorithms or tools is important for making informed decisions, but should we stop there?
What follows the question of making technical decision regarding tools and algorithm? What follows is technical work that aims to capture some desired end goal of a software product or feature. We call these user stories, or tasks (for finer grain detail). When I pick up tasks or user stories to complete, I’m assuming that someone has already answered the question “why does this need to be done” and I am free to work within the framework of the user story e.g. acceptance criteria, assumptions, tests without needing to ask “why?”. I am moving beyond the rationale that exceeds my knowledge. As a software developer working for a company that also has product owners, I am unaware of the end user’s desires, or what’s best for them in regards to the product or set of available features. These user stories and the daily activities of product owners in conjunction with software architects, product managers, end users and the like, provision a sort of miniature moral snapshot where software developers are able to focus on their own moral snapshot where they can focus on making choices (determining what is good and what is bad) free of the need to go back up the chain to ask “why are we doing this” - now this is in a world where everyone agrees on the definition of good and bad for user and I recognize this is often not a reality that we live in. Instead we face a world where there are competing desires of all the folks in the chain of command: software developer all the way up to CEO, desires or motives will differ which is another topic altogether about alignment. But to continue, the need for moral knowledge - the knowledge of good and bad - we must ask ourselves “why are we doing this?”. And if we ask ourselves this question there must be something to stand on, we cannot certainly motivate ourselves to do hard things, implement complex toolsets, or work with others simply because “it is part of our job”. We must ask why.
Moral knowledge can answer the question: “why are we doing this?” and this knowledge can precisely answer the “why” at every point on the scale: from data structure choices to business choices at the c-suite level. These decisions are not just flip-of-the-coin and should not be thought of as merely a choice of preferences (although, sometimes decisions are so neutral that they might be a preference). Decisions made are a manifestation of character, a manifestation of someone’s view of good and bad.
So what are we to base our knowledge of good and bad on? Or in other words, how are we to know good and bad? This is where the reality of the kingdom of heaven becomes revelatory. It reveals to us, albeit not quickly, what is good and what is bad - which by no means is a universal rulebook for living - instead we could uncover this and call it wisdom. And as Tim Keller puts it “wisdom is knowing what the right thing to do is in the majority of life situations where the moral rules don’t apply”. This wisdom from above comes from a God who loves you with a sort of (agape) love that seeks your wellbeing [for more on agape, I’d encourage you to watch this BibleProject video on the Greek word “agape”].
Here we stand at the center of the garden but on different terms. God has opened to us the way back into his kingdom and he welcomes all - the poor, the rich, the outsiders, the popular - all people and he offers to us knowledge of Him to bring about knowledge of good and bad. We stand before two trees. So moral knowledge is necessary because as software developers we must make decisions, decisions reveal our character, character is who we really are and what God cares most about.
Out of the ground the Lord God caused to grow every tree that is pleasing to the sight and good for food; the tree of life also in the midst of the garden, and the tree of the knowledge of good and evil.
Genesis 2:9
For more on what knowledge is, how the human free will fits into the kingdom of God and more, checkout Dallas Willard’s lecture series on his book *The Divine Conspiracy.*
It is not just for the greatness of God to steamroll everything, it is to illicit love and obedience through the development of character so that out of human history comes a certain kind of community that then is going to have a role forever in the universe
-Dallas Willard; The Divine Conspiracy Lectures Part 2: What Is a Human Being?