Putting It All Together

15 Dec 2019

Introduction

Before completing this course, I had a very binary view of software engineering, I thought it was simply coding & implementing someone else’s design. I was resolved that I didn’t just want to be a coding monkey that programs day in and day out, ICS 314 has really broadened my horizons and given me experience with facets of software engineering that can be applied to any professional career.

Throughout this class my work ethic improved tremendously, I really needed to stay on top of my game to keep ahead of all the due dates for various modules and experiences, but this also allowed me to “get my ducks in a row” for my other classes this semester as well. If nothing else, an improvement to my high level organizational and time management skills was well worth taking this course. A few of the software engineering concepts that I believe will carry throughout my life are: Agile Project Management, and Coding Standards, although we mainly focused on them from a software engineering perspective, I believe the concepts are so versatile that they can be applied to any profession where team projects are done.

Agile Project Management

I have been interning at NIWC (Naval Information Warfare Center) for the past 2 semesters and will work there upon graduation, most of the projects that I’ve worked on have followed something of a “Waterfall Methodology”. There is a clear Design phase, Design Review, Implementation, and Delivery stage for the project, even for shorter term ones that do not last a whole year. There is a running joke that the federal government is always late & behind on deliverables, and it really rings true, nearly every deadline that we had was delivered upon but usually a week or two late. I believe this is mainly an issue of how the projects are being organized/what is promised to the customer.

Instead of having one massive deadline for “Critical Design Review” where there are 15+ documents due from many different team members, I believe following something more along the lines of Agile would be beneficial where we turn in smaller batches of deliverables as they are ready. Agile is a time boxed, iterative approach, that works on smaller “issues” and tasks that build up a software project incrementally throughout the life of the project, rather than trying to deliver all of it at the end.

The concept of pushing issues/deliverables to the next small milestone if they are not ready yet is a concept that could work very well at NIWC, there are often many unseen regulations/issues that come up in our day to day work which causes a deliverable to be late. This delays when the whole “Critical Design Review” package can be submitted, but on a Agile schedule the rest of the documents would be delivered and review could start for those. As I grow in seniority as an Engineer, I hope to be able to apply an Agile Project Management schedule to some of the smaller projects I lead.

Coding Standards

Coding standards are a set of guidelines, best practices and conventions that a developer tries to adhere to when writing source code for a project, while I may not always be working on a project that requires coding, the concept of standardized conventions and best practices is important to remember. As we worked on our final project, our group’s adherence to coding standards really helped us to understand what sort of work the others had done without too much confusion. In my previous EE396 Junior project, my group had to work with a codebase for a EEG sensor that had awful documentation and did not adhere to coding standards of any kind, the confusion and headaches that came from trying to understand their code drove the point clear home that coding standards are crucial for those who work on your code after you have moved to another project.

This can be applied to non-coding endeavors as well, anything from CAD drawings to PowerPoints and reports have pre-written standards that can be followed to provide coherency with the work of others. Quite a bit of my personal CAD knowledge has come from looking at old documents and previous project drawings, I also have a copy of the Shore Installation handbook which lays out guidelines and standard practices for different aspects of drawings. A great deal of emphasis was placed on referencing the manual frequently when doing drawings, to ensure that any contractor, engineer, or relevant personnel that views your drawings can understand what’s being communicated.

Conclusion

All in all, ICS 314 has taught me much, much more than I ever expected, I came in expecting to learn HTML and JavaScript, and left with a tool box full of skills that I can apply to any problem that I face in my career. Improving not only my professional skills such as coding, project management, and team work, but also life skills like time management.

In previous courses that I’ve taken such as EE205 (Object Oriented Programming) and EE367 (Algorithms and Data Structures), I felt like I had a cursory amount of knowledge after completing the course, but quickly forgot much of the coding I learned. The only time we needed to code for these classes was during labs or for homework assignments, in ICS 314 the repeated practice from the multiple experience per module provided regular practice that solidified the concepts for me.

I have truly become a believer in the athletic software engineering pedagogy, and feel more prepared for my graduation next semester, into a professional engineering setting.