A Reflective Expedition in Software Engineering

15 Dec 2023

In ICS 314: Software Engineering, it was hard not to focus purely on what was practical within the course. Within the class, a big portion was spent on creating web applications and with all the deadlines, it was easy to get into the mindset of trying to accomplish an objective, rather than utilize the underlying programming concepts that were taught to us this semester. In other words, as the pressure ramped up, I started to forgo the efficient coding practices that were taught to us in favor of completing assignments in a brute force manner. As long as it was functional, that was what mattered to me. As a warning to future ICS 314 students and for people just trying to learn how to code, although you may feel like you need to rush so that you can add to your practical skill set, I urge you to take your time and understand the fundamentals so that you are a lot better off in the long term. That being said, there are still some concepts that I have found useful including functional programming and agile project management.


Cooking up a Design


The idea of design patterns arises from the notion of abstraction and finding a reusable solution to a common problem. By identifying these patterns, we can increase development speed and improve the quality of the final product. One area of life where I have used design patterns is cooking. With cooking, there are hundreds of thousands of recipes that one can follow to the tee and cook up any possible dish. However, take those instructions away and one is left floundering in the dark without any ability to cook the dish by themselves. That is, unless they pin down the abstractions between each ingredient and action done on that ingredient. For example, my mom taught me how to use chicken broth in a spaghetti sauce recipe in order to reduce its acidity to one’s liking. This technique can be applied to making broth based soups and other dishes that need the acidity level brought down. Instead of memorizing the recipes to hundreds of recipes, I can take patterns like these and abstract them to use when I am cooking.

A Functional Landscape


One of my favorite sections within this course was Functional programming. This concept is an approach to software engineering that utilizes a function based paradigm to creating programs. Functions can be bound to variables, passed as arguments, and be returned from other functions just like any other data type. For our web application, my group and I utilized this concept in many different areas. For example, mapping an array with objects to React-Bootstrap components in order to streamline the display of the data to the user. Another use was filtering our collections by field in order to meet our specifications for a page on our website. Although I mainly used functional programming in a web application design context, I can see myself applying this concept to other problems. For example, any project that works with big datasets can make use of functional programming in order to break down complex data and query specific values.

Agile Success


Agile project management is an interactive software development life cycle that breaks down tasks so that a team can work together more efficiently. Within ICS 314, we used this management system while developing our final project web applications. Some aspects of this system include meeting twice a week to update each other on our progress, divide work up evenly so that each individual task takes seventy-two hours, and perform each task on a separate branch on Github. What really helped us finish our project was reaching a milestone every one to two weeks so that we could see actual progress in the functionality of our web application. Agile project management is definitely something I can see myself using outside of a web design context. It fosters communication and provides an organized structure that clearly states what each team member should be working on. With this system, each person in a team is held accountable and any conflicts can be resolved during the meetings. Furthermore, it prevents procrastination and a last minute rush to finish the project. I can see myself using agile project management for projects in other classes, such as group presentations or group research projects. I find that oftentimes, students in group projects do not step up to be the leader and there is no organization. This results with some students becoming freeloaders and an overall lower quality final product.

A Final Word


In reflecting on my experience in ICS 314: Software Engineering, the allure of immediate results often overshadowed my full understanding of foundational programming concepts. I was pushed to prioritize task completion over efficiency by failing to embrace the underlying programming principles that were taught in this class. Yet, amidst my journey through this course, two concepts stuck out to me: functional programming and agile project management. Functional programming can be used to streamline data queries and filtering collections while agile project management creates an efficient team project environment with structured progress and collaboration. Within the ever evolving landscape of software engineering, I plan on keeping these concepts close to me so that I can navigate it effectively.