The need behind need to understand the Concept

The need behind need to understand the Concept

In this article let me share with you a very interesting fact that i have come across while conducting 250+ training programs on software systems designing .

One of the very interesting facts that I came across is most of the software engineers doesn't understand the need behind most of the thing that they do in their day to day programming related tasks. ie they know the "WHAT" of a particular programming concept but the moment you ask them "WHY" is it needed or "WHY" do you do this .. Mostly they don't know the answer behind the need of a programming concept.

One such question for which I have rarely got a correct answer over the past six years of my corporate training experience is "Why do we need to write a Class?".

Most of them know "What is a class" but they struggle to describe "Why do they write classes or why classes are needed?". Writing classes is something that most of the software engineers do left and right every other day. Also to add my participants are mostly between (3-20 years of professional programming experience) so concluding that they are novices might not be true.

This is so interesting that for every concept in object orientation if we just start asking WHY DO WE NEED THIS or WHY DO WE USE THIS ? . You will see most of the software professionals will struggle to answer this.

For example

  • Why do we need Relationships?
  • Why do we need association relationship?
  • Why do we need Polymorphism?
  • Why do we need Abstraction?
  • Why do we need Encapsulation?
  • Why do we need Access Modifiers?
  • Why do we need Interfaces?
  • Why do we need Abstract Classes?
  • etc

One of the reasons for this problem is most of the books in the market only talks about "What" and don't really explain the USAGE or the NEED behind a particular concept.

Think about it .. there are lakhs of professionals who are blindly doing things just because some books or people are saying it without even understanding "WHY" are they doing it …. Is it good for a "Knowledge Based industry"..

I am sure you all know the answer.

A good friend of mine once told me …. the difference between a programmer and a engineer.

According to him …. A programmer only knows "What" and a Engineer knows "Why".

Another reason behind this problem has been the confusion between "Analysis and Design" and complete ignorance of "Non Functional Requirements".

It might sound unbelievable but majority of the software professionals believe that drawing UML diagrams is designing…although it is not …

In my training programs when I ask my participants to frankly tell me … "How many people believe drawing UML diagrams is designing?" almost all of them raise their hands.

As we know Analysis is all about understanding the complexity of a system using different types of graphical diagrams like the Class Diagrams, Use case Diagrams, Use cases, Sequence diagrams, State diagrams etc etc.

While designing is all about solving the problem …wherein the problems are nothing but the non functional requirements/ constraints of the system.

Ambiguity wrt "Designing" and complete ignorance of Non Functional Requirements is the root cause of the problem.

In fact .. in the articles to follow we will realize , the "Why" or the "Need" behind most of the Concepts points to some Non Functional Characteristic of a system.

With companies and professionals ignoring "Non Functional Requirements / Characteristics" … it is not surprising that they are not aware of the need behind various concepts and best practices.

Hemant Jha
Founder - VPlanSolutions
Researcher, Trainer