Systems -> Interfaces as Goals -> Implementations

In the book How to Fail at Almost Everything and Still Win Big: Kind of the Story of My Life, author Scott Adams recommends thinking in terms of systems instead of goals. Adams defines a system as “something you do on a regular basis that increases your odds of happiness in the long run … [or] …with a reasonable expectation that doing so will get you to a better place in your life” (33) and a goal as “a specific objective that you either achieve or don’t sometime in the future … [or] … a reach-it-and-be-done situation” (33). Adams provides an example of applying systems vs goals in finance: “Buying undervalued companies and holding them forever, or at least until something major changes” (34) is a system whereas buying “a stock because they expect it to go up 20 percent in the coming year [is] a goal” (34).

I think that thinking in terms of systems or goals in life is similar to thinking in terms of interface vs implementation in programming. A system is a general idea of what to accomplish whereas a goal is a specific action related to the general idea. We can also imagine systems to be loosely defined goals without a timeline, and goals as a concrete tasks that bring us closer to achieving systems. In programming-speak, goals are ways to implement systems. For example:

  • To become rich is a system; selling a business within the next two years, investing with a well-known firm, working hard for promotions, and purchasing real estate are goals that propel us to become rich
  • To become healthier is a system; exercising three times a week, sleeping 8 hours daily, and eating healthy breakfasts are goals to help ourselves become healthier
  • To inspire others through writing is a system; practicing writing daily and taking writing workshops monthly are goals that help us develop our motivational writing skills
  • To act professionally in business settings is a system; punctually arriving for meetings is a goal that increases our professionalism

There are many ways to write the concrete implementations of an interface; likewise, there are many ways to achieve a goal. Different implementations may contain similar code …

Eg, in the base class, we can have the members:  

 public void Accelerate()

{ 
    int maxSpeed = 100; 
    CallAbstractMethodToHandleMaxSpeed(maxSpeed); 
}

 …and different goals may contain similar features (eg, if our goals were publishing books and writing magazines, accomplishing each requires writing at least an hour daily). Each implementation may be independent of each other; each goal may also be unrelated to each other, such as setting a goal for next week and setting a goal for five years from now. We can also imagine a system to be like the Builder pattern:

 In the director class:

 public void BecomeHealthier(HealthBuilder healthBuilder)

{ 
    healthBuilder.ExerciseThreeTimesAWeek();
    healthBuilder.SleepEightHoursDaily(); 
    healthBuilder.EatHealthyBreakfast(); 
}

 

And if we were realizing these goals simultaneously instead of calling the methods sequentially, we can call them in parallel!

  Summary: We specify the general idea with an interface/system and we provide ways of achieving that idea with concrete implementations/goals.

Sharing is caring!

Leave a Reply

Your email address will not be published.