Philosophy and Software I: The Virtues of Software Engineering

Bríd Moynihan
5 min readDec 13, 2020

With ancient philosophies there’s a lot that’s still relevant and applicable to today’s society; regardless of the medium in which the philosophy is applied there are parallels that remain the same, and therefore there are principles which still have relevance.

Confucian philosophy describes a way of governing that helps navigate a virtuous person through life, and in this first chapter I discuss how we can cultivate these virtues to improve our personal and inter-personal development in a professional environment.

Commentaries on Confucius’ Analects have been written for thousands of years, with each interpretation influenced by the context of that commentator. My context is one of a 21st century software developer, and although at the surface, software and philosophy may seem like utterly separate concepts with very little association; I hope to highlight the ways in which the Confucian Principles of Ethics are relevant to software engineers and how they can be used to further improve us.

Zhōng & Shù: Loyalty & Compassion

Confucius maintained that there was a single principle that joined his teachings, one which was never explicitly explained by him, but one of his students went on to interpret them as Zhōng & Shù. Loyalty and Compassion.

Now what does loyalty and compassion refer to in the context of software? Loyalty to the business? Empathy for the code reviewers? It is unknown even at the philosophical level what these concepts refer to specifically. And many interpretations of the Analects only multiply this problem.

However, it was believed that as one adopts various roles in life, where the relationships change with different people, loyalty is an obligation which is universally applicable. In one way, it can be described as the moral duty of doing what is supposed to be done. And compassion is the understanding of other people’s wishes.

“Respect yourself and others will respect you.”-Confucius

Loyalty

Loyalty more often than not in our field doesn’t apply to organizations but rather to people. Employees aren’t likely to make personal sacrifices because they believe they owe it to the company. This is not to say that employees don’t act in a manner that is in the best interests of their employer or client, however I believe they are more likely to feel devotion to the success and well-being of their team and their department.

Loyal programmers are made not found, and at an organizational level loyalty can be created by enabling your programmers and their teams to succeed.

This can be achieved in many ways:

Education: An abundance of education and training opportunities to encourage individuals and teams to grow.

Building a Healthy Work Environment: Removing distractions and toxicity to encourage thought, collaboration and growth.

Eliminating Ego: Motivate individuals to think critically , creatively and feel respected. This can be done by accepting a team’s consensus on “The right thing to do”. This in particular brings balance and builds trust between management and developers.

Ensuring Psychological Safety: Celebrate achievements and don’t punish failures. Set high standards for the team and the individuals and rewarding their innovation.

Compassion

The extension of one’s appreciation to try and understand what the other person in the opposite role would desire. For example, a Team Lead can do their best as leader to edify their team, but the use of empathy might remind them of their own experiences being micro-managed as a developer. This personal experience might encourage them to modify their practices to build trustworthy and loyal peers rather than blind followers.

This combination of Zhōng & Shù are equally essential to the establishment of an ideal team and to Confucius — an ideal society.

“The superior man thinks always of virtue; the common man thinks of comfort.”- Confucius

Rén: Humanness

When wishing to develop oneself — one helps to develop others. Cultivating rén in an organization is incredibly important in cultivating the other tenants we’ve mentioned.

Software and systems aren’t developed in a vacuum by an individual contributor, but by a collection of teams supporting one another. The longevity and success of software is directly related to the success of the teams. Team and department synergy should be the objective when we wish to achieve a certain goal. This synergy can be engendered by how we interact with other people.

The book Software Engineering at Google underlines the HTR pillars of social interaction; Humility, Trust, and Respect. These principles are applied at an interpersonal level, but also in leadership positions. Creating an atmosphere of humility, trust and respect is a two-way effort. That builds the virtues of ownership, accountability and responsibility.

“Learn avidly. Question it repeatedly. Analyze it carefully. Then put what you have learned into practice intelligently.”-Confucius

Lí: Ritual Propriety

The way in which we cultivate our virtues is through the way we practice and enact our rituals. For us, these are the ceremonies that define being a software engineer.

Healthy team practices foster the values which make a team successful. They should enhance our social cohesion by reinforcing the way in which we form respect, trust and joint accountability.

Retrospectives: encourage us to reflect on the value we bring and the process in which we deliver value. This facilitation of transparent communication and shared accountability enable us to build trust at an individual and team level.

Meetings with a Clear Agenda: Making the purpose of a meeting clear enhances the communication trust and competency trust of a team. Well defined meetings give us the confidence that the right topics are being discussed, the right people are attending to increase the efficacy of the meeting and the right results are concluded — further increasing a healthy reliance that these meetings are indeed productive.

Planning Meetings: Clearly defined requirements, scope, dependencies and vision. Enabling a consensus on the goals and the team capacity and clear achievable outcomes.

These are merely a few of the many rituals software engineers follow, but it is evident that they ensure we make our intentions clear, help us understand how we must interact with one another, and they allow us to foster personal and collective development with the encouragement of knowledge cultivation and continuous improvement.

Conclusion

As highlighted above there are many ways in which we can engage and interact with each other that allows us to grow as individuals and as a team. And although the world of a software engineer is definitely alien and far from that of ancient China, there’s a lot of similarity in how we should treat each other in order to achieve our common goals.

That wraps up this first chapter on the relationship between software engineering and philosophy. I’m hoping to write more articles in the future about this as I believe there’s still plenty more analogies to make and parallels here.

As always, thank you for reading this, and I hope you found it useful!

--

--

Bríd Moynihan

Software engineer in Ireland with an interest in technology, sociology, politics and writing about them and where they intersect