Although the first Software Engineering course I took was full of non-stop learning, the most valuable learning experiences I gained from this course surprisingly weren’t related to learning new coding languages or frameworks.
I had some experience with Configuration Management, the process of managing a project to maintain consistensy, but had never practiced it in a way to take advantage of its full potential. Throughout the course, we’ve had many projects that were saved in iterations; this was especially useful for the final project where previous versions of code needed to be restored to discover what had caused our app to crash. After frequently utilizing Configuration Management through GitHub, I realized how convenient and important this process is. It became abunduntly clear this is a practice I should utilize for projects even outside of the course when I considered how it would have save me a lot of time when I was deleting lines of code from my Android app project trying to figure out what made it crash.
There were also practices I thought I apply frequently, but have now realized I need to improve on, primarily Agile Project Management. Agile Project Management is an iterative project planning process, we practiced this process by using Issue Driven Project Management by creating tasks within milestones to complete our final project. I usually feel like I can identify tasks that need to be done for a project, but I hardly ever set dates for smaller tasks to be completed by. Using Agile Project Management made me realize my normal approach to projects is to work on one large task until I get stuck with it, then switch to a different large task; although I’m usually able to complete projects this way and the use of milestones was more difficult for me to get used to, using milestones and smaller tasks helps to create a better picture of where a project is going. While I may not be comfortable with changing my project management process to more closely resemble Issue Driven Project Management, I believe doing this would allow me to manage substantial projects in a more timely and digestible manner.
Although I consider project management to be the more important skills I practiced, I also gained knowledge and experience with other software concepts such as functional programming, using different development environments, using interface frameworks, and coding standards. Learning Javascript was surprisingly more convenient than I thought it would be, however practicing functional programming with the use of underscore was a bit more difficult. As I had previously mentioned in a writing regarding improving coding standards using ESLint, I still think it’s difficult to automatically write code that complies with coding standards, but it’s an important role in developing code that will be worked on by multiple code. I believe using functional programming and continuing to practice improving coding standards will improve my programming to be more concise and easy to decipher.
I believe many, if not all, the software engineering concepts will be applicable for future projects. Most of the concepts will help me improve my ability to plan out a project and work in a group.