Over the past semester of my computer science degree, I have been taking a software engineering class which has introduced me to various frameworks and languages such as JavaScript, HTML/CSS, Bootstrap, and React. More importantly, I have become mildly aware of some foundational software engineering concepts and practices including:
More than just the web-development-focused technology stack encompassed within the class, I have learned far more skills towards becoming better in my academic and professional career. From learning how to better manage the projects that I work on and who I am working with, to determining whether my actions are ethical in retrospect, these skills are not only applicable within the scope of software engineering but also within various aspects of my life.
The most pivotal software engineering concept that I have learned is Agile Project Management. Specifically, I have delved into the issue-driven project management method. In essence, this approach is a SMART way of tackling a project. The backbone of IDPM is efficiency, organization, and communication. It focuses on creating issues that are reasonably obtainable and well-ordered. To do this, GitHub issues are created based on certain criteria. The main of which is ensuring that the tasks of the project as split up accordingly so they are able to be completed within 3 days. The issues must be thoughtfully broken down so there is no over-reliability on a member finishing their task. Even if any breakdowns within the team were to occur, the project would still be able to be finished on time. In addition to this, each task for an issue is done within its own respective branch to prevent any conflicting merges. Each branch must be named according to its corresponding issue. Finally, to overcome the biggest hurdle of project management, meetings and milestones are required to encourage communication and accountability. Each member is able to keep track of who got what done through these meetings and milestones. By doing so, it holds up expectations within the group dynamic that each member is equally contributing.
I have had a good experience with such a structured way of project management. The attribute that I appreciate the most about this method is its underlying pressure for accountability within the group.
Outside of the scope of software engineering, Agile Project Management is a very efficient and practical way of doing projects. One of the aspects of academics that I have grown to hate over my educational career is group projects. The thought of working with others is not so scary and can be quite fun, however, in practice, things can go awry in the blink of an eye. There are so many factors that are incredibly difficult to keep track of by just one person. The lack of reliability and work ethic from my group mates in addition to the absence of communication always leads the project to disaster. This is where agile project management comes into play. From my perspective, IDPM goes against the typical standard of administering projects. Rather than the group being just a well-oiled machine, it focuses on each member being a powerhouse in their own right so that even if a cog goes missing, the project can still run smoothly. As discussed before, the attributes of agile project management would greatly solve the issues that I have been running into with group projects all too often.
The software engineering concept that is prevalent and urgent within today's society is ethics. In the most basic sense, ethics is what is deemed as right or wrong. While the applications of ethics aren't as serious in the projects that I am currently working on, ethics continues to grow in importance as I work on projects of bigger scale and functionality. Especially in such a technology-driven society, software engineers hold a lot of power and influence. From this, a lot of difficult situations and decisions arise. For instance, is it right to create and foster artificial intelligence that will replace many people's livelihoods? Is it okay to program deadly missiles for the sake of national security and defense? These are some of the more relevant ethical debates that have risen in society. A lot of the time, these decisions appear to have no right answer. Sometimes you are presented with choices that only end with negative outcomes. With so much potential and power comes great responsibility. Especially for cases where you are dealing with national security and defense where millions of people's lives are in your hands, being an ethical engineer and choosing what you believe is for the greatest good can be incredibly difficult. However, accompanied by this heavy responsibility is the immense potential to do good.
Ethics is not just for software engineering but for life in its entirety. As with any industry, ethics is one of the most important things to consider. It potently influences what we are doing and why we are doing it. Ethics in software engineering have been some of the most challenging and controversial thoughts that I have had. In theory, what is viewed as ethical should be by the book and according to the code of ethics. However, in real life, the situations that arise are often not black and white. They will not follow a code of ethics to a tee and therefore it makes it that much more difficult to determine its ethicality. In order to not only become an ethical software engineer, but an ethical human being, I must first evaluate what I perceive as ethical and moral. In addition to following my personal code of ethics, I must also dedicate myself to following a professional one as well.
At the beginning of my journey, I was confronted with a big question that would determine and shape my path for the next major era of my life: "Why Software Engineering?" As expected of an inexperienced computer science student, my answer was very uncertain saying things like it's one of the most popular careers in computer science and it makes a lot of money. Now that I have gotten a taste of what software engineering could possibly be for me, I have come up with somewhat of a more developed answer. While I am still on the ropes about what careers to consider in computer science, I have become more sure about my motivations. Much more than just the technical stack and hard skills I have acquired throughout this software engineering class, I have found the soft skills to be much more practical and enjoyable.
The aspects of communication and team building I have cultivated within this class were worthwhile. From working together and staying up too late to make sure that we finish the assignment on time to struggling and helping each other figure out why our code is not working, my experience with working on a bigger-scale coding project is one that I will remember as I carry on in my computer science degree. My main goal in taking this software engineering class, more than anything, was to experience what it was like to work with my peers on a big project so as to give me insight into what it is like to work in the profession. Although it was rigorous and a struggle at some points, I believe I was able to achieve this. More than anything, I was able to experience what it was like working on a team on a big coding project, grow my communication skills, and build relationships. Along with the SWE concepts discussed above, I am inclined to become a software engineer. Now, I feel even more motivated to improve my practices to become a reliable software engineer.