Solutions in Software

10 May 2024

My first encounter with programming occurred when I was in elementary school and was addicted to Khan Academy. Taking the basic coding courses on Khan Academy introduced me to the fun world of coding. Interestingly, the basic courses on Khan Academy included Javascript, HTML and CSS courses. Years later, however, when I started taking ICS courses at UH Manoa, these languages were discarded in preference for others such as Java and C. Therefore, I thought it was interesting when I took a software engineering class this spring which brought me back to these programming languages. I have found working with these languages and engaging with more software engineering topics has been quite informative. I have a multitude of takeaways from this class, but a few key ones include the strategic techniques and tools of functional programming, user interface frameworks, and Agile project management.

One of the key elements that has been cemented into my brain this semester is solving software problems through functional programming. This is not a new topic by any means or something that is unique to Javascript; however, Javascript does bring this concept to another level, as it is very functionally driven. Javascript functions being given “first-class citizen” treatment, allowing them to be dynamically treated like other data types, is a great example of the power of functions in software engineering. Applying functional programming to problems in software engineering develops a strategic approach to algorithms and design. In the course at UHM, one of the things which helped me grow greatly in my functional programming abilities was the weekly WODs, which provided a software problem that must be solved with functions within a time limit.

Additionally, thinking on my feet and designing problem solutions has made me realize that many software problems are quite recurring. This has made me appreciate the concept of design patterns, which provide conceptual and coding solutions to common types of software design problems. I have also grown an appreciation for the numerous libraries and frameworks available to aspiring web developers to address common web design specifications. For example, React is a framework which brings Javascript’s functional programming benefits into web design. Doing web design with purely HTML and CSS is incredibly tedious. However, tools such as React/Bootstrap provide helpful styling and flexibility. React allows developers to design their own elements with conditional rendering, exporting and importing designed elements. These functionalities are powerful in allowing software engineers to facilitate displaying data dynamically.

Another takeaway I have developed from my experiences in software engineering, has been the importance of well-defined project management. Interacting with Agile project management can be a little frustrating, it does pay out in the end. Agile project management provides a path that is strategic, breaking down software projects (like a divide and conquer algorithm). Agile also defines a clear target and assigns members sub-problems (issues) to work on. I found working with IDPM guidelines (developing GitHub project boards, etc) to be very helpful in getting everyone on the same page and making a large project digestible for developers. Agile also allows adapting and the basis for communication, which are both so important in project development. There were a couple of points in project development this semester where I was struggling to move forward and these situations were almost always accompanied by not much team communication or all my issues on the project board being completed. Careful planning is essential to software development.

In the end, interacting with software engineering has been an eye opening experience for me. I have enjoyed interacting with design problems and producing a project on a team. I started this semester hoping to design and produce something I could be proud of and I think I have done that. Additionally, my growing experience with functional programming, web development frameworks, and Agile project management have given me a snapshot into the tech world, which I hope to keep and cultivate as my academic and professional career advances.