CST438 - Week 1 Learning Journal
Upon attending the orientation for CST438: Software Engineering, I was surprised to learn that this class positions physical programming as more of a backseat concept to the core subject matter of the presented curriculum. After having read through chapter 1 of Software Engineering at Google, I see there are many non-programmatic concepts a developing programmer must learn--pun absolutely intended. This class somewhat reads as more of a conceptual and spiritual sequel to Software Design since that class focused on sound design patterns for building functional, scalable, and reworkable software. To address how my perspective has shifted upon completing week 1's materials, I will dedicate a paragraph to the REST labs and a subsequent paragraph to the SAG reading.
The REST application labs 1 and 2 were a strong start of blending a small programming challenge into illustrating how responsibility is delegated across entities, repositories, controllers, and data transfer objects (DTOs.) Annotations allow Spring Boot and Jakarta Persistence APIs (JPA) to provide functionality. With proper persistence from JPA, dependency injections, and the callback to databases via entity relationships, the first couple labs of CST438 demonstrated how to expose only necessary data and avoid directly exposing database entities. Despite even some object-oriented programming making a small celebrity appearance, the labs ultimately served to show the power and importance of relying on existing frameworks and conventions over simply writing the entire application ex nihilo.
The SAG textbook reading additionally solidified some of these concepts but expanded to discuss and qualify programming integrated over time--both physical time and the business requirement timelines common to any industry--and amid the logistics of shifting personnel involved in any respective long-term project. Programming versus software engineering is an important immediate distinction: programming focuses on ensuring software works, software engineering focuses on ensuring the software remains maintainable in a landscape where hardware, software, and team personnel will inevitably change with the passing of time. Much as Professor Wisneski promised during the orientation, the textbook focuses much more on time, scale, and tradeoffs over syntactical or algorithmic knowledge. A few standout concepts from chapter one include Hyrum's Law which states that users depend on observable behavior of an API, including undocumented behavior, which is why long-term changes become difficult. Shifting Left describes finding problems related to security and performance early in development as they become much more expensive after further development. The Beyonce Rule states that if a feature or behavior is important, it must be included in continuous integration (CI) testing. Finally, deferring and accepting a tradeoff of technical debt is sometimes necessary in various stages of development.
Comments
Post a Comment