Over the course of this semester in my Software Engineering class, we have focused a lot on applying the concepts of software engineering towards web application development. We specifically focused on this web app development with a technology stack of React, Meteor, Javascript, and MongoDB. With that being said, web application development is not the only area that software engineering entails. Software engineering occupies a world of its own and web application development is just one of the focus areas in this world. I learned a lot about software engineering over the semester, and some concepts that were touched on are Open Source Software Development, Configuration Management, Functional Programming, Development Environments, Coding Standards, User Interface Frameworks, Agile Project Management, Design Patterns, and Ethics in Software Engineering. Two of the concepts that stuck out the most to me were Configuration Management and Agile Project Management, and I believe that these two concepts can have a huge impact on any software engineering project, not just web app development. This is not to say that the other concepts do not have impact, but I just feel that these two specifically are the backbone to software engineering projects.
If you have never heard of configuration management and you are in the Computer Science field, you must be living under a rock. Configuration management is essentially managing your code system so that a certain state is maintained and is up to date at any point in time. If it just so happens that you are indeed living under a rock, it could be possible that you have not heard of the term configuration management before, but you certainly must know what git and GitHub are. Git is essentially a version control system that allows you to manage your code to keep it up to date, but while also being able to maintain different versions of it if needed. GitHub is the platform on which git can be used, where repositories for storing code can be hosted. These two entities are very helpful when it comes to general software development. They can be used to store code to essentially save it on the cloud.
GitHub and git can also be used for version control and configuration management with the use of branches, pull requests, and merging. Branches allow users to branch off from a certain point of master (or another branch) in order to start coding from that point. This can be helpful for diagnosing certain problems and also when working in a team as they allow different users to work on different things in the same codebase. Pull requests and merging allow users who are working on a project together to merge their code in from their own branches to the master branch. This allows them to work on different parts of the codebase at once, while also providing less conflict as they work on the code. This can still lead to merge conflicts, but with pull requests and merging, this is more easily resolved compared to there being neither of these features.
Another important factor in software engineering is agile project management. This concept is essentially when the project development focuses on continuously releasing new versions of the product in order to get feedback from consumers and then using that feedback to make changes accordingly. In this class, we learned about one form of agile project management which is Issue Driven Project Management where we used GitHub Issues in order to create Kanban boards to manage our issues in three separate categories: To-Do, In Progress, and Done. By creating these issues, we are able to divide up the tasks that we need to do by issues and then distribute these issues amongst our team members. This is useful in all facets of software engineering when working in any sort of group setting. This allows work to be distributed evenly between members, and it also allows all members to be updated on the status of each issue. It gives the team members a good idea of who is working on what issue and it also tells us what has been completed vs what is still to be completed. Overall, it is a good way to manage a project and it can be used in many different types of projects.