Monday, May 12, 2008

Right generalization

We can think that the generalization of software development is making a specific thing more general. For example, if we find that the specific things of our project could be used widely in variety environment, we could generalize it with removing specific things and considering variety environment.

A few day ago, I found an interesting fact. After something is generalized by someone, contrary of his or her expectation it is not used often. For example, I made a simple library named 'StopWatch' which measures processing time between sections in program. For generalization, I designed it based on interface and applied structure for extendability. Then, I registered it on common library repository. Of course, I did`t forget announcing it through the team review. What about StopWatch after a year? Nobody used StopWatch except me during the past year. Also, I could`t see who appears interest about StopWatch.

I have had various thoughts through this experience. I used time to generalize the StopWatch. If someone saves his time with the StopWatch, my effort might be valuable. However to conclude nobody used it so the time used for the StopWatch could not be valuable. Moreover, the space complexity of common library repository is increased due to the StopWatch. This complexity affects understanding and compile-time for codes.

I seriously thought why this happend. My conclusion is that these are from hasty generalization. In general, generalization is performed by self decision. Someone thinks of generalizing something during development and generalizes it. But, we need to honestly ask ourselves. "Should this be generalized?" Maybe, the answer for this question is always not "Yes". So, I think that we need to concern whether generalization has value before generalizing something. That is, we should watch out hasty generalization.

Next, my interest is the steps of generalization. The steps of generalization mean phases which generalization must step on. In my opinion, the steps of wrong generalization is making the results of generalization like falling from the sky even though nobody needs it. Nobody needs StopWatch. But I had uploaded it to common library repository. This was only my thought.

So what are good steps for generalization? I had made a validation library based on Java-Annotation. This was only used in my project. It had dependency codes on my project. One day, however, someone saw the validation library and asked me to use it. He might have thought that it`s good. So, I removed dependency codes and promoted it to the common library repository for him. Now, It is used as standard in my team. In this case, the validation library is generalized naturally with requirements unlike StopWatch. I think that the preceding case is an ideal case for generalization.

Thursday, May 1, 2008

Productivity improvement and software developers

Software developers really prefer the such as 'Productivity'. It seems that they also like the word 'Productivity improvement'. When someone says 'I improved productivity with some technique', they applaud him from their heart.

But this productivity improvement could be thought differently in viewpoint of developers. The following is a story from my imagination.

Using Java means that many instructions are run on by JVM. The JVM separates developers from the operating system(OS). For example, developers don`t need to learn the principles of OS due to JVM. JVM and APIs based on JVM run instructions which developers want. In viewpoint of architectural, this concept might be great.

I think that this dandy concept affirmative contributes to software industry. With JVM, developers could develop web and GUI client applications that have high portability and also could develop strong applications without knowledge about OS. Of course, these two benefits make development productivity higher.

It`s good. So, is this good for developers? I think it`s not. This is for software industry rather than developers.

For example, suppose that the development team of the company A had used language B that have not good portability. And they had published their software to Unix, Window and Mac. With language B, they needed works to port sources so they had always arranged time to port sources whenever major functions were developed.
But one day, Java was newly released to the public. The CTO of company A inspected Java and then he thought that time to port sources could be reduced because the Java had higher portability than language B. He obtained the consent of CTO and the development team started converting all sources to Java under CTO leadership.

After one year, the CEO of company A realized that development productivity is improved even though there are some disadvantages. It`s good for busy company.

So, what about developers?

The developers worked hard as usual. There was a trivial difference that they did other jobs rather than porting sources. Yes, unfortunately differences for them are nothing. Also, developer A, who was pleased with taking experiences of delicate differences between OSs, was preparing for retirement because he was recognizing that there are not technical goals to challenge any more.

Feed