(Adapted with permission from An Introduction to Software Engineering Ethics by Shannon Vallor and Arvind Narayanan.)
Before starting this experience, please read What do we mean when we talk about ethics?.
Each professional society of engineers adopts and enforces its own codes of practice, including codes for ethical practice; for computer science in general, the standard is the ACM Code of Ethics. ACM also publishes a code specific for software engineering: the Software Engineering Code of Ethics and Professional Practice.
These codes are not meant to serve as formal checklists or exhaustive accounts of how to be an ethical engineer in any given situation; the latter can only be determined through the engineer’s skillful, sincere and habitual practice of ethical reflection, analysis and deliberation in his or her professional life. Ethical codes are just one tool that help us to “develop an ‘eye’ for what would be appropriate” in various circumstances. As another scholar puts it, “The principles of the code do not constitute an algorithmic Turing machine that solves ethical problems. Professional judgments are still necessary.”
Good judgment, what Aristotle called phronesis or ‘practical wisdom’, is something that is acquired through a combination of experience, good habits, and conscious attention to ethical concerns. Ethical rules and codes are no substitute for it, nor are they meant to be. In fact, such codes can only be used effectively by persons with good judgment. The codes aim simply to express as fully as possible the scope of professional actions governed by ethics and to indicate the specific ethical duties that engineers of the highest professional standing expect their present and future colleagues to respect, and to fulfill.
In describing the character of exemplary software engineers, one scholar identifies seven qualities of ‘superprofessionals’ who embody the highest ideals of their field: A strong sense of individual responsibility, acute awareness of the world around them, brutal honesty, resilience under pressure, a heightened sense of fairness, attention to detail while maintaining perspective, and pragmatism in applying professional standards. Each of these qualities contributes to the practical wisdom that allows us to apply ethical codes intelligently and successfully. Yet “Superprofessionals behave ethically not because it’s prescribed by a code of conduct, but because not doing so would violate their personal professional standards.”
Read over the ACM Code of Ethics and the Software Engineering Code of Ethics and Professional Practice. Which code do you think is more helpful to you? Why?
To reiterate: the codes do not “constitute an algorithmic Turing machine that solves ethical problems.” They are written by humans, and so they may themselves contain “bugs”. Take a moment to consider the potential shortcomings of these code. Are there ethical obligations you adhere to that are not listed in these codes? Do you find shortcomings with any of the ethical standards listed in the codes?