Conscious Software Engineering. What I Learned in University

08 May 2024

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.

Skills

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.

Functional Programming

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.

UI Design

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).

Website Deployment

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.

Reading/Writing to Databases

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.

GitHub Project Boards

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.

Software Engineering Practice Insights

Through this course, I gained valuable insights into software engineering practices. Here are the most important takeaways:

Adding People to a Software Project May Not Get It Done Sooner/Easier (Mythical Man Month)

Adding more people to a project can increase complexity and communication overhead, potentially leading to delays.

Configuration Management (Version Control)

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.

Project Planning and Team Management

We practiced Agile team management in our final project, exploring other methods and identifying suitable environments for their use.

Optimal Design Patterns

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.

Athletic Programming

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.

Tech Stuff

Here is the list of technologies and tools I have learned and utilized in my software engineering education:

Conclusion

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.