Relevance for Software Engineering
There is no doubt that software developers have a significant impact on our environment, community, and culture. Software tools influence how people live, communicate, and (sometimes) behave. This chapter emphasizes that these influences should be considered when one develops any software system. At the same time, it is important to determine the ethical considerations one should consider in the process of software development. The Code of Ethics of Software Engineering comes to address at least partially some of these issues and to guide software developers when sensitive and ambiguous issues arise.
This chapter attempts to highlight several guidelines, recommended within the framework of the Code of Ethics of Software Engineering, that one should take into consideration in the process of software development. These guidelines address both the development environment and the potential influence outside the development environment of what is developed. Although a code of ethics can be addressed on different levels (for example, individual, team, organization, and country), we limit the discussion to the individual level. We hope that the detailed discussion with respect to the individual level will establish a basis for the discussion about the application of the Code of Ethics of Software Engineering to the higher levels.
Codes of Ethics
Some communities of practice have a well-known code of ethics (The Code of Medical Ethics, for example). The role of such codes is to guide professionals on how to behave in situations when the right action may be unclear. The need for such a code arises from the fact that any profession generates situations that can neither be predicted nor addressed uniformly by all members of the community. At this stage, you may ask yourself, Does the software engineering community need a code of ethics? If yes, what situations are appropriate to be addressed by this code of ethics? What situations should be addressed by the law? This section starts by examining the concept of ethics in general. Then, we focus on the Code of Ethics of Software Engineering.
Ethics is part of the discipline of philosophy. The New Shorter Oxford English Dictionary defines ethics as the science (or set) of moral principles; the branch of knowledge that deals with the principles of human duty or the logic of moral discourse . Webster s Collegiate Dictionary adds that ethics is the discipline dealing with what is good and bad and with moral duty and obligation. Webster s Dictionary specifies that ethics consists of the principles of conduct governing an individual or group .
Although there is a distinction between the science of ethics and applied ethics (the application of the theories of ethics to the real world), it is not our intention here to go into detail with respect to this distinction. Rather, we focus on the application of the Code of Ethics of Software Engineering to real-life situations that software developers may face. In what follows , we focus on professional ethics and adopt the practical definition for the concept. According to this definition, ethics indicates how professionals should behave in situations that arise in their profession. This behavior should be based on moral norms and the professionals ability to discern what is right and what is wrong.
Suggest and discuss situations in which a code of ethics may disturb professionals work. What should be done in such cases?
Suggest and discuss situations in which a code of ethics may be abused. What should be done in such cases?
Using practical terminology, we might say that ethics guides daily professional behavior by values that are less formulated than a to do or not to do list of rules. In other words, we might say that a professional code of ethics, like the Code of Ethics of Software Engineering, reflects the moral norms of the profession. However, it is important to note that ethics is not based on rules that are formulated in terms of punishment .
In what follows, we examine briefly what a profession is, address the basics on which ethical norms rely, and understand the place of the code of ethics in any profession. This discussion is based on Asa Kasher s analysis of the conception of being a professional [Kasher02].
The proposed conception of being a professional consists of five basic layers :
Systematic knowledge of the relevant area.
Systematic proficiency in solving problems within the relevant area: a tool-box or problem-solving skills within the profession domain.
Constant improvement of that knowledge and proficiency, meaning the duty to keep up-to-date. Systematic knowledge and the skills are dated.
Local understanding of professional claims and methods in a way that enhances problem-solving ability. This layer refers to the ability to argue and reason about the professional activities and the ability to answer why questions. The importance of this understanding is reflected in situations in which the toolbox lacks an appropriate solution.
Global understanding of professional activity, understanding of the essence of the profession. Accordingly, ethics sets superior behavior standards. The main resources for any ethics are the professional dignity , the professional community, and the requirements of the surrounding social environments ( democratic values, for example).
For each of the aforementioned five layers, give an example with respect to software engineering.
When appropriate, organizations adopt their own ethics common to all the professions within the organization, and completes the code of ethics of each profession. The following discussion focuses on software engineering.