Why are you here? Why do you sit at your desk, at home or at an office, and write line after line of code? What makes you tick? Is it an outlet for your creativity? Do you enjoy problem-solving? Is the mostly lonesome work attractive to your introverted nature? Is it a vessel for talking to customers? Are you fascinated by the structures of software architecture? Whatever the case may be, consciously or unconsciously, you found a reason, and now you write code.
Have you pondered, though, what your responsibilities are? What are your ethical obligations when typing away at your keyboard? We've all heard of the Hippocratic Oath (hopefully). It is an oath historically taken by physicians in which they adhere to a specific set of ethical and moral guidelines. Have you wondered, what is my oath? What are these ethical and moral guidelines I must follow for my profession as a software developer? Surely, common sense comes into play, at least in part. Obviously, it is unethical to create a virus, or to hack your buddy's ex-girlfriend's computer, or to work for Dr. Evil. Chances are, if you've thought about this for more than ten minutes, you've already come across the ACM's "Software Engineering Code of Ethics and Professional Practice."
Who would've thought? There already is a Hippocratic-Oath-ish document for us programmers. And who would've thought? It is more organized and has more structure than the actual Hippocratic Oath (In its defense, though, the Greeks wrote the Hippocratic Oath over two thousand years ago. Give them some slack.). It's comprised of two parts: A summarized version, and a detailed version. It boils down to 8 commandment-like aspirations. I will list them below, but you should also read the detailed version (link at the bottom).
1. Software engineers shall act consistently with the public interest.
2. Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.
3. Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.
4. Software engineers shall maintain integrity and independence in their professional judgment.
5. Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.
6. Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.
7. Software engineers shall be fair to and supportive of their colleagues.
8. Software engineers shall participate in lifelong learning regarding the practice of their profession and shall promote an ethical approach to the practice of the profession.
What a great start. You're probably reading through these aspirations thinking: "Hell yeah, I'm ethical as heck. I've been unconsciously following these guidelines for years. Through pure mind-universe osmosis ethics has imbued itself in my subconscious and I'm well on my way to reaching coder's enlightenment." But before you go on to pat yourself on the back thoroughly, take the following warning from ACM's own engineers: "Without the details, the eight aspirations can become high sounding but empty; together, the aspirations and the details form a cohesive code." So, as I said before, do proceed to read the detailed aspirations.
I want to, now, move deeper into one specific principle of the first aspiration:
"[Software engineers shall...] Approve software only if they have a well-founded belief that it is safe, meets specifications, passes appropriate tests, and does not diminish quality of life, diminish privacy or harm the environment. The ultimate effect of the work should be to the public good."
Upon reading the principle you'll again be tempted to assume you've been doing it right all along, and in fact, these texts seem to have their source in your own personal code of ethics. But let's think about it for a second. Let's philosophize.
It's easy to become engrossed at times in our own monkey-sphere. Limited flesh beings we are, it's difficult to care, or even think, about people we don't personally know. These days software reaches millions, maybe billions. If we can't be bothered to care for the beggar who sits outside our buildings, how can we bring ourselves to care for the ten-millionth user of an application we might have touched-up at some point? It's almost impossible, to be sure, which is why we've come up with a host of preventive mechanisms: Development and Quality Assurance environments, testers and testing tools, automated bots crawling through are apps clicking and typing away, finding vulnerabilities. These are all paramount in the development process, but it all starts in your hands. It all starts with your mornings, and your coffees, and your sleepless nights. It's you and it's me. How can we deal with the weight of the world as we reach to our keyboards, fire a bunch of synapses, and type?
Honestly, I don't have an answer, but it's worth thinking about. I warned you, we're philosophizing. I do encourage you, though, to occasionally step outside your bubble. Picture the following scenario.
You are a person with an intense case of Obsessive Compulsive Disorder (OCD). Your life has been going downhill since your diagnosis, two years ago. You can barely function in society, but you're trying, by god you are trying. You've been going to therapy, and it has been revealed to you that your over-thinking on the simplest decisions has caused your anxiety levels to skyrocket. Your psychiatrist has recommended that you leave inconsequential decisions to a coin flip. The practice will ease your stress and anxiety and will help with your overall wellbeing. It's an important step on your road to regaining your life. You never carry coins, though, you're a credit card guy. You don't have any coins to flip. Where to go? What to do? You download a random number generator on your phone and base your inconsequential decisions on whether the number is even or odd. The numbers on screen seem to favor odd numbers more frequently. "It can't be." You think to yourself. They're random. That's the name of the app! Days go by and weeks go by, and your OCD has convinced you that the government is making your decisions for you. Why are odd numbers more frequent that even numbers? The lizard people are controlling your life. You quit your job and you're back to square one. Only after an exhausting therapy session with your psychiatrist does he suggest that the app you're using may be defective, but by then it's too late. You have no money, no job, and no home.
This is an extreme scenario, to be sure, but it's not too far off from reality. Trust me, I know. And if a tiny application such as a random number generator can have such unexpected impact in an individual's life, what effects can a more complex application have?
Think about it. Ponder your key-presses. Be mindful of your next ";"
Link to "Software Engineering Code of Ethics and Professional Practice": http://www.acm.org/about/se-code