Learning the Fundamentals

13 May 2021

Software Engineering

Having had a basic understanding of software engineering at the start of this semester, ICS 314 helped me understand the fundamentals and concepts that come with this career path. First off, this class was very engaging and exposed us to a lot of real world situations that we, as computer science students, would find useful. I think this is a key component every class should have implemented in their course if they want to ensure that students will have a lasting impression on what they were taught. That being said the key concepts that stood out to me personally would have to be on Agile Project Management and Ethics in Programming.

Agile Project Management

The concept of project management that we learned in this class is basically the foundation of how all projects should be treated. Completing a project is meant to be seen as a marathon rather than a sprint, with the efficiency of completing many smaller tasks that build up to the intended end result. We utilized this concept during our final group project where each group had to create a web app for the UH Manoa campus that makes use of real life data. For my group specifically, we made an app that allowed users to view vendors on campus as well as their menus and location (a more detailed overview can be found here).

We were able to complete this project efficiently with the help of the github project board, where we created small tasks that led to the completion of a bigger goal which we called milestones. The exposure of collaborating with others on a project is useful for computer scientists as it is a common approach for those who are looking to create web applications/programs as well as game development. Not only is it a benefit as a computer scientist, but also to life in general as there will be more situations where we will have to work with others and being efficient in completing tasks should be the approach to take for a productive and satisfying result.

Ethics in Programming

Before this class, I did not think much about ethics in programming, as we were dealing inside the realms of cyberspace and anonymity. However, Professor Johnson informed us of a recent situation involving University of Minnesota researchers who are helping with the development of the Linux kernel. These researchers basically submitted patches to the maintainers that fixed bug issues but also generated some security problems, and the patches wound up getting accepted anyway, in which the researchers took advantage and wrote a paper about it, noting they had not informed anyone in the Linux community about this ‘secret experiment’. This resulted in the researchers and the university as a whole getting shunned by the Linux community and eventually banned from contributing to the kernel (The article can be found here.

I don’t really have a personal opinion on who was in the wrong, but I can say that both sides could have handled the situation better. The researchers could have informed one of the higher-ups of the Linux community that they were conducting this experiment so as to not waste the maintenance team’s time in accepting false patches. While the Linux development team should also try to see this in the researcher’s perspectives in which they were trying to help improve the security by proving that patches with security issues may possibly get accepted in the future, but from individuals whose intentions are to damage the system.

This situation has made it apparent that obviously, not everything in this work field is anonymous but also that there are some clear ethical standards and professionalism that we must abide by so as to not hurt or damage relationships with individuals or communities as a whole.