Thoughts on Software Engineering

11 Dec 2023

In the journey through this software engineering class, the focus has been on web application development. However, beyond the acquisition of specific skills in this domain, the course has delved into fundamental software engineering concepts that extend far beyond the realm of web applications. This essay aims to reflect on two crucial topics – Agile Project Management and Design Patterns – and discuss their applicability beyond the confines of web development.

Agile Project Management is a methodology that emphasizes iterative development, collaboration, and adaptability. One specific style introduced in this course is Issue Driven Project Management. While it may seem tailored for web application development, its principles are universally applicable. Agile methodologies, in general, promote flexibility, allowing teams to respond promptly to changes in project requirements. Issue Driven Project Management, with its focus on addressing specific concerns or problems as they arise, is not limited to web applications. A strong example of this is our final project where we had to work in teams using GitHub’s organization feature which allowed all of us to work uniformly on our project choice, which was the Manoa Flea Market template. Before taking this course, I have never used GitHub personally for projects besides taking a look at other people’s code or running a program that someone may have offered. However, learning how to use GitHub along with GitHub’s desktop app has showed

In a scenario unrelated to web development, consider a hardware project where unforeseen challenges emerge during the prototyping phase. Applying the principles of Issue Driven Project Management can enable the team to address problems efficiently, fostering adaptability and collaboration. The iterative nature of Agile Project Management ensures that feedback is continually incorporated, enhancing the overall project outcome.

Configuration Management involves the tracking and control of changes in software systems. It might sound technical, but its significance extends beyond web applications. In a broader context, think about a team developing a machine learning model for data analysis. Ensuring version control of the algorithms, datasets, and configurations becomes paramount. This is where Configuration Management principles come into play.

By defining terms, like baseline and change control, Configuration Management establishes a systematic approach applicable to diverse projects. In a non-web application scenario, such as embedded systems development, maintaining the configuration of firmware, hardware, and documentation becomes crucial. This ensures traceability and reproducibility, principles fundamental to the reliability of any engineered system.

Design Patterns represent reusable solutions to common problems in software design. Although initially introduced in the context of web development, these patterns are not exclusive to that domain. Consider a scenario involving the development of a standalone desktop application. Implementing the Observer pattern, originally designed for web interfaces, becomes relevant when ensuring communication between different components without tight coupling.

In a gaming application, the Strategy pattern, initially explored in the context of web application frameworks, can be applied to encapsulate algorithms, making them interchangeable. Defining these patterns helps in creating modular and maintainable solutions across various software engineering domains.

This course has been more than a web development tutorial; it has been a journey through the core principles of software engineering. Agile Project Management, Configuration Management, and Design Patterns, among other concepts, have proven to be versatile tools applicable to a wide array of projects. By understanding and implementing these concepts, we not only become adept web developers but also versatile and adaptable software engineers ready to tackle challenges across different domains.