This week in CS 373 really tied together a lot of ideas about abstraction and design in a way that felt more practical than theoretical. The Dependency Inversion Principle paper really introduced new perspective. Before, I understood abstraction at a surface level, but the paper made it clear why it matters, especially in the context of preventing rigid and fragile systems. The idea that high-level modules shouldn't depend of low level details but rather abstractions made me rethink how I should structure code. The IDB2 project presented many challenges that I had little experience in. I learned a lot how to structure and set up a good SQL database and interact with it safely. We had a issue where we accidently deleted/corrupted large parts of our data base which gave us a valuable lesson that we should be careful with SQL queries and really understand the structure of the tables we want to modify. Designing the models and their relationships was very interesting experience. Thinking about relational structure, pagination, filtering, search, made me appreciate how much planning goes into database design before writing the code.

The collaborative quizzes really help reinforce the concepts and material that I felt like I did not fully understand. It was also motivating to discuss ideas in real time, which reinforced my learning and made abstract concepts feel more concrete. Another concept that became clearer this week was the differences between instance, static, and class methods. Before I mostly used them without much thought about their purpose, but now I see how they help organize logic more cleanly. Instance methods are best when behavior depends on a specific object's data, while class methods operate on the class as a whole. Static methods, on the other hand, are useful for utility logic that doesn't depend on either instance or class data. Thinking about these distinctions helped me to design cleaner, more organized code. My pick of the week is the Google Places API. It is a helpful tool for adding location-based data in applications. You can search for places, get details like ratings, reviews, photos, and even add embedded maps. We used it for IDB2 to enhance our models with real data.