Reflecting on Software Engineering

19 Oct 2024

Introduction

Taking this ICS 314 class has provided me with so much more than web application development skills, and I can confidently say this as I approach the end of the course. Building web applications was a crucial part of the curriculum, however, the true value of the class lay in exposure to fundamental software engineering concepts that go beyond web development. Of these, coding standards and functional programming are the ones that really stood out to me. These concepts have reshaped how I approach software development and prepared me for challenges in various contexts.

Coding Standards: The Cornerstone of Consistent and Maintainable Code

Coding standards are sets of guidelines that ensure all developers within a team write code in a consistent style. It covers naming conventions, formatting, syntax, and documentation. Following these standards provides for better readability, reduces errors, and makes codebases easier to maintain. For example, in my final project my team used ESLint, a tool that enforces coding standards and flags issues like unused variables or incorrect indentation. By automating these checks, we avoided many common mistakes, saved time during code reviews, and maintained high-quality code throughout our project.

Beyond web development, coding standards are invaluable in any software engineering context. In large-scale projects, where multiple developers contribute to the same codebase, consistency is crucial in collaboration. For example, in mobile app development or embedded systems, following coding standards ensures that new team members can quickly understand and contribute to the project. Over time, I’ve come to appreciate how coding standards make a team’s work more unified and professional, setting the foundation for long-term project success.

Functional Programming: Writing Predictable, Reliable Code

Functional programming focuses on using pure functions, immutability, and declarative code. Unlike imperative programming, which outlines step-by-step instructions, functional programming focuses on describing what needs to be done. A pure function always gives the same result for the same input and doesn’t affect anything outside itself, making it easier to test and debug. Immutability, which means keeping data unchanged, simplifies managing program states and makes it easier to track changes.

Functional programming helped us to create modular, reusable code in our final project. We used pure functions for data transformations and consistently used them throughout our application. In this way, testing was also easy since we could isolate an individual function and verify its behavior in isolation without side effects. The result was a more reliable and maintainable codebase. Functional programming also can be applied outside the bounds of web development. In fields such as data science or game development, principles of immutability and pure functions can help control difficult-to-manage data flows and reduce bugs. By focusing on what needs to be achieved rather than how to achieve it, functional programming encourages a clear and logical approach to problem-solving, whatever the domain.

Broader Implications of Software Engineering Concepts

These lessons from ICS 314 have shown me that software engineering is not just about writing code but about building systems that are efficient, maintainable, and adaptable. Coding standards ensure consistency and collaboration, and functional programming promotes clarity and reliability. These concepts have applications far beyond web development, making them essential tools for any software engineer.

Conclusion

ICS 314 has provided a very firm foundation of software engineering principles that are beyond the technology stack we used in class. I now understand the importance of coding standards as well as the power of functional programming. These concepts have not only improved my technical skills but also shaped how I approach problem-solving and collaboration. With the knowledge gained, I am confident that this will be helpful in my career going forward to develop creative, reliable, and maintainable solutions across a wide range of projects.