
Looking back at this semester and in particular, the course ICS 314 : Software Engineering, I think it may have been one of the best courses I’ve taken during my CS degree. The course was fast paced and sometimes hard to keep up with, but was effective in teaching you general software engineering experience and knowledge overall. From the WOD’s to the final project, I think this was a well designed course that should be an essential exeperience for anyone pursuing a software development driven career.
One of the topics we had to learn about in this course was the concept of configuration management. It is somewhat hard to explain simply, but it is the concept of a project’s overall version control and it’s ability to be easily worked on with others. I believe that this is one of the critical foundations of this course that is generally not approached much in other more academic/theoretical courses. The reason I find this topic so impactful is that this is a real tool that is used almost everywhere in software engineering, if not through Github, then through another similar service. When one is able to learn Github effectively (which isn’t particularly hard at all!) it makes it much easier to work on a project with teammates. The ability to have the different versions saved of a project as it is developed, the ability to check for conflicts between the old version and new version, the ability to see what code in particular was changed in the project, that and many more things that are possible in Github make development with others much easier. I think back on a project I did with a classmate where we had to development a medium sized program for a game, at that point we hadn’t learned of Github so we would just email each other code attached as files. In one instance, we had accidentally deleted one of the files of code and thankfully with a solid hour of tinkering we managed to get it back. If we just had at the start used Github, this wouldn’t have been a problem and we wouldn’t have to sloppily email code back and forth with each other.
To tie the previous topic into my next one, the other concept we learned in class was a style of Agile development called Issue Driven Project Management. I think in concept this is much more simply explained in that in our project we designate what needs to be done as ‘Issues’, assigning members to each issue to complete. I think in tandem with the previous topic, this is an effective topic to learn as it works well with Github in that it smoothes out the ability of working on a project with teammates even more. By clearly created and assigning different issues that need to be addressed in the project, you are able to more easily know what you need to work on and what is being worked on by others. This will create less conflicts in development generally as one person won’t be working on the same problem as someone else, wasting each others time. I think in a smaller project, this isn’t as necessary, but in our final project this was a somewhat essential concept to help us work quickly to finish our final project. If we hadn’t had this style of Agile management to build off of, I believe there would have been a lot more time wasted in figuring out who needs to do what and what is finished and what isn’t.
Overall this course was a great course and I learned a lot. There are many other topics covered in this course I feel are just as essential as these two I just talked about which shows what an effective course this is. I will take a lot of the lessons I learned from this course moving forward in my career, something that I can’t say about every course I’ve taken in university!