What I learned in Software Engineering

19 Dec 2024

Introduction

Before this course, I have had zero experience with anything to do with software engineering. Because of this, I was initially scared of how difficult it would be to learn something completely new and be expected to be able to show progress throughout the semester. After finishing up my ICS 314 journey, I am able to recognize the various different components that make up software engineering and the effort that goes into making these kinds of software function properly. This software engineering course has taught me so much, not only about website creation and development, but also about things such as Functional Programming, Development Environments, and Agile Project Management – and their significance beyond web development.

Functional Programming

Functional Programming is a paradigm that is centered on using expressions and functions, without mutating state and data, to create and build computer programs. The purpose of Functional Programming is to use these restrictions in order to write code that is clearer to understand and more resistant to bugs. In class, we learned that a “first-class function” are functions that are treated as values, enabling high-order functions, which are functions that take other functions as arguments or return them as results. The restrictions of Functional Programming, such as immutability and avoiding side effects, were seemingly challenging at first but after exploring and learning about them, it was very clear that they provided benefits like making code easier to test and debug.

Development Environments

A Development Environment refers to the set of tools, configurations, and software that developers use to write, test, and debug code. An example of a Development Environment that we are all very familiar with is an IDE like Visual Code Studio (VSCode). These environments significantly enhance productivity by offering features like real-time feedback, automation, and error detection.These tools and features reduce the time spent on mundane tasks, allowing developers to focus on writing efficient and high-quality code. For example, using linters such as ESLint within a development environment ensures that coding standards are followed, while also having debugging tools to help identify and resolve errors efficiently.

Agile Project Management

Agile Project Management emphasizes iterative development, flexibility, and close collaboration between developers and stakeholders. This gives the developer the benefit of adaptability to changing requirements while also breaking down large projects into manageable, well-defined tasks. One specific style of Agile Project Management that we practiced in class was Issue-Driven Project Manangment (IDPM), where tasks are broken down into specific, manageable issues that are addressed within short development cycles. This approach fosters clear communication, accountability, and progress tracking. By focusing on one issue at a time, developers can ensure that each feature is thoroughly planned and tested before moving to the next. In our final projects, using Agile Project Management helped us to stay organized and responsive to changes, even when there were unexpected obstacles that we had to overcome.

Conclusion

In conclusion, this course has given me a solid foundation in software engineering, teaching me much more than just how to build websites. Concepts like Functional Programming, Development Environments, and Agile Project Management have shown me how software engineering principles can be applied outside of just web development.

Functional Programming taught me the importance of clarity and immutability in creating reliable code, Development Environments emphasized the value of having the right tools to enhance productivity, and Agile Project Management demonstrated how to effectively organize and execute complex projects. These lessons go far beyond web development, equipping me with skills and approaches I can use in any technical or collaborative context. As I move forward after this course, I’m confident that the knowledge I have gained has given me a strong foundation and will enable me to tackle new challenges and grow as a developer.