A Retrospective on Software Engineering!

17 Dec 2025

Software Engineering Image

Becoming a software engineer has taken on a whole new meaning for me after completing ICS 314 (Software Engineering at UH Mānoa). Throughout this course, I learned not only practical coding skills, such as JavaScript, TypeScript, HTML/CSS, Bootstrap, Next.js, PostgreSQL, GitHub, and Vercel, but also core software engineering concepts including Object-Oriented Programming (OOP) vs Functional Programming (FP), development environments, coding standards, and configuration management. All of these topics culminated in a final team-based project that required careful planning, collaboration, and execution.

Learning TypeScript

Learning the basic syntax of JavaScript and TypeScript was relatively manageable, especially since I had prior experience with languages like Java, C, and Python. What made the process challenging, however, was the short time constraint (less than a week), adapting to OOP vs FP paradigms, and integrating everything within VS Code. Despite the difficulty, these challenges are essential to becoming a software engineer. The field of computer science evolves rapidly, with new languages and frameworks emerging constantly, so the ability to adapt and learn quickly is crucial. Understanding both OOP and FP is also important, as languages such as Java, C#, and C++ rely heavily on OOP, while languages like Lisp and Haskell emphasize FP. Mastering both paradigms allows developers to write cleaner, more reliable, and more maintainable code. Finally, learning to use VS Code effectively is essential, as it is a powerful and versatile IDE used across many languages and platforms.

Learning UI Design

Switching gears, HTML and CSS form the foundation of nearly every website on the internet. While they are simple in concept, creating clean, usable, and visually appealing interfaces requires careful design. Tools like Bootstrap, React, and Next.js simplify this process by providing reusable components, structured layouts, and dynamic rendering based on user interaction. Learning UI design helped me understand that software engineering is not just about making things work, but also about making them intuitive and accessible for users.

Learning Databases

Another major component of the course was learning about databases, specifically PostgreSQL, Prisma, and deployment through Vercel. Of these topics, databases were the most challenging, but also among the most important. Many modern applications rely on databases to store and manage data efficiently, and understanding how to design schemas, perform queries, and integrate databases into applications is a critical software engineering skill. This section of the course significantly expanded my understanding of how real-world applications function behind the scenes.

The Final Project…

All of these concepts came together in the final project, where everything we learned was put to the test. TypeScript, HTML/CSS, and databases formed the foundation of a fully functional web application. Beyond the technical skills, the project emphasized teamwork and agile project management. Working as a team required clear communication, task coordination, and accountability to avoid duplicated effort and ensure a cohesive final product. Agile practices such as iterative development, issue tracking, and regular progress updates helped keep the project organized and adaptable. This experience reinforced that successful software engineering is just as much about collaboration and process as it is about writing code.

For more information on the final project, click here