…And just like that, another semester as a computer science student is coming to an end. This semester was a wild journey from start to finish, in addition to there being a pandemic, of course. Though I am glad that this semester is finally over (and that I don’t have to do timed WODs anymore for the time being), I have appreciated my experience in taking this course. It has taught me so many valuable things and even beyond just programming and learning a new language on its own. For the past semesters for us as computer science students, we’ve mainly prioritized learning how to code in certain languages (i.e. Java, C/C++), but it wasn’t until this class that it really put things into perspective for me. What I mean by that is that it offered us an experience that mimicked the “real-world” experience of completing a project in a team as much as possible, using software engineering concepts that could be applicable to aspects of life that aren’t limited to computer science. Moreover, it helped me envision what it would be like to have a career in programming and/or software engineering.
An important software engineering concept that we learned and utilized in this class is design patterns. Design patterns are basically templates that can be used for different solutions. I have more thoroughly explained design patterns here.
For our final project, we used the meteor-react-template, which is an example of the Model-View-Controller (MVC) design pattern. The model is like the database, the view would be the presentation (the HTML and CSS portion of the code), and the controller decides what is presented to the viewer and how. Basically, that is what the meteor-react-templates do, and what we’ve been doing for our WODs and projects. We used the template to build a web-based application to identify and feed cats that are commonly found on campus.
Again, the concept of a design pattern is not limited to software engineering. You technically use design patterns when approaching and solving all of your problems in life. You build off of your and others’ past experiences to solve your current problems. I have used the example of a recipe for a dish as a comparison.
When it comes to our final project, which was building an web-based application in a team, we used a type of software project management called Agile Project Management to complete our tasks. Agile Project Managment (AGM) is basically just breaking down a project into smaller tasks so that each group member would have a task to complete. Some characteristics of APM include:
A specific type of AGM that we used is Issue-Driven Project Management, which satisfies those characteristics of AGM. This is done through breaking the project down into milestones, of which each have a due date. However, a key feauture of issue-driven project management is that the tasks of each milestone are not planned out ahead of time. You only plan the tasks for the current milestone. Each task shouldn’t take too long to complete. This worked well with having a GitHub repository where each member could create branches off the master branch to work on their tasks and merge them back into the master branch when they completed their task.
Approaching our project in this type of manner helped make the project easier to complete. It is effective for projects like this with 4-5 group members. Planning out a project’s steps from start to finish would have been difficult because as we progressed with our project, there were problems that popped up that we couldn’t have planned for. Planning for only the current milestone helped us be able to have the time to resolve those issues as they popped up, without setting us back. Issue-Driven project management is a great and effective way to approach other projects outside of software engineering. If you think about it, it makes sense. How can you account for all of the possible problems that could arise when working with other people. Planning out a project from start to finish may be okay to do if you’re working on something yourself, but working on a project with others would open up more room for error as you can’t expect everyone to do something the way you would do it.
Design patterns and Agile Project Management are only some of the many software engineering concepts that I have learned about and can apply outside of software engineering… which is what I mean when I said this class was an experience that keeps on giving. Overall this class was a very valuable experience as a computer science student. Again, this class helped me get a feel for what it would be like working on a web development project with team members as a career. I finally feel like my efforts in going to school for computer science are coming to fruition. It also taught me very important concepts that could apply to things outside of software engineering, which will ultimately help my life in general.