Reading 04

I think that Codes of Conduct have their purpose, which is different for each kind of group listed in the question: companies, organizations, and communities. Obviously, companies need to provide some form of a code of conduct; their human resources department probably requires it. In a company, this is very useful. A code of conduct can help ensure a comfortable working environment, and thus keep employee productivity high. In a smaller community, such as an open source project, I believe the value of the Code of Conduct diminishes significantly. At a company, workers are spending a large amount of their time together. More importantly, they must share resources such as bathrooms and fridges. In an open source community, where all communication happens online, this is not an issue. Therefore, the scope of the code of conduct is diminished significantly. It is now attempting to regulate simple textual communications. This reminds me of the statistic that words only compromise 10% of human communication, with the other 90% being boy language and tone. Similarly, the vast majority of the usefulness of a code of conduct lies in its discussion of physical interactions and workplace etiquette, as opposed to textual conversation. I am of the opinion that most communities do not need an explicit code of conduct as such, but can rather rely on their community leaders or moderators to ensure a productive and valuable environment.

 

That is not to say that a simple code of conduct is invaluable to these groups. However, looking at some of the resources provided, these codes try to cover a much larger amount of topics than I think are necessary. The Apache and Linux kernel codes of conduct are good examples of simple, to the point discussions on community behavior. These are in stark contrast to the Geek Feminism code of conduct called out in the article “An anonymous response to dangerous FOSS Codes of Conduct” which attempts to explicitly list as many possible forms of inappropriate behavior as possible (ex: “simulated physical contact”). This is a losing battle, and it is better to rely on the community to create an air of collaboration than to bring up as many points as possible and threaten retribution. This instead creates an air of fear in the community as members attempt to ensure they are not breaking any rules. Furthermore, relying on moderators and the community at large as opposed to a document is a much more versatile approach, as it allows new standards and expectations to be ingrained in the identity of the group as quickly as the people can agree, as opposed to the alternatives of either altering the code on a consistent basis (probably with some form of voting or other oversight) or simply not paying attention to change at all. That is why I believe that it is best for online communities to have a short, general code of conduct as opposed to a list of laws. To liken it to government, I prefer the judiciary to the penal system.

Reading 04

I think that Codes of Conduct have their purpose, which is different for each kind of group listed in the question: companies, organizations, and communities. Obviously, companies need to provide some form of a code of conduct; their human resources department probably requires it. In a company, this is very useful. A code of conduct can help ensure a comfortable working environment, and thus keep employee productivity high. In a smaller community, such as an open source project, I believe the value of the Code of Conduct diminishes significantly. At a company, workers are spending a large amount of their time together. More importantly, they must share resources such as bathrooms and fridges. In an open source community, where all communication happens online, this is not an issue. Therefore, the scope of the code of conduct is diminished significantly. It is now attempting to regulate simple textual communications. This reminds me of the statistic that words only compromise 10% of human communication, with the other 90% being boy language and tone. Similarly, the vast majority of the usefulness of a code of conduct lies in its discussion of physical interactions and workplace etiquette, as opposed to textual conversation. I am of the opinion that most communities do not need an explicit code of conduct as such, but can rather rely on their community leaders or moderators to ensure a productive and valuable environment.

 

That is not to say that a simple code of conduct is invaluable to these groups. However, looking at some of the resources provided, these codes try to cover a much larger amount of topics than I think are necessary. The Apache and Linux kernel codes of conduct are good examples of simple, to the point discussions on community behavior. These are in stark contrast to the Geek Feminism code of conduct called out in the article “An anonymous response to dangerous FOSS Codes of Conduct” which attempts to explicitly list as many possible forms of inappropriate behavior as possible (ex: “simulated physical contact”). This is a losing battle, and it is better to rely on the community to create an air of collaboration than to bring up as many points as possible and threaten retribution. This instead creates an air of fear in the community as members attempt to ensure they are not breaking any rules. Furthermore, relying on moderators and the community at large as opposed to a document is a much more versatile approach, as it allows new standards and expectations to be ingrained in the identity of the group as quickly as the people can agree, as opposed to the alternatives of either altering the code on a consistent basis (probably with some form of voting or other oversight) or simply not paying attention to change at all. That is why I believe that it is best for online communities to have a short, general code of conduct as opposed to a list of laws. To liken it to government, I prefer the judiciary to the penal system.

Reading 03

Work life balance is an issue that has been on my mind a lot recently. As I begin my career after graduation, I am trying to be very conscious that I do not get so caught up in my work as to make it my life, like so many new tech workers seem to have a tendency to do. At a high level, I see no reason why employees, both men and women, can’t “have it all” so to speak. What it really comes down to is both the company and the employee settings reasonable expectations from a professional perspective. That was what stood out to me the most about Anne-Marie Slaughter’s story: the insane requirements of her job in Washington. She was expected to live states away from her family, work extremely long hours, and only go home on the weekends.

 

It seems to me very reasonable to be able to manage a 40 hour work week and a family. The problem arises in the US work place when “ambition” and “dedication” are equated with spending 60, 70, or 80 hours a week at work. As Vicky Shabo said, “We’ve seen that upper income, well-educated workers don’t take leave because they think they will be viewed negatively, won’t be taken as seriously, their commitment will be questioned, and they will lose out on opportunities for advancement.” This is where the real issue arises with “having it all”. Being ambitious is perceived here as making your work your life, and yet now people are surprised when they can’t also live a family life at the same time. This requires change on two fronts: public perception and company culture.

 

First, the public needs to accept that people can be dedicated to their job and yet still exist outside of it. Its so interesting that at work people are often expected to multitask, and yet when those same employees do it in life, people call them uncommitted. People need to be able to recognize that those who truly have their lives together are the ones who have established a balance. Secondly, companies need to recognize that balance is good. I am a firm believer that overexerting at work leads to decreasing returns. In my experience, its necessary to take breaks and clear your head, or else you will get stuck on problems. I would also be remiss to not mention the effect that burnout has on employee performance, and this concept seems particularly relevant to software engineering as so many people have issues with it. Companies should actively encourage a balanced lifestyle instead of subtly encouraging employees to work constantly. I don’t mean they should force workers to work shorter hours, as this is obviously less practical. Rather, they should make a life outside of work part of company culture. Have outings and family events at work, offer good vacation and maybe travel stipends to encourage workers to be active outside the office. This will lead to happier, more productive workers. This combined with a US culture shift can open the opportunity for workers, both male and female, to truly “have it all” and balance a strong career and a good family life.

Project 01

Code of ethics: https://caseyhanleyethics.wordpress.com/2016/01/28/code-of-ethics/

 

The code of ethics we wrote is focused on addressing the unique situations that computer science students face in academia. These include the issues of sharing code, stackoverflow, and the frequent use of group projects as class assignments and measuring sticks. It attempts to eliminate the grey areas that are often interpreted or enforced differently from professor to professor or student to student. It also tries to be both strict, but allowing where necessary to allow for future expansion as more issues are sure to arise in this nascent subject. This is both a strength and a weakness, as described in part below.

 

The key weakness that I see in this code of ethics is that it leaves certain things, such as the validity of code taken from the internet (section 2.2), up to the discretion of the professor or other faculty member. We discussed this at length when writing the code, and were not able to see a reasonable way to avoid the discretionary clause without creating extensive rules that seemed far outside the boundaries of a general code of ethics. In reality, all ethical codes rely on both the students and the faculty to remain accountable, and so it is completely reasonable to leave parts of this code specifically up to discretion. Another area that is unfortunately vague is the group work section of the academic code (section 2.4). The vagueness here stems from the generality of the rule. Group projects can be extremely varied with regard to group size, project length, scope, and many other factors. The code refers to group members not performing their expected amount of work, which is again completely up to the judgment of the team members. One way to help clear this up would be to formally write up expectations (or even a code of ethics) for a project when it is started. This is obviously not necessary for all group work, such as a shared homework, but for larger semester projects it can help avoid devastating miscommunication. So, I do not view these issues as problems with the code, but rather as areas for expansion and reusability in the future.

 

I think for computer science students, a specific code of ethics pertaining to the subject matter can be very useful. Computer science is a fledgling field of study, and often does not clearly fit into established academic norms. This is well exemplified in the open source world and its implications on student work. A new code of ethics can help to clear things up for both sides as to what actually qualifies as academic dishonesty. Today, it often feels that these kinds of decisions are left mostly up to the professor. Its an interesting thought to consider ever department creating their own specific code and policies. While it probably isn’t necessary for well established studies, for computer science I think it would help to put a lot of students’ minds at ease. Ultimately, that’s the real goal of a code of ethics: to help people be knowledgeable and comfortable acting in a virtuous manner.

Reading 02

I think there is a sentiment that a lot of software engineers agree with, that technical interviews are not exactly ideal, and I firmly agree. I have participated in both internship and full time interviews at a plethora of top tech companies, and I also helped lead mock technical interviews at Notre Dame the past fall semester, so I think I have some qualifications to discuss the process. To me, the traditional technical interview of whiteboard coding algorithmic challenges does not accurately reflect a candidate’s proficiency with programming or likelihood of success. For one, very few programmers will actually need to implement these kinds of algorithms and data structures in their jobs – standard libraries have become so expansive that they cover virtually all of this. For another, these kinds of interviews can (must) be prepared for in advance. Successful whiteboard coding is often just as much an indication of the level of preparation a candidate put in as their actual coding ability. This system favors those who have the time and knowledge to put plenty of time into preparations, rather than those who have purely practical knowledge and experience.

 

I have had several interviews that deviated from the standard Cracking the Coding Interview questions. My favorite of these was one that caught me completely by surprise – a debugging question. I was given an example bug submitted by a user, such as, “Webpage X hangs on my computer”, and was asked to walk through what my debugging process would look like. I could describe my process to the interviewer, and ask questions pertaining to the results of my debugging, for example, “Did the application throw any exceptions?” The interviewer would provide answers that would guide me toward the cause of the bug that they had in mind. This interview question encompasses a much better interview in my opinion, for both the company and the candidate. It requires collaboration between the interviewer and the interviewee, and also puts them in a much more real-world scenario. Quite often team members work together and bounce ideas around to solve bugs, and this type of interview opens the door for a trial of that type of cooperation. It also really helps the interviewers be able to analyze the thought process of the candidate, as this type of debugging requires out loud thinking and answering questions. This is advantageous to interview candidates as well, as many people have trouble vocalizing their thought process while coding, but here it is more of a conversation than a monologue.

 

There are many more types of questions that help to form a broader perspective on a candidate’s ability to code and work with a team, such as presenting past projects, high-level design questions, and pair programming interviews. While the current system is not inherently bad or unethical, if the software industry wants to believe itself as a meritocracy as people so often believe, we need to improve it. In order to get the best people, we must learn how to find and judge who are the best people, and always keep in mind that different people are great at different things. A great software team needs the balance of not just a person with strong algorithmic skills, but debugging, communication, and platform specific skills as well, to name a few. Adding new types of questions and styles will help in this endeavor.

 

Reading 01

I would like to tackle question three, and specifically discuss the interesting disparity between professional ethics and real world effects. Of the three people listed, when considered from a professional ethics standpoint, I believe that Richard Stallman is the most ethical. His work in GNU and the open source movement should be considered the paramount of professional ethics. This fits in with the original description of the hacker ethos. Stallman worked to create communities where anyone was welcome to join and contribute, much like what was described in the provided article “The conscience of a hacker.” These were communities of learning and teamwork, and also of incredibly effective problem solving. This too fits in with the hacker ethos, as hackers consider themselves artists and problem solvers, working to change the world for the better. Open source communities are one of the best ways to do this, as they are not governed by profit margins or share holders, but only by the community and a simple set of rules and expectations. So, while Stallman’s work doesn’t fall into the realm or appear particularly relevant to traditional workplace ethics, in the eyes of a hacker, he has been a saint.

 

I think the question of which of those people has been the least ethical is a much more difficult one, as I would not consider any of these leaders particularly unethical. I would have to choose Bill Gates here, simply because of Microsoft’s lack of contribution back to the community. They have also had some cultural issues and used to use stack ranking, although not all of these issues of course are the result of Gate’s leadership. However, when considering who has had the best effect on the world, the answer is obviously Bill Gates.

 

Bill Gates, and his Gates foundation, is one of the most incredible philanthropic efforts in modern history. Gates, along with Warren Buffet, have agreed to contribute most of their wealth to charity before their deaths. Furthermore, as mentioned in the readings, the foundation is a great implementation of the hacker ethos in a charitable organization. Setting aside its large size, Gates works around existing organizations to identify need areas and pursue paths that can solve these major issues. Even better, he will often take on projects or possible solutions that would be too expensive or risky for other organizations to pursue. In this way, he acts as something of a mix between a government providing research grants and a charity providing assistance to those in need.

 

While the change of question moves Mr. Gates to the top of the list, it does not shun any of the other people on the list. Mark Zuckerberg is well on his way in following the footsteps of Bill Gates with his recent publication “A letter to our daughter”, and he too has the resources to make powerful change. Richard Stallman too has made some very sizeable and positive changes to the world. Large companies such as Google are beginning to endorse open source software for some of their own work, and as these advanced technologies are released for others to utilize, the bounds of technology will grow even faster. So, in the end, all three of these men are both ethical and moral, but the measurement can change depending on if you are considering a professional standpoint or a human standpoint.

Reading 00

I would like to address the third question, and assert that Computer Science is both an art and an engineering discipline, but not really a science. I would like to address these claims on a point by point basis, starting with the classification of Computer Science as an engineering discipline.

 

Perhaps the most important aspect of Computer Science is its engineering qualities, precisely because they have been so overlooked. I remember seeing a quote online once describing how if cars or bridges failed anywhere near as often as computers did, then the world would be in tatters. This is a not a mark against software engineering, but rather a desperate plea for it. So many programmers now focus on getting things to work quickly that they forgo robustness and push things out before they are ready. I witnessed this in my internship over the summer, where a UI testing framework that the company was using was not robust enough to handle our extensive test suite. It had inexact and feeble measures internally, such as timed actions, that made it slow and unpredictable. This led to “flaky” or erratic tests which would fail for no reason. The fact that this was one of the most popular testing frameworks available makes this even scarier. Fortunately, no lives were put at risk in this case.

 

The far scarier case is in the programming of real machines, such as the Therac-25. This machine had some minor programming issues that led to ineffective safeguards, and eventually lethal doses of radiation given to innocent patients. Here again, it is extremely concerning that this machine was let out into the wild without the proper engineering practices used during its development.

 

I view failures like the two described above as a sign that Computer Science as a general discipline is indeed a form of engineering, even if it has often not been treated that way. It is an ethical responsibility to treat it with the respect that we would other dangerous, physical engineering tasks like bridge building.

 

Secondly, I do believe that Computer Science can also be an art form, even as I call for a stronger engineering practice to arise around it. As Karlie Kloss said, “Coding is better than a superpower.” It allows you to create anything your mind can imagine, thereby giving you powers that have hitherto no existed in the human repertoire. I would classify this ability as art. Ultimately, what a person can create is really limited by what they can imagine less than what they cannot do at this point. Disregarding the obvious impossibilities (omniscient AI, giant data mining, etc) any experienced person can create any application they can imagine. Ultimately, this is what qualifies something as an artform – the ability to have pure expression of an idea. I think this can be especially seen in video games, where gameplay programming can go hand in hand with a story to tell. Here, everything from the art style to the interactions and AI of the enemies contributes to the look and feel, or artistry, of the game. This implies that software engineers also have an obligation to keep an open mind to new ideas to keep the art form alive.

 

Introduction

Hi! My name is Kyle Koser, and I’m a senior Computer Science major from Phoenix, Arizona studying at the University of Notre Dame. After graduation, I will be working at LinkedIn in California on their mobile infrastructure team. I’ve been interested in CS and programming since I was little; I started teaching myself programming with Liberty Basic in 4th grade and fell in love with the infinite possibilities and creative power it presents. Growing up I dabbled in various technologies and eventually began to specialize in mobile applications (iOS). In high school I purchased a developer account and began making apps in my spare time.

During my time at Notre Dame, I have done my best to be involved in the CSE happenings around campus. Freshman year, I participated in and won the Notre Dame hackathon. This led to my position as a developer on the Notre Dame mobile app, where I have created many features, most recently the O’SNAP module. I have also served as President of the ACM/Computer Club and as a TA for the Fundamentals of Computing class taught to new CS majors.

One of my passions in CS is hackathons. I try to participate in some every year, and promote them as much as possible. Last year I helped organize Irishhacks, the Notre Dame hackathon, and have led student trips to other hackathons such as MHacks and HackIllinois. I love the creativity and confidence that flows at these events. Its so encouraging to see new programmers learning and the excitement that they have.

From this class I would really like to discuss the implications of big data, especially since LinkedIn has so much data at its disposal. I would also really like to discuss workplace issues and etiquette. I feel these are the best topics to help me be prepared for my work after graduation, and also two areas where discussion and past experiences will be most important in the studies.