HW1: Chapter 1

25 Aug 2016

Ex 1.3

Software is not just a set of programs but also the associated documentation required to help the user understand, use, maintain, and perhaps evolve the programs over the course of that software product’s lifetime. An individual working alone on a personal program can get by just fine without documentation, but in any professional context, the programs that are developed must be understood by some group of people, probably co-developers as well as clients.

Ex 1.8

The idea of licensing for software engineering sounds potentially helpful, but I don’t think it would be possible. Software engineering has only been a discipline for around 50 years, whereas law, medicine, and other licensed professions have generally been around for orders of magnitude longer amounts of time. It sounds conceivable that when SE matures it could make sense to have a standard licensing process, but it seems clear that SE is uniquely unsuited to licensing. Even after SE has been around for centuries, I think it will still be true that software development changes much faster than law, medicine, or other practices. The growing complexity of software, the increasing diversity of applications, and the shrinking timeline of development cycles I think all would make a licensing requirement prohibitively restrictive…

I think there will always be rapidly changing frontiers of software engineering, but then it seems like certain practices might stabilize a bit. We might not care as a society if a new video game fails due to poor engineering, but we might wish for an avionics engineer to be held to the highest possible standard, assuming there are well-established standards for these disciplines. I think I changed my mind while writing this - certain applications of software engineering that are directly responsible for people’s safety and security would probably benefit from licensing requirements. A quick google search also made it clear to me that this sort of thing is coming quickly!

Ex 1.9

Public - It would be unethical for a software engineer to help Enron develop software to help fool public investors. Talk to your superiors about your concerns and/or resign if necessary.

Client and Employer - It would be unethical for an engineer working on a product for McDonald’s to deliver a sub-par product because you prefer Burger King. If you want a contract with Burger King, go get a contract with them.

Product - It would be unethical to rush a product to the client that has not been thoroughly tested. Suck it up and explain to the client that you need more time to deliver a safe and reliable product.

Judgment - If your coworker offers a genuine improvement to the code you wrote, swallow your pride and incorporate that improvement for the benefit of the product you are working on. It would be unethical to refuse the revision for the sake of stubbornness.

Management - It might be tempting to direct your team’s efforts to the next most lucrative contract, but it would be unethical to neglect your contractual commitments to maintaining and possibly evolving previously developed products.

Profession - No one likes a drunk software engineer. Leave your work badge at home when you go enjoy yourself after a long day. Also, be an active member of professional organizations that help bring awareness to the profession and advocate for engineers such as yourself.

Colleagues - Don’t steal intellectual property. Give credit where credit is due. It would be unethical to use open-source code that someone else developed as if it were your own code.

Self - Continue to develop your skills and stay on top of new things happening in the field. It’s unethical to produce the same old products you were producing 20 years ago, because the needs of your clients are surely not the same as they once were.

Ex 1.10

The default guidelines for ethical behavior would be your country’s laws and how they’ve been interpreted by the courts. Just as a doctor developing new surgical techniques should know the relevant laws like the back of her hand, a software engineer should be fully aware of the laws related to his work. If the government-run data collection program is supported by legislation and legal interpretation, then this is a decent general guideline suggesting that your work on that program is ethical.

That said, sometimes the ethical choice involves breaking the law. This is why we have whistle blower laws for example that protect employees who break their confidentiality contracts to report something unethical in their company. Before such laws, whistle blowing was no less ethical. The tricky thing is that you better be sure that your choice to break the law is in fact ethical. Perhaps there is some greater public benefit, as Assange and Snowden apparently believe there is, to publicizing and damaging such government programs. This isn’t really anything new…I read somewhere that the Air Force officers downstream in the nuclear launch process are chosen for their unwillingness to question authority. I think that an engineer in the business of public data collection should decide whether he or she is ok with that. If it is legal, then it is probably ethical. If it’s legal but unethical, that person has the option of resigning and/or whistle blowing.