One of the most interesting aspects about this class has been learning about functional programming within TypeScript and JavaScript. Coming from a Java and C++ background, I am familiar with traditional object-oriented programming. However, the introduction of functional programming has opened a new world of possibilities for me. Integrating functions as data variables and arguments has allowed me to cut down on redundant code and apply functions across numerous operations. This versatility has made my code more concise and elegant.
Not to mention the built-in functionality of these languages that I find incredibly useful. As a data energy analyst on campus, functions such as filter() help me sort through massive datasets to retrieve specific information. Through this experience, I realized that functional programming is multifaceted and well-suited for real-world problems. The result of which is that these qualities create cleaner structures and reinforce the engineering principle of “Don’t Repeat Yourself."
In addition to learning about functional programming, I used these applications to create and structure our final project. During the development of our app, we used utilities such as map() and filter() to sort through our real-world data. These functional programming practices reduced coding time for our developers. Not only that, but when collaborating with teammates, these practices improved the readability of our code. This allowed us to properly understand a problem, and we were better equipped to solve the issue efficiently
Moreover, this experience felt the most collaborative out of any previous group project that I have done. Each team member contributed their own spin to the application and helped the project come to fruition. We frequently would help each other and work together on issues to find workable solutions. Additionally, we checked in with each other every couple of days to ensure that we stayed on track. My group ensured that we addressed needs and always clarified outstanding issues. For all these reasons, I attribute our success as a group to the use of issue-driven project management. Due to the sheer size of our project, our numerous concerns were broken up into attainable outcomes. Supporting our teams' productivity by visualizing the extent of our project and setting deliverable deadlines. Overall, I found this model of management to be very interactive, practical, and efficient. That being said, I hope I can carry over this style of management into my future group work and projects.
Our final project really made me think through how to design and deploy applications. More than just completing an idea and launching an app, I reflected on how to create developments and execute their purpose. Opening my understanding of programming to considering all possible applications, safeguards, and impacts. This mindset shift helped me align my intentions for my work with their desired outcomes.
With that in mind, projects can be great on paper but be entirely different in reality. More importantly, technology can be easily misused or produce unintended consequences if developers are not mindful. For this reason, following the AMC ethical guidelines of project development is essential. Tenets like "recognizing and taking special care of systems that become integrated into the infrastructure of society.” Or considering the good of the public over all else informs my work as a programmer. Together, these principles serve as a foundation for how I will make decisions in my work and why I will choose to take on projects in the future.
Throughout this semester, I have learned many valuable lessons and grown as a programmer. Looking back, I realize that overcoming these challenges was necessary for developing my understanding of software engineering. I feel that this course has shown me the value of functional programming. It also has changed my mindset and outlook on how to tackle major projects. Furthermore, it has provided me with ethics needed to navigate the demands of certain work and make sound judgments within programming.