Let me explain this relating to society. In society, we are all linked to each other in some way or another. The six degrees of separation experiment tells us this is so. In a family with young children, the children are highly dependant on their parents, which is akin to tight coupling. As the children grow up, the dependence lessens as they become independent, which is loose coupling. Based on software engineering principles, this tells us that if society was modeled upon software engineering, it would be better if everyone were independent of each other. Society would be easier to "maintain". But is this true? Well, not so. It would be easier to maintain if you were thinking about record keeping and statistics of the person, which would be behaviour and data in a software model, as you only contact the single person for any source of 'data' relating to that person. However in real life, no person is truly independent because they take on behaviour shaped by society and is reliant on the same society for different needs. For example, each of us has bank accounts. To deposit money, we go through the bank, in that way, we are reliant on the bank. Humans are reliant upon each other for social needs. This is evident in humans as well as in the animal kingdom. In many cases, a strong tightly coupled society is good. Software code has no feelings and no basic requirements, so they can exist independently. The question to ask is then, why not promote tight coupling in software? As said previously, tight coupling leads to hard to maintain code. However tight coupling is acceptable if the components are highly cohesive, i.e. related to each other. For example, a wheel and axle. The wheels and axle can be loosely coupled and exist independently, with an interface between the two which allows any type of wheel to be used with any type of axle. This interface is tightly coupled between the two components. Making changes to the wheel will mean changes to the interface, but not to the axle. The interface would be like a cashier working at a bank. The bank, and the customer, exist as separate entities not strictly dependent on each other, i.e. loose coupling To deposit money, the customer goes through the cashier, the intermediary. There is tight coupling between the customer and cashier, and cashier and bank, but loose coupling between the customer and bank. In the strict loosely coupled ideology, the customer would be his own bank and maintain his own finances. Not very ideal as that would mean everyone would require a bank each.
So in designing software, it is important to think of coupling and cohesion, and find a balance between the two. In society, no one can truly exist on their own. Cohesiveness has to exist somewhere. In building software, reflect on the principles of how society is built, and taking that approach, think about how you can build your solution better. I find it astonishing how many many things we learn are all linked to each other in some way through abstract thinking.
And to conclude, you can bring about better cohesion in your life by ringing your mother this Sunday and wishing her Happy Mother's Day!