Is abstraction is what which makes code look smaller, simple and easy to understand? I was looking for the dictionary meaning of the word abstract and found that abstraction is some thing like “You flip the switch and light comes on”; as an end user I do not worry about the internals as long as I flip the switch the light comes on. While this is very applicable for the end user what about the electrician?; does he need to deal with this level of abstraction? The electrician needs to have an understanding of the internal wirings and the load the switch is capable of handling, in order to maintain or make repairs.
In software world I have observed something similar, whenever my peers refer to bring an abstraction, mostly they meant to find a word to compress the steps of doneness. Abstraction means you as a developer becoming an end user of a part of the solution, where you do not need to worry about the internal workings. Compression is finding a term to represent the entire process underneath which will be commonly understood by all the developers. An analogy of this to a restaurant kitchen is the word ‘marinate’ is not an abstract term, every one in the kitchen understands this and the chef merely has to say “marinate the meat for 20 mintues, use the secret sauce”. The situation would be different if the process of marination is automated and you have a machine to do that, in that case the staff is end user of that process and not part of it and hence s/he is abstracted from what marination is.
What holds good in a regular development life cycle, abstraction or compression?