Sunday, April 9, 2017

Automation is boon or bane

"Automation" dictionary meaning is "the use or introduction of automatic equipment in a manufacturing or other process or facility. And the next line is ‘unemployment due to the spread of automation’. This word is quite old probably its in practice from 1940. So when we read lots of stories like impact of automation and job loss because of it, I wonder how this problem is not solved yet.
If we look back Human evolution, apart from the biological changes we are continuously improving tools and adapting to use them. So we invent and discover something lets say motor car. then we try to produce them in scale by setting up factory and establishing process. And slowly we delicate these task to different tools which are machine, robots and computers. In this process we force our fellow human from one form of job to another. So we always move to more productive things.

I belong to digital industry which thrives on the possibility of automation. Computers and software are catalyst for automation. After automating different industry now we are looking inside. It means IT will be more efficient in term of economy more people can afford and use.

For a developer perspective if we look beyond job risk, there are lots of possibilities are in horizon. Now all the development platform or systems are automatically provisioned. So we can have more servers, compute more storage to write and test our code. With test automation we will be more confident on our changes and quality. With automatic monitoring the health of our production system and software our systems will be more reliable. We are having smart editor which generate some part of code to assist developers. So in less time we can code more features.

My point is automation is a contentious process and an ultimate truth. The one who adapts it open to learn new productive way of doing always thrive.

Thursday, June 16, 2016

Magic with Computers

The expectation from a computer is always to do something which surprise us, which complement human brain in terms of memory, processing, decision making, thinking and imagining. When I say computer, it includes smart phone, tablets or wearable devices. When we compare it with washing machine, refrigerator or lift, we always expect more out of a computer.
First time when ATM machines were introduced,  people were amazed how banking can be experienced seamlessly. You can deposit money in one location and withdraw from a different location instantly. When we first time sent an email, or did video chat all were magical experience.

But Now a days all these look normal and nothing great about it. So for a programmer whats next ?
what are the things or feature will get that "wow" from the user, keeping in mind now a days almost every one has been introduced to Facebook and google.

I feel below points will help to do the magic.

Simple UI

Its very easy to say simple ui, all of us know and its a quite old rule. But still it holds good and the people consciously or sub consciously decide whether to use or not based on user experience.

There is no rule or some way you can measure whether the one design is better than other. But certainly there are lots of good practices. I believe deeper understanding of the problem and solution based on user perspective, knowing different attribute of your target audience like region, language, age group, popular culture of target audience will certainly help enhance for better user experience.

User experience is so important that, if you skip reading the below points from now, still you can get a wow from the user.

Input / Command

We appreciate some one obey the commands and do our work, But we love and addict to those who do the required task with out the command.
The less input,intervention is required for system to work enhance user experience . While designing system we can follow some philosophy like  don't ask for explicit input, rather than observe it from the environment or historical data.


Dare to predict and suggest and improve your prediction based on time. Always try to add some more value to the user.

Its a continuous process, reiterate the above point  time to time.

Let me know your thoughts how to get a wow ....

Monday, June 29, 2015

Java Immutable Object

The simple definition of immutable object is "An object called immutable whose states can't be changed after it constructed". It means every time we need to alter the state we actually end up having a new object. The best example is "java.lang.String".

Some body might be thinking its actually overhead, this practice ends up creating too many objects. Actually over the time with optimization of garbage collection and the cost of creating new objects decreases. So in a situation where you want to define constant, or say a multi threading case immutable objects work well. As the value doesn't change at any stage, we are assured of dirty or inconsistent value.

Lets understand how to create our own immutable object.

1) Make the class final, to stop any other class to extend.
2) All fields in the class should be private and final.
3) Since we don't want the state of the object to change,  there should not be any setter method.
4) Any method which require to change the state, must create a new object with updated state.

For Ex:

final public class MyCar
     private final String registrationNumber;
     public MyCar(String registrationNumber)
        this.registrationNumber = registrationNumber;
     public String getRegistrationNumber()
        return registrationNumber;
    public MyCar upgradeCar(String newCarRegNo)
       return new MyCar(newCarRegNo);