This semester, I kept a post-it note to keep track of the current week number. As I crossed off week 16 (the last week of the semester before finals), I cannot believe how fast this semester flew by. As ICS 314 (Software Engineering I) comes to a close, I realized how much I have learned about web application development and fundamental software engineering concepts. This course started off with learning Javascript; to be honest, in the beginning, it was a little daunting to learn a new language in a short amount of time since in prior classes, we spent almost a whole semester just focusing on one language. After Javascript and learning about the library Underscore, we pivoted to learning HTML and CSS. However, I quickly realized just using HTML and CSS to create a “decent” looking web application is very time consuming and this is when we learned about Bootstrap, a popular CSS framework. Afterwards, the semester quickly flew by as we started to learn about React, MongoDB and Meteor. In the end, we were able to practice using all these skills that we have accumulated by working in groups to create a working/responsive web application. Throughout this experience, below are the few topics that stuck out to me the most:
In software engineering, configuration management is a system to manage the progression/evolution of software programs. It involves tracking, documenting, and organizing changes to increase productivity. Configuration management allows multiple people to work on a project concurrently. In this course, we used Github Desktop and Github for our configuration management system. In Github, there are features like branching, merging, pull requests, etc. which allows us to manage changes to the code and collaborate with our team members. Prior to this class, I have used Github and GitKraken before for a group project. After being exposed to Github, I can’t imagine working on any coding project without it. In this course, it allowed us to keep track of what our other team members were doing on the web application and allowed us to revert back our changes if necessary.
In this course, we learned about several project management methodologies such as waterfall and spiral. However, the project management methodology we used for our group project was agile project management, which “focuses on breaking down large projects into more manageable tasks.” Specifically, the type of agile project management process we used was IDPM - issue driven project management. According to IDPM, teams should meet together approximately twice a week and the work should be divided into 72 hour tasks. Each task was created as a GitHub issue, with GitHub Project used to simplify task management. In the GitHub Project, there were 3 columns: to do, in progress and done.
Each team member was assigned a task and once that task was completed, it was then moved to the done column. The team member then picks another task from the to do column. In addition, to minimize conflicts, a new branch was created for each task and was later merged to the main branch once it was completed. This style of project management was very helpful during our group project because it allowed us to break down our project into smaller, manageable tasks. It also provided a visual with who is doing what and what tasks were completed. I believe this project management methodology would be helpful to other coding projects besides just web development.
Towards the end of the semester, we spent a class period talking about the ethics in software engineering. Prior to this class, the only discussion I had about this topic was in another class, when we had a brief lecture discussing the ethical implications of artificial intelligence. In this class period, we learned about how a software engineer can do both harm & good, as well as learning about the ACM Code of Ethics. The discussion we had was really an eye opener for me because prior to this, I was really just focused on pushing code and whether or not it complies/works.
Although ICS 314 was a challenging course, it really pushed me to develop my software engineering skills. I am excited to utilize everything I learned and apply it to other projects & expand on these skills.