Efficient is Sufficient

14 Dec 2022

As I write this, Fall 2022 is nearing its end, and finals week is in high gear. Thankfully, my ICS 314 course has no final “exam”, allowing me to redirect my stress to other finals (cough cough PHYS 272 and ICS 311 cough cough). Looking back at this semester, ICS 314 is undoubtedly one of the most fun and helpful courses I have taken throughout college. Apart from learning new programming languages like HTML, CSS, and JavaScript (“programming languages” is used very liberally) to create countless mockups and interactive pages with the new programming languages, I have, more importantly, learned the idea of efficiency through many concepts, namely coding standards and design patterns, that are fundamental not only for software engineering, but for work of all varieties.

Coding Standards

Coding standards refer to the implementation of specific programming procedures and practices aimed at improving readability and efficiency. This can include anything from variable naming conventions to the entire structure of files (e.g., line indentation, code block placement, line ordering). Though they may seem minor and somewhat useless, coding standards are the key to maintainability. Much like messy handwriting, messy code is hard to read and use, making attempts at debugging and preservation much more difficult. By contrast, enforcing coding standards makes code much easier to understand, allowing engineers to maintain the code much easier. Coding standards also conform engineering teams to a single programming style, eliminating discrepancies in code written by different teammates.

The idea of cleanliness and efficiency from standardization goes beyond software engineering. Any team project requires some level of coordination and uniformity, as conflicting styles and ideas could ruin the quality of the finished product. For example, if a team is working on a mural without any information beyond the overall theme, the mural, while certainly vibrant, would likely lack consistency. If the team were instead additionally provided with a color code, an art style, a simple paint stroke pattern, etc., the finished mural would be a lot cleaner (and hopefully less jarring).

Design Patterns

Design patterns are an idea initially introduced in architecture - although, given the role of code as the internet’s “architecture”, the idea was bound to make its way to the software field eventually. Design patterns identify recurring problems and develop core solutions so that any instances of those problems can be solved using the blueprint solutions. Essentially, design patterns solve common issues with general and adaptable solutions. Rather than wasting time devising a new solution to the same problem, it is much more efficient to create a single solution to the root of the matter and base new solutions on that blueprint.

Much like coding standards, design patterns have uses outside of development, so much so that, as previously mentioned, the concept was initially described by an architect. In his book A Pattern Language: Towns, Buildings, Construction, Christopher Alexander identifies common design problems and values/guidelines to follow as a way of creating solutions to those problems in a specific design. Rather than telling specifically how many windows to have in a room and how high to put them, design patterns would explain that enough windows are needed at a necessary height to light the entire room, as that is one of the main functions of windows. This way, the count and height of windows can be changed to fit the specific size of a room, allowing for more practical and efficient room lighting.

Efficiency

My main takeaway from ICS 314 is efficiency. Especially in a field that often requires a lot of work in a short amount of time from many people, efficiency is key. Coding standards and design patterns, two topics that advocate efficiency, are prime examples used in the field and, as demonstrated, can even be applied outside of software engineering. Both in and out of development, standardized methods and flexible blueprint solutions make for effective and maintainable results. Being productive and effective in work and in life is vital to being a developer. To succeed in such a demanding field as software engineering, only efficient is sufficient.