Thursday, July 24, 2008

Point of Views for Software development

I had a single point of view for software development (in Indian IT projects)that was software is built by gathering requirements ,designing ,developing ,testing and deployment.A few days back in one of our design sessions , I realised that such a linear logical way of my thinking has made me misunderstand software development completely.What I realised that software can be looked at from various point of views which are mutually exclusive but collectively exhaustive. These point of views being 'Data', 'Domain','Application' and 'User Interface'.

Data : What is the flow of data ? What data getting generated and what data needs to be persisted ?

In traditional schools of software we are mostly taught this point of view and are some what biased by this Data View. This bias leads us to thinking about software as some sort of the record keeping ,persisting and retrieval tool.

Domain: This view is the Business view of the software. What is business context in which the project being developed ? What are the relevant entities ? What is the relationship between these entities ?

Here normally the tendency is to bring in concerns which are not relevant to Domain view like , What are the persisting mechanisms for these entities ? Which entities can be classes ? Which entities will be tables? Which entities are attributes ?
If you closely observe your thought process some where we mess this view with the Application View

Application : Here we purely think about applying the entities in different forms to create a design for result. Concerns like how to relate entities ? How would they talk ? and the above concerns of What are the persisting mechanisms for these entities ? Which entities can be classes ? Which entities will be tables? Which entities are attributes ? are a part of the Application view.


User Interface: This is the most important but completely taken for granted view of software development.
This view is mostly concerned with how do I present the data for achieving the purpose for which it is being made ? Here again the tendency is look at UI from the perspective of displaying entities and persisting changes to entities.

The beauty of software development is that all these views work simultaneously. It may start with Domain view but gradually everything becomes and emergent process ,one affecting the other.

The concern that I have is that if these views generate software then do we have a development model to cater to such a process of software development ? Water fall and agile are not quite there. Have worked on the both ways of development but not sure whether they can do justice to all the point of view simultaneously.

Monday, July 21, 2008

Programming is NOT Logical !!

wooowwww..... This is one of the biggest realisations for me as software developer...Programming is NOT Logical !!

If it is not logical, then what is it ?
Programming is all about structuring the complexity . When you structure the program you realise that complexity gets concentrated only in a particular part which needs to be dealt patiently.Rest you realise that everything is pretty simple and straight forward. In structuring, the complexity completely disappears ...For me while learning programming there are 2 complexities.. 1) Picking up the language and 2) Picking up the way to program using structuring ...