29 January 2009

Technological Innovation - How simple is it?

This is the time, when so many companies are sharply cutting back, the creative thinkers and innovation managers talk about continuous investment in innovation. They argue that the companies should look for opportunity to cut back on operations but not on innovation. Their concern seems to be valid. While many companies are giving a bleak outlook, there are very few companies growing even in the tough times. Are those companies well managed or do they happen to delight the investors just by mere coincidence? Whatever it is. The innovation is going to be a key differentiating factor. Many companies say that they are "most innovative company". But the real fact is that they aren't. No one other than the company says that they are innovative. They speak "Greek and Latin". Without understand what is innovation and simple way to move forward, most of the companies are going to be in no man's land. Is there are simple way to identify where the market is going? It is simple to say "Stay Abreast".

Innovation is doing things in a way that no one has done before. Innovation has clear business results both for the producer and consumer. For example, consider the case of Edison. He had so many inventions and he marketed all the inventions.  He produced so many products and sold them (obviously for a profit) and the inventions changed the quality of life of the consumers. Business results are key to innovation. All innovations must have Win-Win proposition.

Innovation can be classified into two types - blue ocean and red ocean. In the case of red ocean, you primarily focus on improving or redefining existing things and few of your competitors are doing the same. Blue Ocean is all about creating new markets. In the current climate, it is difficult to create new markets in realistic terms. However, you can be the first to swim in a red ocean.  

Innovation is catching up with the trend and moving along with trend. The nature spawns so many species but only very few species survive. The same is the case for innovation. When there are so many technologies, the fittest one survives. However, for someone who is innovating, the probability of identifying the right one is very low and hence there has to be a portfolio in innovation. One should try so many things and only then he/she can innovate few things (Darwinian law). But one can increase the probability of innovation just by observing the developments consistently. Who believed that "Web 2.0" would be a big success. But the companies who had Web 2.0 in their portfolio where successful.

How to spot on the developments? Simple. Just subscribe to lot of newsletter services and do a data mining at a simple level every month. At the end of few months, you can see where the world is going. Once you see the trend in a specific direction, maximize your energy and focus on high traction area. When you do this, the probability of uncovering something new and solid (with tangible business results) is more. Innovation needs a lot of hard work and never comes that easy.

Are you asking me, did you try it? My honest answer is "No". However, I wanted to try this approach towards innovation and get my idea reviewed by you :).

28 January 2009

Copyleft and Disclaimer for Tutorials

This is an attempt to document my experiences on technology, programming languages and operating system (on software in a much sensible/broader term). I offer this tutorial to those who are seeking the knowledge. I strongly believe in "Freedom" in the spirit of Open Source. While, I have taken efforts to verify the steps, methods and code, I cannot be held responsible for losses of any form. Please be aware that these tutorials come to you without any warranties. Until, I find a suitable Open Source license (more open for being open and less open for keeping it closed), the readers are advised not to modify. If you modify, you have host the modified and full version of the tutorial for free to all your readers. Bare minimum, maintain a copy of the modified tutorial via a website which is accessible publicly. Spread the goodness to the world like Open Source. We deserve Freedom and so is the entire world.

I would like to dedicate this work (and the series of works) to those teachers who constantly spread the knowledge to fellow beings generations to generations.

What is Creational Pattern?

As name suggests, the creational patterns are used in object creation. Any object oriented programming language will give you an infrastructure to create objects and perform whole lot of operations. One of the important and primary operations in any application is creating object. For example, in Java, you can create objects of any concrete types using "new" operator. However, the Java compiler or JVM do not know, are you creating objects in right way.  The way we choose to create objects decides many aspects such as reusability, maintainability and flexibility. Though we create objects in an application, we will creating objects for so many reasons. For instance, in the case of Singleton it enforces creating only one object for a class (type). As the purpose and scope of the objects vary, the way in which they are created should also vary to reap full benefits of Object Oriented Programming. There cannot be single solution for whole a lot of problems.

Let us consider a real world example. Assume that a car manufacture is planning to manufacture new brand (assume Swift by Maruti). While designing the car, the designers will focus on individual aspects of the car. There will also be a mechcanism to customize any model or to add features to the car. The extra fittings or specific model (Vxi, Zxi) will have its own assembling mechanisms. The dealers or the customers do not need to worry about how the car is made. They just give which model they want and the car is delivered to them. Internally, Maruti will have its own processes and standards to manufacture car hiding all the manufacturing details. It may choose to manufacture the parts or procure it from a different vendor. It is all internal Maruthi and the user does not need to know too much of details. It is all about exposing needed level of abstraction to the clients - not more and not less.

Also, as a developer, it does not make sense to fill your code with lot of "new" operator. By using "new" operator in lot of places makes the code to break maintainability and flexibility. When few more classes are added to the package or namespace, the developer will face a nightmare maintaining the code and quality of the code is also degrades.

So, the creational patterns helps to create objects in a better way rather than using "new" operator. When you use creational patterns (or any design pattern), you will be programming to an interface and not to the implementation. When you program to interface, your code becomes flexible and maintainable. In the next series of posts, we will be discussing creational patterns one-by-one.

26 January 2009

Design Pattern Tutorial


Design Patterns (Work in Progress)
Creational Pattern


19 January 2009

Core Values - Why is it needed?

What I was
"I am an ordinary software engineer and whatever I am going to speak is not going to have a bigger impact on my company and mankind. Also, I don't think the outcome of the events will vary greatly if I am not going to have certain core values. I feel that the outcomes, irrespective of whether I have core values or not, is not going to vary. However, I feel that I am undergoing a lot of churn in strictly following core values when compared a person who is loosely following certain values and certain people who just do the lip service. Given this scenario, is it possible to convince the person of this nature and make him a better and soulful human being." I was this kind of person, trying to have core values half-heartedly, trying to live and yet at the same time slowly dying. I also understand that if I do not have core values or if I live as I wish, I am doing a sin not to the world or nature but to my soul. Though, I may enjoy the deviation from core values in short term, my conscience is going to keep coming at me. Either should I settle for short term or long term happiness? The answer for this question will help me to decide whether to stick with core values or deviate from my core values. As a human being, one's brain always prefers long term benefits. So it is right to have core values thinking about long term benefits. Is this reasoning right?

What I am
I feel that you are going to keep up core values because of some benefits, there is a some business between you and core values. But, the core values, are something to do with souland not with the physical and emotional body. When you have core values, it is similar to that of realizing your soul and talking to your soul and ultimately talking to God. There will be a resonance between you and your soul. You and your soul become synonymous. This is the reason why you are getting long term benefits when you have core values. The resonance creates so much energy in oneself. Also, the energy is coherent and intense like a LASER beam. Only the other kind of people who have this energy is "a Child". The child always talks to his/her soul but he/she never understands verbally/emotionally that it is soul.

The Creator (or the nature) is quite aware of this and that is why HE has hidden soul from physical body. If you have found the existence of your soul, you will end up having core values and will be placed high on par with Rama, Krishna, Jesus, Allah. Like me, if you have identified that there is some connect between core values and other thing (which you cannot explain), I believe, you are right on track. Explore further and enjoy the bliss.

To sum up, some time back, I decided to explore the interconnectedness between soul and core values. What about you?

18 January 2009

Touch and Transform Lives - Build India

Anyone who uses Internet will understand its benefits and I agree with me if I say that Internet has wealth of Information. Not only we use Internet to connect with our closed ones, many educational institutions are started to change their learning methodologies. Internet has become a platform to deliver online classes and training. The advancements of video over Internet and video over mobile is going to take us much closer to our dream of classroom on the move. Your location is going to be immaterial, the classes will be delivered to you with Internet and mobile. This is looking from technological perspective and what is feasible with technology. Most of the things will apply to developed countries where these technologies are affordable or more rightly, the people have buying potential as their per capita income is high. The technological advancements will bring the next revolution in developed countries.

However, in countries like India where the majority of people do not have buying capacity, these technologies will take time to penetrate into Indian markets. Again these technological advancement, if not properly employed, is going to divide Indian society - the people who have access to these technologies and the people who do not have access. The main advantage of India is having people in working age compared to Europe, China and so many other countries where people are in retiring age. But, according to researchers, this is not going to be easier job for India as the policies are focussed on quantity but not quality. Certain reports question the quality of the graduates and claim that most of them are not immediately employable. Their claim is proven valid as we see a trend of increasing colleges and increasing rate in unemployment. Many corporates started to feel that heat and we will see a lot of churn post global economic downturn (In India, after economic recovery, I feel the training industry is going to boom. We will see many training companies that focus on imparting experiential knowledge). The corporates are breathing easy as demand matches with supply. However, after recovery, the demand will be more and the supply will be less. 

There is a heavy irony. Many of IT services company work on these technologies and take part in the Information revolution. But yet, we have so many Indians who have deprived of not these advanced technologies but even basic Information to get a job.

Many corporates fail to notice that they need to get people from the pool of available graduates. They have a blurred vision on elevating the average knowledge of college graduates/students. While corporates are focusing on profit margin, innovation and market positioning, they fail to see the important issue - "basic supply - human resources". Why the companies in India does not ask their employees to go back to some colleges and impart some useful training to students. Won't it help the students and corporates in a long run? Don't these companies have money to deliver classes to villages with the help of technological advancements.

One can look at this as CSR (Corporate Social Responsibility). At the same time, this is not purely a charity work, it is pure business. It is bread and butter for them as they heavily depend on the local workforce and its quality. If they fail to act now, they should be prepared to hire people and train them during the job which is very risky. So, either you have CSR or not, act right now.

Your CSR rating is not in the number of MoU you sign the colleges. It is directly proportional to the number of lives you touch and transform.

We strongly believe and want to bank on bright Indian brains. We have rolled out an initiative OpenGyan targeting colleges. We welcome you to join on the board. If you can't, at least spread a word to your friends and closed ones.

Linux Programming Tutortial Series

Having worked in Linux in my leisure time for the past four years, I would like write series of articles on programming in Linux. Though, there is no difference between Linux and any compliant systems as Linux is also POSIX compliant, it is worthwhile effort to learn Linux programming. POSIX is specification and by using POSIX interfaces one can write portable applications that work in any POSIX compliant systems. POSIX does not specify how a particular API (Application Programming Interface) has to be implemented. It is freedom given to operating systems. In this series of articles, we will be discussing, slowly but steadily, various POSIX standards, library functions, systems calls, sample programs and discuss how POSIX can be used. At the end of this long journey, we will understand most of the POSIX APIs and if we have will power, we will also learn the internal implementation.

As a usual disclaimer, I am not a subject matter expert but I do have four years of experience in writing Linux applications using POSIX. At the end of this journey, I strongly believe that my knowledge and understanding about Linux will be improved. I am planning to cover the following topics in coming months.

1. Process
2. Memory Management
3. Threads
4. Interprocess Communication
5. File I/O

Since this initiative is at a earlier stage, I am not sure about how often I will write but I am sure that I can write one post per week. I have also created a widget "Tutorials" and added "Linux Programming" make it easier for the readers to navigate directly to the tutorial.

Like me, if you are also serious about learning Linux, I would suggest the following
1. Get a PC with Linux installed. You need to work out at least 30 minutes to 1 hour, try solving exercises and examples. Trust, it is worth doing.
2. Get a book on C programming (you can find a lot of resources in Internet. Just google)
3. If you do not have a PC, at least I request you to think about exercise and write the programs in piece of paper and do the hand calculation. A Programmer does not need a computer to program :-)

Happy Learning

17 January 2009

Don't be perceived as sucker

I was reading bunch of articles in HBR. The interesting reads started with a good case study which was powerful, helped me to validate some of my ideas and gave new insights. The core theme of case study is how to deal with people or boss-subordinate relationship to be precise. It is quite usual and reasonable for your subordinate to think you as sucker if you really suck (from his perspective). You cannot just cover up. Get your basics right and update your knowledge.

While the global economy is in a see-saw, the companies are preparing to improve productivity and come out with a distruptive innovation to transform their capabilities, market share, growth and bottom line. If you are in knowledge-based industry where the productivity is in the hands of human resources, your ability to connect with people and understanding your team plays a key role for your organization's success. Period.

Today, the world is seeing a transformation in learning. The people, apart from reading books, they started to learn from their work. Some of the old tools and management styles will not excite the next generation. It is time for the old generation to understand the expectations of the new generation and channelize them. The new generation see their managers as not managers but as coach. They do not see their work only as work but also as case study.

So, it is quite natural to have differences of opinion among people of different generations as both the generations have blurred vision about the other. It is high time for the managers not only to know about individual behavioral patterns of their teams, it is worth spending the time on understanding the generation gap and leverage it to the team's advantage. As you move up, you will come across people of many generations. So, learn it now else it will be too late to learn. Jim Collins used to say about himself as life long student. It is an evergreen word and it perfectly fits now.

16 January 2009

Be prepared to execute - Don't let money to overburden you

The recent economic crunch has imposed serious implications on the profitability of some companies, the growth of some companies and bombarded the morale of the people. Yet there few good companies out there who do not believe in mass layoffs. Though, laying off people may help you in short term, laying off people in large numbers will have adverse effects on the companies' long term growth strategy. If you are going to layoff people just to cook up your balance sheets thinking that you can aggressively recruit people when economy recovers, you can proven wrong. It is natural law that when you go for a shopping on "Black Friday" all the offers are over. You will end up grabbing very few or none at all. These are just knee jerk reactions that could potentially cost your growth and market position. Rather, be aggressive internally to improve productivity and let your people know that productivity matters a lot. The productivity will manifest if you have focus and the focus will bubble up if you have interest and the interest is culmination of your passion, the burning desire.

Try to make people loyal to you, may it be your teammates or the customers. The character is something which you show up when you are in difficult times. When you connect with your existing customers and understand their concerns and address them, they will become loyal to you and evangelize your delivery capability. Similarly, when you show kindness, openness and warmness to your teammates, they will turn loyal to you. The loyalty does not know anything about economies. People will be there with you when you badly them. Tell your teammates who are low performers on how much they affect the team. Try to mold them, mentor them and coach them. Put the team ahead of your career growth. Make them feel that they are in the safest pair of hands and they are not risking their career being with you. Great leaders do this (and of course I got to learn from those people).

If you are an employee working for some company, try to read the vision of your company at least now. While I accept that "old is gold", some times "old is rust". Get rid of old ways of doing things such as practices in human resources, engineering, quality, project management. Now, the internet has become a huge database. Employ "sensible data mining" to leverage the huge database which does not cost you much (in most of the cases). Today, you can be happy to know about Web 2.0 and probably before we recover from the short nap, the world would be having Web 3.0. The entire world might be doing some sort of distributed computing with mobiles/personal computers. Be prepared for a change and most importantly "be spontaneous in acting for the change". Once you do that, you should be seeing yourself taller and in elite club.

Do not let money in multiple forms balance sheets, stock prices, CTC, bonuses and fringe benefits to take control of you. Allow the paddy to ripe and then do the harvest simply not because it is one of ways harvesting, but because it is right way of harvesting.

15 January 2009

CoW - Linux way of creating process

Linux operating system is one of THE most popular operating systems and continue to lead the embedded operating systems markets. In this blog, I would like to give an overview of a design decision in Linux and it is one of the reasons why I see Linux not only as Software but also as an Art. The kernel developers thought leadership is unquestionable. I am great fan of Linux Kernel Developers. Without bogging you down, let me come to the point directly. The rest of this post tells one of the reasons "why Linux is masterpiece?".

UNIX operating systems create processes using the system call fork () and overlay (load) a binary/executable image using exec () system call. The system call fork () does not have a parameter and the system call exec () few parameters to load a program from a permanent storage (File System). Practically, the system calls fork () and exec () are twins; fork () is the elder brother and exec () is the younger one. Let us first see the functionality of “fork”. As you may know a process is program in execution that has a state such as data, heap, stack, pending signals, open files and environment variables. When you want to execute something, let us say running a command “ls” from the shell, the “shell” process typically calls fork (). When the fork () is successful, the kernel creates another process which is copy of the process. So each successful call to fork () returns twice – once in the called process (aka parent process) and second time in the newly created process (aka child process). As a standard, all the operating systems copy the address space of parent process and create another address space. There is a overhead involved while creating fork’ ing a process.

Shortly after the process is created, either parent or child process is loaded with some other program. Typically, one of the system calls in “exec” family of system calls is used. When “exec” is executed, the entire address space of the called process is recreated. So there is considerable amount time spent in this “double creation”. Surely, there is some kind of optimization can be done to gain substantial performance.

In Linux, fork () does not copy the address space but just simply creates the kernel data structures needed to the new process. Now, both the parent and child process uses the same address space and the entire address space is marked read-only. So, both the parent and child process can continue to read the process address. When any one process tries to write to a page (memory page), the kernel duplicates the address space and creates the address space. But this is unlikely to occur. Another scenario is the loading a new program into memory. When this occurs, the kernel any way creates a fresh address space and starts to execute the loaded program. By this approach, the “double creation” is avoided. The deferring the duplication of address space has given a performance and sometimes procrastination helps.

The functionality of fork () is called CoW – Copy on Write. So from next time, when you see a Linux box and a running process think about CoW. But you have two process after fork (), which process will be scheduled first? Yes, Linux is a masterpiece. On a lighter note, CoW can also be described pictorially as below.



Taken from from my previous blog


14 January 2009

New Hopes for Outsourcing and Co-Sourcing - Thumbs up

Satyam fiasco has taken unimaginable proposition and sharp reaction is coming from developed countries (people from developed countries) such as US. Given the current economic crunch and the fact that it does not show any signs of recovery in near future, so many people are fearing that they will be out of their jobs in those countries. Many has already lost their jobs. It is very bad situation for those people who want to retire but ended up working few more years as their retirement fund has eroded. Since the recession is much deep rooted, there is fear that there will be few more rounds of layoffs before showing some hopes of recovery. I would like to give my views on global economy and how it is positioned to go to next level by banking on the growth/consumption of developing countries.

With this backdrop, Satyam's melt down has imposed serious implications about the credibility of its Indian peers. The people, who question outsourcing and its effectiveness, wanted to make use of this opportunity to advocate more against outsourcing. Some of them argue that outsourcing does not offer value. However, I would like ask a simple question, "Without any value or advantage, why many jobs are outsourced for more than 20+ years and to continue to outsource or co-source". The companies will have their own strategies for outsourcing. That being said, the emerging markets are not only focused on creating more jobs by outsourcing, they are going to be biggest consumers going forward. As a matter of fact, many, including UN say that the world is tilted towards emerging markets. Refer the article. So when the growth in emerging markets, it is worth investing in the emerging markets.

I strongly believe that the people who are reacting sharply during this downturn and more sharply after Satyam's accident will turn the other way. Once the current unemployment pressure cools down, these voices will be come down. At the same time, the big players of Indian IT should continuously innovate in their business models and to make sure that there is high accountability in the delivery moving towards risk driven or accountability driven business models and output/productivity is predictable and reasonable. They should stop being another shop or backyard to any developed countries but to deliver high values their customers. Indian IT companies should continuously keep their cards open for moving beyond outsourcing to matured partnerships.

Also, all the corporates in developed countries would like to do business in emerging countries where the population is huge as the consumption will be more. When you want to market your products in emerging countries, it makes sense to set up office and employ local talent for operational efficiency (low cost) and high skill (local talent have knowledge of the culture and marketing strategies). From my point of view, Outsourcing and Globalization are two sides of a coin and one cannot exist without the other. As long as outsourcing is stopped (at policy level), the outsourcing is going to continue. However there could be margin pressures (from my viewpoint, this is more a sort of operational challenge) which matured Indian IT will be able to handle in a better way.

More than outsourcing, the need of the hour is ability to absorb and take part in the growth of emerging economies. Surely, the emerging markets have potential to take the global economy to next level provided it is used in proper way. As an Indian and an Engineer from IT industry, I strongly feel that the growth of Indian industry and particularly IT space is promising. You will see more and excessive jobs getting created in India after this economic downturn (which is likely to recover in another six months flat). To sum up,

1. Please do not generalize things unless you see a trend especially if it is bad.
2. When US/European economy recovers, more jobs will be created in US/Europe and then more jobs will be outsourced.
3. The emerging markets are going to lead the next phase of the growth of global economy and this will also create substantial jobs in emerging economies.
4. When more jobs are created, the consumption will shoot up and this will take our planet to prosperity.