Meeting Charleston
Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...
This week, we read “From STUPID to Solid Code!” by William Durand. This article is packed with high-level do’s and dont’s of programming. The “dont’s” are condensed into the acronym STUPID and the “do’s” are represented by the acronym SOLID.
In the STUPID category, the article warns of tight coupling, especially. It notes in the conclusion that fixing this alone will improve your code immensely. I had never heard of this issue before reading the article. In a nutshell, loose coupling - reducing (and avoiding) dependencies between modules - is the better practice. You can test whether your program has tight coupling or not by whether changing one piece requires you to change any others. I read this article soon after working on our team’s first pull request. With that fresh in my mind, I recognized several of these principles (or lack thereof) in our chosen project. I abandoned one of the I claimed because, after digging into it, I found that dozens of components would need to be altered to alter a checkbox. This deterred me from working on the issue. Why would the project use tight coupling if it makes it hard to work on issues? After doing a bit of outside research, it seems the drawback of loose coupling (keeping components independent) is added complexity. Nonetheless, this is considered the best software engineering practice.
One of the standout principles in the SOLID category is the Liskov Substitution Principle. Dr. Bowring assigned an additional article on this principle. This principle requires subtypes to be substitutable for their base types. We all learned the “IS-A” idea within inheritance. This principle wants us to go beyond that and implement the “IS-SUBSTITUTABLE-FOR” relationship. The example provided by both articles is the rectangle-square relationship. A square is an ancestor of a rectangle. It’s easy to say a square is a rectangle “IS-A” square and let this object inherit from the square object. However, once we start implementing methods in the square class that force it to be a square - for example, if one dimension is changed, the other should be changed to match - we create issues in the code. This is why it’s more appropriate to say that “one object can be designed to inherit from another if it always has an “IS-SUBSTITUTABLE-FOR” relationship with the inherited object”.
The Liskov Substitution Principle caught my attention because the “IS-A” principle is something that’s always taught in introductory programming classes with inheritance. I can see how this would cause a lot of confusion about how classes should be designed to relate to and inherit from each other. In the long run, teaching this way can result in programmers who are more prone to writing bugged code.
One idea I didn’t quite understand is premature optimization. The author of “From STUPID to Solid Code!” warns of this and even goes so far as to call it the “root of all evil”. He argues that optimization makes code more complex and unreadable. According to him, even the best programmers should avoid it. This was a bit counterintuitive to me, but his reasoning around unreadability makes sense.
Some other principles within the STUPID and SOLID acronyms are givens within software engineering - using naming, avoiding duplication, etc. One pattern within the principles is their relation to how different parts of the program talk (or don’t talk) to each other. Best practice seems to keep classes as separate and as focused on a single responsibility as possible.
Today, I attended the Alumni Symposium. During freshman year, one of my classes had encouraged attendance to the (then in-person) symposium, but I was unable...
The journey does not end after a software project has gone live. This week’s reading was “Continuing the Journey” - Chapter 9 of Client-Centered Software Dev...
“Databases reside at the heart of most software applications” (SD Chapter 6, pg 168). This week’s readings cover Chapter 6 of our textbook, Client-Centered S...
This week’s reading (Chapter 5 of Client-Centered Software Development) covers domain classes and unit/system testing. According to the text, “domain classes...
Proper documentation for both internal and external users of a software application is crucial to its sustained success after deployment. This week, we read ...
This week, we read “From STUPID to Solid Code!” by William Durand. This article is packed with high-level do’s and dont’s of programming. The “dont’s” are co...
This week, our class chose and reflected on articles from Software, Computer, or CoACM magazines. While perusing software magazines (finding good ones was an...
6.4. Exercise - Find the Oldest Bug Find the oldest bug that’s still open in your chosen project. Write a blog entry describing the problem, with a theory ab...
This week, our assignment was to explore http://opensource.com/, reading at least two medium-length articles from the site and blogging about what we learned...
This class, CSCI 462, is centered around contributing to an open-source software project through bug fixes, documentation fixes, and other improvements. Befo...
Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.
24.6 Explain why program inspections are an effective technique for discovering errors in a program. What types of error are unlikely to be discovered throug...
I feel like our team made great progress on the most recent deliverable (deliverable 4)! We met via Zoom more often than we did between any other two variabl...
23.6 Figure 23.14 shows the task durations for software project activities. Assume that a serious, unanticipated setback occurs, and instead of taking 10 day...
21.4 Explain why an object-oriented approach to software development may not be suitable for real-time systems.
This is my first reflection on our team’s testing project. I think this will be a helpful exercise as we move into the final stages of building our testing f...
20.10 You work for a software company that has developed a system that provides information about consumers and that is used within a SoS by a number of othe...
19.3 Why is it impossible to infer the emergent properties of a complex system from the properties of the system components? In the words of Ian Sommerville,...
18.4 Define an interface specification for the Currency Converter and Check Credit Ratings services shown in Figure 18.7.
17.10 Your company wishes to move from using desktop applications to accessing the same functionality remotely as services. Identify three risks that might a...
16.9 Design the interfaces of components that might be used in a system for an emergency control room. You should design interfaces for a call-logging compon...
9.8 Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them? Fault repairs to fix bugs and v...
15.10 The reuse of software raises a number of copyright and intellectual property issues. If a customer pays the software contractor to develop a system, wh...
8.7: Write a scenario that could be used to help design tests for the wilderness weather station system. Context: According to Chapter 7, Design and Implemen...
Mythical Man-Month - Does adding more labor to a project linearly reduce the time to completion? Or does it do the opposite, particularly to an already late ...
5.3: You have been asked to develop a system that will help with planning large-scale events and parties such as weddings, graduation celebrations, and birth...
2.1 Suggest the most appropriate generic software process model that might be used as a basis for managing the development of the following systems. Explain ...
4.5: Using the technique suggested here, where natural language descriptions are presented in a standard format, write plausible user requirements for the fo...
Our readings this week began with a focus on several software engineering failures which resulted in devastating incidents such as plane crashes (Space Craft...
11.4: What is the common characteristic of all architectural styles that are geared to supporting software fault tolerance? Architectural styles geared to su...
The Complexity of Software and Its Evolution Software is, by definition, complex. Frederick P. Brooks, in his article “Essence and Accidents of Software Engi...
1.3: What are the four important attributes that all professional software should possess? Suggest four other attributes that may sometimes be significant.
Hi everyone! My name is Janneke (pronounced ‘Yah-Nuh-Kuh’) Morin.