I love reading about ancient Roman history and I also love reading about software design. Occasionally those two areas of interest smash together in my brain and weird ideas come out. This post is one of those weird ideas, I'd like to introduce you to Janus, the god of software.
Janus is the ancient Roman god of beginnings, gates, transitions, time, doorways, passages, and endings. As the god of transition Janus presided over the beginning and ending of conflict, and hence the doors of his temple were open in time of war, and closed to mark the peace throughout the ancient Roman republic.
In Latin Janus is spelled Ianus and Cicero explains the etymology of the name as being derived from the verb ire, meaning to go. From Ianus we get the words ianua, which is door, and ianitor, which is janitor. Saving the topic of janitor being derived from Janus for later, we can begin to see that Janus embodies the idea of transitional movement, which we will call change. Extrapolating one step further we can say that Janus is the god of change.
In his Clean Code series, Robert Martin (a.k.a. Uncle Bob) talks about the primary and secondary values of software. Uncle Bob states that software's secondary value, which is the type of value we are most familiar with, is that our software does what our customer wants it to do today. Our customers typically have this secondary value in mind when they evaluate what we deliver to them.
However, Uncle Bob claims that our software's primary value is that it is soft, i.e. it is able to meet the changing needs of the changing customers. This statement has a profound impact on how we both interact with our customers and write our software. It is this idea of change that is core to the principles of agile software development.
Janus is typically depicted as having two faces, one looking into the past and one looking into the future. As software developers we don't have the luxury of being able to look into the future and so we have to move forward knowing that change is inevitable. We account for this inevitable change by cleaning our code as we write it, so that our code is able to embrace the changes as they come.
So let's embrace Janus as the ancient Roman god of software development. Janus embodies change and as software developers we need to embrace change. Closing the etymology loop, we saw before that the word janitor comes from combining Janus with the suffix -tor, meaning "caretaker of a building, person employed to see that rooms are kept clean and in order". As software developers we act as janitors of our code, caretakers focused on keeping it clean and in order. It is by being janitors of our code that we are able to deliver on our software's primary value.
Jon McBee is the Founder and Managing Partner at Composed Systems and is a Certified LabVIEW Architect, Certified LabVIEW Embedded Developer, Certified TestStand Developer, an NI Certified Professional Instructor, a LabVIEW Champion, and a Certified ScrumMaster