Software Engineering Ethics
Introduction
The ethical implications of software engineering are vast and complex. It is a topic that deserves a much longer discussion than we can provide here. However, it is essential to understand the importance of ethics in software engineering and to be aware of some of the key ethical considerations that software engineers face.
Software engineering touches almost every aspect of our lives. From the software that powers our smartphones to the algorithms that determine what we see on social media, software engineers have a significant impact on society. With this impact comes a responsibility to consider the effects that their work has on the world around them, both positive and negative.
Bugs and defects in our systems have an impact that is more than just an abstract issue with a piece of software. They can have real-world consequences, from financial losses, to loss of privacy, to loss of life. Software engineers must consider the ethical implications of their work and strive to create software that is safe, secure, and reliable.
Code of Ethics
As a profession that has such a significant impact on society, software engineering has developed a code of ethics to guide the behavior of software engineers. The Software Engineering Code of Ethics and Professional Practice, developed by the IEEE-CS/ACM Joint Task Force on Software Engineering Ethics and Professional Practices, outlines the ethical responsibilities of software engineers. The code is based on eight principles:
- Public: Software engineers shall act consistently with the public interest.
- Client and Employer: Software engineers shall act in a manner that is in the best interests of their client and employer consistent with the public interest.
- Product: Software engineers shall ensure that their products and related modifications meet the highest professional standards possible.
- Judgment: Software engineers shall maintain integrity and independence in their professional judgment.
- Management: Software engineering managers and leaders shall subscribe to and promote an ethical approach to the management of software development and maintenance.
- Profession: Software engineers shall advance the integrity and reputation of the profession consistent with the public interest.
- Colleagues: Software engineers shall be fair to and supportive of their colleagues.
- Self: 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.
These principles provide a framework for ethical behavior in software engineering and help guide software engineers in making ethical decisions.
A longer version of the code of ethics can be found here.
Examples of Ethical Dilemmas
Historically, the software engineering industry has not done a great job of considering the ethical implications of its work. There have been many examples of software projects that have had negative consequences for society. In other professions, such as medicine or law, there are well-established ethical guidelines that help guide professionals in making ethical decisions. Software engineering is still catching up in this regard, but is making strides to improve.
Volkswagen Emissions Scandal
One of the most high-profile examples of an ethical dilemma in software engineering is the Volkswagen emissions scandal. In 2015, it was revealed that Volkswagen had installed software in its diesel cars that could detect when the cars were being tested for emissions and adjust the engine performance to pass the test. In normal driving conditions, the cars emitted up to 40 times more nitrogen oxide than allowed by law. The scandal had far-reaching consequences for Volkswagen, including billions of dollars in fines and a loss of trust from consumers.
Some programmer at Volkswagen had to write the code that enabled the cars to cheat the emissions tests. Do you think they knew what they were doing was wrong? Should they have refused to write the code? Should they have reported the issue to their superiors or to the authorities?
It might make us feel better to point fingers at company management, but that isn't a good excuse. As software engineers, we have a responsibility to consider the ethical implications of our work and to speak up when we see something that is wrong.
It's easy for me, as a senior engineer, to say that the programmer at Volkswagen should have refused to write the code. But I know that it's not always that simple. Refusing to do what your boss tells you to do can have serious consequences, including losing your job. It's easy to say that you would do the right thing when you're not the one facing the consequences.
There's no easy answer to this question. It's a difficult situation that, hopefully, most of us will never have to face. But it's important to think about these issues and to be prepared to make the right decision when the time comes.
Patriot Missile Failure
A classic example of a software defect with real-world consequences is the Patriot missile failure during the Gulf War in 1991. A software defect in the missile's guidance system caused it to fail to intercept an incoming Scud missile, resulting in the deaths of 28 American soldiers and injuries to over 100 others. The defect was caused by a rounding error in the software that caused the missile's accuracy to degrade over time.
The missile system was using a 24-bit fixed-point number to represent time in tenths of a second. The time was converted to seconds by multiplying by 0.1. However, the conversion was done using an integer operation, which caused a small error to accumulate over time. After 100 hours of continuous operation, the error was around 0.34 seconds, which was enough to cause the missile to miss its target.
While this is an extreme example, it illustrates the potential consequences of software defects. If I make a mistake in my code, it's unlikely to result in the deaths, but it could certainly result in closed businesses, lost jobs, or other negative consequences. Software engineers must take their responsibility to create reliable software seriously.
Cookie Acceptance Pop-ups
HTTP cookies are small pieces of data that websites store on a user's computer to track their activity. They are commonly used for things like remembering login information or tracking user behavior for advertising purposes. When they were originally introduced in 1994 by Lou Montulli, they were intended to be a useful tool for web developers to store user preferences and other information. He wanted to reduce the amount of data that websites had to store on their servers, which would make the web faster, and improve privacy.
Companies quickly realized that they could use cookies for all sorts of tracking purposes, and they started using them to track users across the web. This led to the rise of the online advertising industry, which relies heavily on tracking users' behavior to target ads. New businesses were founded based on this functionality, and the web became increasingly reliant on tracking users' behavior.
When Lou realized what was happening, he was horrified. He had created cookies to improve privacy, but they were being used to invade privacy. He was left with three choices:
- He could do nothing a let companies do whatever they wanted with cookies.
- He could ban cookies entirely, which would break many websites and destroy businesses.
- He could add a feature to browsers that would allow users to block cookies, which would give users control over their privacy.
He chose the third option, and the cookie acceptance pop-up was born. Now, every time you visit a website, you are likely to see a pop-up asking you to accept cookies. This is a direct result of Lou's decision to give users control over their privacy. It was the best of bad options.
Conclusion
Software is so pervasive in our lives that it's easy to forget the impact that it can have. Software engineers have a responsibility to consider the ethical implications of their work and to strive to create software that is safe, secure, and reliable. The Software Engineering Code of Ethics provides a framework for ethical behavior in software engineering and helps guide software engineers in making ethical decisions. By following the code of ethics and considering the ethical implications of their work, software engineers can help ensure that their work has a positive impact on society.