As far as classes go, I felt like this Software Engineering class was an exceptional blend of both rigorous practical software developing and building a good foundation of core software engineering concepts and practices. In the span of 16 weeks, we were able to cover many modules ranging from relearning the basics of Javascript with the addition of functional programming, learning about how to effectively use open source software and configuration management with GitHub Desktop, introduced to the premier development environment of IntelliJ and unlocked the power of UI design frameworks, React, MongoDB and Meteor which we used for our final web-application project. That seems like a mouthful but they were all integral parts in succeeding in the class and beyond the classroom, using these skills with real-world applications in the future.
One of my favorite concepts of software engineering I learned in class was about UI (User Interface) design frameworks. These web UI frameworks provide a set of CSS classes and Javascript functions that are very useful in the facilitation of simplifying a page’s layout, making the appearance and feel more attractive, and another important benefit is that they provide consistent results across different browsers. These are different from “web development frameworks”, which provide support for interaction, but both types of frameworks are often paired together for web application to provide a cohesive feel with aesthetics and functionality. UI frameworks simplify the design process for developers by instead of starting from scratch offer easy to use and understand CSS classes and Javascript functions that can increase readability and uniformness, eases debugging, and helps avoid writing extraneous code which saves a lot of time for developers to focus on more important issues. The specific UI framework we utilized in class was Semantic UI and when paired with the development framework React this creates the cohesive framework Semantic UI React which is the official React integration for Semantic UI. When first learning a framework, it may seem daunting when you look at the documentation, but with Semantic UI React the documentation is very well made and displayed to you in small digestible bites with what the class will produce accompanied with its code! The documentation and use of the framework was crucial in the everyday developing process, and after a while became easier to use and search for what I am looking to implement. Learning to utilize the frameworks was like magic and knowing how to use them is a critical skill needed for front-end web development, and I definitely see myself using this skill in the future.
When starting a final group project of a deployed working web application you can’t just go in blindly as a team like monkeys typing on the keyboard, first as a group you must strategize and map things out addressing different concerns. This introduces arguably the most important and valuable software engineering concept I have gained, which is agile project management, specifically in this class we practiced issue driven project management. Agile project management was a practice that focused more on “light” processes with less documentation, fixed-length releases, rapid turn around without excessive loss in quality and making small changes in the production whenever it’s needed based on user feedback. When using agile project management, there will always be a task for you to work on without waiting for someone else to complete a task so work can be done concurrently, upon completing a task you will have another one ready to work on and move closer to project completion. The state of the project should always be visible by team members so group members see what others are working on and act accordingly, this also makes the breakdown of who did what easier which helps error handling. For managing the work being done for our group project we learned to use a type of agile project management called issue driven project management.
So what is issue driven project management? Issue driven project management is a simple approach to software project management that aims to satisfy the characteristics of software project management and additionally the goals of agile project management. It does this by dividing up the work into easier to manage tasks that should take no longer than 3 days and have a single owner, these tasks are organized into Milestones which have time-boxed due dates and are organized with a project board of some sort. Another important rule of this approach is that at all times, every person must be working on at least one task that they are responsible for resolving. When planning out our project and dividing the work we used a Github Project Board that has three columns, the first being “To do”, the second being “In progress” and the last one being “Done”. This helped us know what tasks there were “to do” and, we would each always be working on separate individual tasks that would be “in progress” and once done with the task it would be moved to the “Done” column all of which helped us know who was working on or who finished different parts of the project. This made it easier to debug commits and delegate more specific tasks to each member as the project went. When planning we would only discuss what must be done with the current milestone and frequently meet either face to face or on Discord to update each other on the issues and voice our different concerns. One of the factors that made this class that much more enjoyable and project management more effective was the fact that it was in-person, the first in-person class I was able to attend in my career as a student thus far. The interaction with others face-to-face rather than over a laptop provoked a much more keen sense of attention and interest in learning the material and offered easier communication with my group members. The simplified approach of issue driven project management was a great introduction to the very convoluted and meticulous science of software project management and gave us invaluable tools that I undoubtedly see myself using in the future.
I’ve come out of this class not only equipped with more skills in web development, knowledge on key software engineering concepts and their applications, but also a new perspective on the impact software engineering has on the world and pursuing it as a career. If you stay engaged and apply yourself you can get a LOT out of a software engineering class and I would definitely encourage you to take it if it’s offered!