13 May 2022

First Software Engineering Class Done!

Months before I took ICS 314 (a software engineering course at the University of Hawaii), I had heard stories about how time-consuming it can be and how there would be WODS (hands-on quizzes) every week that would be all-or-nothing. To be frank, I was quite scared to take this class. However the semester before, I actually participated in hackathons that essentially used the tech stack taught in this class. So armed with some rudimentary knowledge (nothing like the pressure of building something within a week) of Meteor, React, and MongoDb, I’ve discovered that relearning these concepts in modules this semester has really helped me solidify what I learned on my own. In fact, although those hackathons were brutal because I had to learn a lot on my own, I felt like I could learn a lot better in this class because not everything was entirely new to me. There are some of the topics I particularly enjoyed learning about (and I think can be used outside of web applications) in this course: Configuration Management and Functional Programming.

Configuration Management

In this module, we mainly learned about version control and specifically, we used git. In case you haven’t heard about these concepts before, version control essentially helps keep track of changes over time and can be extremely beneficial for group work because it helps teams keep in order and not step over each others’ toes. What makes git special is that other version controls may have one “all-powerful repository” and other people can grab it to edit, whereas git allows everyone’s local version to be an “all-powerful repository”–thus allowing unique branching. I may not have explained that as well as I’d liked, so definitely check out this video by my professor.

I really understood the value of git and version control when I was working with a team on a coding project and we didn’t have a version control system. It was always such a stressful time whenever someone had to make changes and would chat it to everyone to copy. When dividing work, we had to make sure no one would be touching the same code and when people did, we had to manually merge them. Although it was a tedious process, it definitely gave me a newfound admiration for git. Additionally, it made me realize how beneficial using something like git can be for other projects such as papers. When I see people sending Word documents back and forth, I always worry that something might get lost. With a configuration management that uses version control, some of these issues could be resolved.

In fact, after I formally learned about git, I practically told all of my family members about it. I just find it so mind-blowing that these version control programs can keep track of all these changes and be smart enough to know how to merge things properly.

Functional programming

Functional programming is another concept that I found really, really cool to learn about. I had read about it in books, but I had never actually learned what it meant. It is essentially programming that allows functions to be passed around and used just like any other data type. There are other aspects of functional programming (e.g. shared state and mutable data), and after what we’ve learned so far about it, I definitely can’t wait to learn more. What we used to learn functional programming was the library underscore.js.

This library allows us to manipulate arrays or objects by calling different functions (one of my favorites being “pluck” because it sounds like you’re plucking fruit) and providing functions to be run over the data you provide. One of our professor’s top 3 underscore functions is “map” because of how powerful it can be. For example, here’s a less “codey” way to describe it. We could give the map function 3 puppies and a function like “grow” and in turn the map function will return 3 grown puppies! What’s snazzy about all this is that the map function didn’t need to know what it was iterating over; it’s designed to just be that flexible! This kind of thinking can be applied to any computer science thing because of how modular it can make your code.

while (SoftwareEngineerSkills < 100)

This was one of the most educational classes I’ve taken because every module was critical to creating the final project, so I never felt bored. Learning React was definitely one of the most exciting things for me, so I’ll definitely try to learn more about it during the summer!