Reading 05: Engineering Disasters, Whistleblowing

On the morning of January 28, 1986 the Challenger space shuttle failed to launch and was destroyed.  The Challenger launched out of Cape Canaveral on an exceptionally cold morning.  The night before the launch, a NASA contractor Morton Thiokol reported to NASA that the conditions were too risky and they advised launching later.  However, because NASA did not want to postpone the launch, the shuttle departed as scheduled and ended up in a terrible disaster.  The problem with the O-rings was a known risk at low temperatures.  However, the O-rings had never caused a catastrophe before so the problem was cleared as “an acceptable flight risk.”  Although the part was not remade and was cleared, it was not cleared for nearly as low of temperatures as they were the morning of the flight.  Because of this wide disparity, Thiokol suggested to NASA that the launch had to be postponed.  It was due to NASA’s uncompromising need to launch on schedule that the warnings were ignored and the Challenger was destroyed.

One of the problems that led to NASA fatally ignoring these warnings was that the danger of the O-rings could not be conveyed to them with statistical data.  Because of the poor communication and lack of easily understandable data for NASA, the problem was swept under the rug.  The terrible consequences of this miscommunication are a lesson for the future.  When an engineer thinks that something might be amiss they are morally responsible of getting their managers and peers to understand the risks as well.  Groups cannot fall victim to tunnel vision, where because the entire group has preconceived notions they are unwilling to accept any new information.

Another lesson learned from the Challenger explosion is in the treatment of Boisjoly.  Boisjoly was a Thiokol engineer who was so concerned with the O-ring failing possibility that he went beyond telling NASA not to launch.  He took the protest public in front of the Rogers commission.  This public coming forward was also ignored.  Furthermore, Boisjoly was treated as a leper and was marginalized and loathed in his workplace.  However, it turned out that he was right.  After the disaster, Boisjoly took his private files and memos to the presidential commission so that the real problem of the disaster could not be swept aside during the investigation.  Later, he went to an NPR reporter with the information.  As a result of his coming forward, he faced retaliation.  Boijoly was taken off the investigation team and had to deal with hostility and anger.  Boisjoly was shunned, cut off from work, and blackmailed.

Boisjoly had his career and relationships destroyed.  He even ended up being diagnosed with PTSD from the events and never returned to Thiokol.  Even worse, all of his attempted lawsuits against Thiokol and NASA were dismissed.  From this brutal retaliation to whistleblowing, we face questions in ethical whistleblowing and its consequences similar to in the case of Snowden.  When whistleblowers inform the public of what the government is trying to hide, should they be ostracized?  On one hand, they are helping to inform the public, who deserve to be informed, and they help to prevent future disasters by raising awareness.  On the other hand, it is dangerous to reward whistleblowers for betraying the government and revealing protected secrets.  I think that the benefits gained from whistleblowing are valuable enough that whistleblowers should not be punished for revealing truths that should be public knowledge.

Reading 05: Engineering Disasters, Whistleblowing

Reading 04: Diversity, Codes of Conduct

I think that the lack of diversity in the tech industry is definitely a problem.  As several of these articles showed, beginning with the graphic about Google’s diversity statistics, the tech industry is dominated by white males.  However, I do not think that this is because white males are better at programming.  Right now, there is an imbalance in the industry that needs to be fixed.  As the book, The Difference, that Martin Fowler referenced in his article states, a diverse workforce is a better workforce.  Diversity helps bring together more perspectives, thoughts, and skills to problems and results in better work and better products.  Knowing this, I think that the lack of diversity in the tech industry is absolutely a problem and we should take steps to fix it.

Currently, some of the leading companies in Silicon Valley are taking steps to helping draw minorities and women into the programming world.  For example, Google, Apple, and Intel are all spending millions of dollars to invest in minority startups, organizations, schools, and other efforts in the hope that this will help minorities to move into the technology industry.  Additionally, other leading companies have added women to their executive teams and have made other steps to help minorities and women to thrive in their workplaces.  While all of these steps are great, and hopefully will help the progression toward a more inclusive and equal workplace environment, I do not think that they address the main causes of the problem.

To me, it seems like the cause of the lack of diversity in the tech industry is a deep rooted cultural one.  When I picture a computer scientist, I normally picture a white, nerdy looking male.  However, when I look around at my classmates, this is not what I see.  In movies and tv shows, programmers are almost always portrayed as nerdy with deep seeded loves for star trek, star wars, and video games.  In reality, this does not need to be the case.  I like star wars and board games, but am by no means obsessed with either and rarely play video games.  My understanding of the computer science culture is not what drew me into computer science.  I decided to major in CS because of a project I had that involved coding and was my first look at programming.  I found the logic puzzles fascinating and was instantly intrigued.  For people who have never experienced this, computer science is only the social construct of nerdy, video-game-addicted, scrawny or obese (not really in between) white males.  Understandably, this is not very attractive to woman and minorities.  It is scary to enter into an environment that is foreign and unappealing.  In the article about why Silicon Valley does not hire blacks, there were several accounts of black students who took a job in the Valley but then decided to leave because they did not fit in.  This seems like a circle to me, and it is hard to break.  Now that the industry is dominated by white males, it is hard to attract minorities and women into joining and helping balance out the workforce.  My only thought on how to fix this would be to start making computer science a mandatory class in high school so that all students would have an opportunity to experience programming before college in a comfortable environment.  I would hope that this would help people to enter into the field not because of the societal construct of a programmer but because of their first hand experience with code.  One schools have more minorities and women enrolling in CS, I think that naturally this would flow on to eventually correct the imbalance in industries.

Reading 04: Diversity, Codes of Conduct

Reading 03: Careers, Work-Life Balance

“Young people just have simpler lives,” Mark Zuckerberg, Facebook’s co-founder and chief executive, said in a talk to would-be entrepreneurs in 2007, when he was 23. “We may not own a car. We may not have family. Simplicity in life allows you to focus on what’s important.”

As I was reading through the links about family life for this week’s readings this quote shocked and appalled me.  Here, Zuckerberg states that not having a family allows him to focus on what is important, his career.  I have always felt that I do not fit in very well with the computer science community-well young people in general I suppose.  My friends called me a grandpa in high school and I would rather pull a tooth than go out to the bars at night.  Over the summer at an alumni event in California, about 20 computer science students said that they would rather live in San Francisco than in Silicon Valley because there was more going on.  One or two students disagreed with this and said they wanted to live in the Valley.  I disagreed with both and said I would prefer to live in a small nearby town and drive into the bustling valley.  Anyway, what I am trying to get at is that I am old at heart and often have opposite desires of my peers.  However, nothing about their preferred lifestyles has ever repelled me as much as this quote.  For me, family is of the utmost importance.  God and family.  Then way down the list would come my career.  I know I need to make money and find work that I enjoy.  I just would never pursue this at the cost of my family.  To me “what’s important” will always be my loved ones.

One example of this can be seen in my job search this year.  I started off the school year with an offer from Apple.  I loved the work I did at Apple this summer and really enjoyed my time in California.  Apple gave me a great offer.  I would love to return to Apple.  I have not accepted this offer.  Why?  My fiancee and I have been apart for four years.  We will be married in 18 months.  Knowing this, I have applied to companies where she is applying for grad school so that we can be together.  Over the past year, I honestly begin to count how many people have told me to take the Apple offer.  I swear I’ve heard it thousands of times.  Others of all ages do not understand how I could turn it down to be in the same city as my then girlfriend three years earlier.  I can only reiterate that to me, family is much more important than a job.

That being said, this week’s readings were hard for me.  All of the articles discussed the many difficulties of raising a family while working as a developer.  I don’t mind working long hours.  Over the summer, I found that I really enjoyed my job and was happy to stay there over 8 hours a day.  However, I was in California by myself.  Now, I find myself fearful of how my life will be a year and a half from now, when I am married and working a development job.  While some of the larger companies like Apple and Google appear to have solid paternity leave policies, it still seems like a very scary environment.  I do not plan to have children anytime soon but I hope that I will eventually and I hope that when I do whichever company I work for will be understanding.  I really hope that I will not have a horror story to share about the fight between work and family.  And if it comes to it, I hope I will recognize if work is keeping me away from my family too much and will be willing to take whatever steps I must to find the proper balance.

Reading 03: Careers, Work-Life Balance

Project 01: Ethics

The Code of Ethics for ND Computer Science students that Casey, Kyle, and I wrote is on Casey’s blog post at: https://caseyhanleyethics.wordpress.com/2016/01/28/code-of-ethics/

In this Code, we defined what we think are the code of ethics that Notre Dame computer science students should follow.  The computer science major is very different than other engineering disciplines so we sought to outline a code that reflects the unique challenges of CS majors.  For example, computer science majors can often find exact homework problems online.  There are many online resources for classic computer science problems that could easily be copied without ever thinking about or understanding the problem.  Additionally, there are code samples for every language for the vast majority of problems that students encounter.  Personally, I think that a very important part of being a computer science student is figuring out when to avoid reinventing the wheel.  In industry, I know that I will be expected to use existing code and will certainly fail if I try to recreate existing solutions from scratch.  With this in mind, it is critical that I learn when to use existing code and when to write my own during my years as a student.  Our code of ethics is our attempt to outline how and when students should use resources and when they should not.

Some of the major problems that computer science majors face are when and how to help each other, how group work should be handled, and when it is okay to use existing code.  As far as when to help each other, I think that collaboration is essential.  I think that students should help each other whenever possible, but should help at a high level-not help them write code.  When debugging, we said that it is okay to look at the other person’s code but you should try to help them understand how to interpret the debugger, not fix their code for them.

In group work, we split the work into projects and homework.  In homework, we believe everyone should understand the entire assignment and be able to explain each answer so that all learn the concepts.  In projects, on the other hand, I believe that you should not understand every aspect of your code.  It would defeat the purpose of working as a team if each member had to go through every aspect of the project.  Instead, you should learn to work as a group and trust your team to successfully implement the internals of a function.  You should be provided with interfaces or function documentation instead.  This is how industry works where it is not possible to look at the vast majority of a large scale project so this is ideally how students should learn to operate while in classes.  Additionally, we created two responsibilities for group members based upon their contributions.  We outlined that all members are responsible for contributing.  If a member does not contribute, the other members of the team are morally obligated to confront the student about it to make sure all learn and contribute.  On the other hand, if a student tries to dominate a group we stated that the rest of the group is responsible for reigning him/her in.

One last aspect of computer science that is a complicated issue is the availability of code online.  In general, we think that students should be free to use this code (as long as they reference it) under two conditions: 1) their professor does not prohibit it and 2) they do not take code that is the goal of the exercise.  For example, it is normally okay to take a drawCircle function if you are using it to make an interface in a project and would rather use an existing one or modify it than write it from scratch (a good thing).  However, if the assignment is to build core graphic functions to acquaint the student with a lower level library, then the student should obviously develop this function on their own or they would not get anything out of the assignment.

Project 01: Ethics

Reading 02: Hiring, Negotiations, Promotion, Mobility

Last school year, I was faced with a very sticky and morally questionable internship process. As many of the involved parties should not be named and I feel that I probably should not publicly give many details about the situation, I will unfortunately have to be vague in describing the situation. Here it goes:

Last fall, I began hunting for internships for the summer. The previous two summers I had worked for a geo-surveying firm in my hometown. While these internships were great and I may return to the company after graduation, I wanted to try working in a different location last year.  One of the companies I applied for, which I will refer to as Company A, invited me to interview with them through the Career Center. I interviewed with the company, thought the work sounded interesting, and was happy to receive an offer. However, when I received the offer I was in the midst of the interview process with Apple. I love Apple and thought that would be an obvious first choice for me if I had the opportunity, but I was not sure if I would get an offer from them. All of my previous jobs, as they often do in the world, resulted from connections more than they did a stellar interview. I know that I can produce high quality work as all of the places I have worked before have given me return offers and I have done well in school. However, I am not the most self-confident when it comes to developing and I doubted that I would be able to get through the technical interview at such a prestigious company as Apple. Regardless, I was determined to try because I really did want to work at Apple. Knowing this, when I received an offer from Company A I was happy but not set upon taking the job.  Unfortunately, Company A gave me a week to decide whether or not I wanted to accept the offer.  With so little time, I could not finish my Apple interview process in time to make a decision with all of the information.  Here is where the problem began.

I decided to call Company A and ask for an extension on the offer because I needed more time to think it over.  (During this call I did make a big mistake in saying that I was in the middle of the interview process with another company.) Company A told me they could not give me one. I called the Career Center and asked for their advice in this matter. Unfortunately and unbeknownst to me at the time, I spoke to a new employ who did not yet know the Career Center’s policies and told me that Company A was within the Career Center’s standards and that I would have to decide. I chose to accept it and verbally accepted Company A’s offer. A few days later I got back from break and got an email from Apple asking me to set up a time for a FaceTime interview. Now that I was at school, I had the opportunity to visit the Career Center in person to talk to them and ask them if I was still allowed to interview or not. Before I went there, I learned from my friends and confirmed on the Career Center’s website that all companies that hire Notre Dame students through the Career Fair must give the student until a much later date than I was given to decide if they don’t give the offer before some preset date (I don’t remember the exact dates but basically the policy is to prohibit exploding offers). Thus, when I went there the Career Center representative who helped me was shocked at the advice I had gotten and told me that I could continue my interview process in this rare case because Company A had violated Career Center policies and I had also been given the wrong information over break. I interview with Apple and got an offer. After that and with approval and help from the Career Center, I reneged on Company A and rescinded my verbal acceptance (I had not signed anything yet). Company A was understandably very angry with me and voiced this with some accusatory and threatening messages. It was a very uncomfortable experience in which I don’t think any party meant to do wrong but all involved acted in less than desirable ways.

From this story and from my other interviewing processes, I have developed some thoughts about interviewing in general. First of all, I found that most jobs come from connections.  While they are kept by having skill and worth ethic that allow you to prove yourself on the job, getting a foot in the door often comes down to who you know.  Secondly, interviewing can be extremely stressful as you must normally interview with all companies you are interested in at the same time and have to balance all of their timelines and potentially other’s timelines as well (I am currently trying to end up in the same city as my fiancee so I have to time my interviews with her grad school interviews so that we can hopefully have all of our options at the same time).  I also find technical interviews very challenging and am stressed about on the spot coding.  Lastly, I have found that if it is possible, I perform much much better at interviews when I am relaxed.  Now that I have offers on the table, I have been able to approach interviews much more casually and I think that this has helped tremendously.  Without stressing about coding, I do better.  If I am not worried about saying things that my interviewer may not like, I can be myself and talk about things that may be weird to mention (like when I talked about Magic the Gathering at an interview) but that show my true passions and personality.

Reading 02: Hiring, Negotiations, Promotion, Mobility

Reading 01: Hackers, Ethos

What is a hacker?

When I hear the word hacker I think of the movie and television depictions of nerdy individuals who can magically punch a few keys and enter into any computer system in the world.  While I have been to a hackathon, I do not typically relate the work “hacker” with one who creates cool new software, unlike many in our generation.  I do not know why but to me a hacker sounds like a bad thing.  Hacking seems like a crude description of forcing one’s way into something or even destroying.  I suppose hacking together snippets of code for a quick project could also make sense in this context but I do not particularly like the brutish connotation that the word hacker has in my mind.

Because of the bad connotations that the word has for me, I do not consider myself a hacker.  I like to think of computer science and development as more of a science.  I disagree that it is an art form.  I do not feel like I am painting an expressive picture with my code.  My mind works very logically.  Very often, I have difficulty with emotions.  I logically understand them and am perceptive at quickly identifying them but I think that my own mind works through logical progressions to reach these conclusions.  So maybe it is because of my inherently logical and slightly removed nature that I do not consider hacking an art or myself a hacker.  Instead, I prefer the term computer scientist or even software engineer.  Sure, last week we discussed whether software developers are worthy of the title of engineer, but I think they are.  Just as there are poor engineers in other fields, there are plenty of poor software engineers.  It is to be expected with the young field.  However, I still believe that software engineer or computer scientist is the better description than hacker.  A computer scientist builds new software with logic and patience, not by embracing their inner emotions and launching paint at a canvas.

One of the articles describes the word hack and how it can be a compliment or an insult.  The article describes a clever way of beating the system a hack.  Once again, I really do not like this term to describe this action.  I think it is a logical deduction or an unintended method for achieving their goal that goes outside of the limitations that were previously “known” to be true.  Running a 4 minute mile was not considered a hack of the human body.  It takes hard work and a certain level of skill to break limitations.  To me, it is not a hack but rather an insight that should be recognized.  Sometimes, the insight should only be recognized as expressing gratitude for exposing a breach and then fixing the system.  However, when the “hack” or newly found technique is safe and can be used to improve the system or other software, then the programmer should be commended for their new and clever solution to a problem in the computer science world.  This is not a hack to me.  This is a logical achievement deserving of recognition.

While I know that in modern culture the word hacker is used mostly complimentary, I have never liked the choice.  Instead, I think that any “hacker” is just a talented computer scientist who has a desire to learn from hands-on experience with systems and any discovery that they make is not unlike a major breakthrough in any other scientific discipline.  These so called hacks are clever and logic based methods of solving problems or utilizing systems and to me they are scientific discoveries, not hacks.

Reading 01: Hackers, Ethos

Reading 00

Why study Ethics in the context of Computer Science and Engineering?

Although most Universities do not require ethics, I am glad that Notre Dame does.  As many of our initial readings mentioned, the field of Computer Science is not as mature as most engineering disciplines but is nevertheless just as dangerous (I would say even more so).  While physical systems can be disastrous if they fail, computer systems are likely to effect a much larger number of people.  Furthermore, these systems can be attacked anonymously from any person anywhere in the world at anytime.  This anonymity and the scale of computer systems makes vulnerable computer systems much more dangerous than a poorly built physical system could ever be.

I believe that ethics needs to be studied for several reasons.  First of all, the world of computing is dangerous.  As I described above, the scale of computing far surpasses any physical system.  Additionally, computer science is still in development (pun intended) so moral norms have not been formed and many grey areas exist.  This can be seen in the 12 ethical dilemmas article from our readings.  These ethical dilemmas are not statements of what is wrong.  Rather, each of them are questions about what or how to deal with non-binary issues.  Additionally, these are very controversial issues with no accepted answer.  Questions about when to fix bugs, what to put in a log file, and what level of protection is enough varies from application to application.  As such, it is important to discuss these issues so that when we are handling information of real customers, we can be responsible with how we protect their data and how we handle their security.

Another ethical issue that I had not considered before reading the articles was that of correctness.  Often, software needs to be created quickly to meet deadlines.  In the rush to finish it, it is tempting and easy to cut corners or throw together existing code into a product that seems to work without taking the time to fully understand how the software works.  While this may seem like an okay thing to do because no harm is meant and the product appears to work as desired, this approach is actually morally questionable.  Depending on what product or application is being developed, this approach could lead to potentially terrible consequences and could cost the company or users a lot of money.  I think that it is important to discuss ethics in regards to issues such as these because without an established answer, these questions can be very difficult to figure out on our own.  By discussing them with our peers before we encounter the problems in the world, we will be better equipped to answer them in the most ethical manner instead of taking the easiest approach available at the time.

By discussing ethics, I hope that we can form ethical standards for many of the pressing issues in the field of computer science today.  I hope that our generation can set precedents that will help lead to a safe and secure future.

Reading 00

Introduction

My name is Luke Miller.  I am a senior CS major from Dayton, Ohio living in Siegfried Hall.  I have three brothers with whom I am very close.  My two older brothers were both chemical engineering majors at Notre Dame. My younger is in his first year at Ohio State.  In my free time, I enjoy reading, working out, playing volleyball, Magic the Gathering, board games, and watching movies and television shows (primarily superhero shows), and exploring with my friends.  I am recently engaged to my high school girlfriend, Olivia, and I plan to accept a development job for when I graduate at the end of this semester.  Last summer, I interned at Apple in Cupertino and did iOS development for the IS&T department.  The two summers before, I worked for Woolpert, a Geo-surveying firm in Dayton and created image processing tools for them.

I am studying Computer Science because I really enjoy the challenges that it presents, the logical flow of tasks, and the vast array of options available in the field.  In particular, I have found that I enjoy databases, machine learning, and designing algorithms for games.  Recently, I developed a deck-building algorithm for a card game that I play and this semester I hope to create an iPad app for a game that I have thought up that combines several of my favorite board games and PC games – Axis and Allies, Risk, Heroscape, Settlers of Catan, Advanced Wars, and Age of Empires.  What I look forward to most in developing this game is creating the AI that I will be playing against to follow different strategies and play in a competitive, predictable manner.

Some of the most interesting and pressing issues that I would like to discuss in this class include privacy, security, AIs, self driving cars, and IP laws.  In particular, issues concerning privacy and what should be done to protect individuals is important to me.  In this age, privacy is a very concerning issue for me.  In the ACM Code of Ethics, Imperative 1.7 defines the ACM’s thoughts on respecting privacy.  The imperative states that systems should collect only the necessary amount of information about their users.  The word necessary really stood out to me here.  I am sure that many individuals and companies would disagree about what is necessary to collect.  For example, Apple collects almost nothing about their users, even if the information could be used to better tailor devices to the owner’s needs whereas Microsoft would argue that collecting every keystroke that their user’s make is pertinent to creating the best product available.  I tend to lean more in the Apple direction in this regard but at the same time, the information can be used to create really cool features for products.  I think that this issue is one that deserves a lot of attention, especially in relation to where this information ends up.  I think that it is naive to believe that even information that is described as safe is actually ever protected forever and hope that regulations and moral guidelines will help lead the world to destroy/not collect information that should not belong to anyone other than one individual.

Introduction