My software engineering education at the University of Hawaii at Manoa has been a transformative experience. Through this essay, I will reflect on the skills I have acquired, the insights I have gained, and the technologies I have learned.
My journey began with JavaScript, where I quickly grasped the concept of prototype-based object-oriented programming. The professor’s analogy with mitosis helped me understand how objects are created in JavaScript.
I was amazed by the rapid development capabilities of functional programming, which saves time and makes code more intuitive. The ability to pass a function as a parameter to another function is incredibly powerful.
We practiced UI design using HTML and CSS, learning how to create visually appealing and user-friendly websites. We also explored responsive design using Bootstrap, creating mock-up pages of our chosen website (in my case, the Guitar Center online store).
For our final project, we deployed our website on DigitalOcean, gaining hands-on experience with setting up a server, configuring it, and deploying a website. I practiced how to register a domain name and point it to the server.
We explored templates developed for Meteor (a full-stack framework) that utilize MongoDB as the default NoSQL database. It was fascinating to see how easily we could read/write data with Meteor.
We utilized GitHub from the beginning of the course, learning version control, branch creation, merging, conflict resolution,and project management using GitHub project boards. In our final project, we managed group development using GitHub project boards, creating milestones, issues, and assigning tasks to team members.
Through this course, I gained valuable insights into software engineering practices. Here are the most important takeaways:
Adding more people to a project can increase complexity and communication overhead, potentially leading to delays.
It is essential to track changes made to software and be able to revert to previous versions if needed. GitHub is an excellent tool for version control.
We practiced Agile team management in our final project, exploring other methods and identifying suitable environments for their use.
We learned about fundamental design patterns, when to apply them, and their history. It was helpful to see how to implement design patterns in practice.
The unique aspect of this class was athletic programming, where we solved assignments within a short timeframe (WOD) and competed, measuring our progress. This approach improved my problem-solving skills and ability to work under pressure.
Here is the list of technologies and tools I have learned and utilized in my software engineering education:
This intensive class was the best software development course I have ever taken. I acquired a wealth of practical knowledge and skills that will benefit my future career. This experience provided a solid foundation, and I look forward to continued learning and improvement in software engineering.