Wednesday, March 20, 2013

Looking beneath abstractions


Thinking in abstractions is considered to be one of the key traits in modern human behavior. Abstraction uses a strategy of simplification, wherein formerly concrete details are left ambiguous and vague.

In computer science, abstraction is the process by which data and programs are defined with a representation similar in form to its meaning (semantics), while hiding away the implementation details.

An abstraction can thus encapsulate each of the levels of detail with no loss of generality. But perhaps a detective or philosopher/scientist/engineer might seek to learn about something, at progressively deeper levels of detail, to solve a crime or a puzzle.

But we often miss out digging on progressively deeper levels of details at times of need.
We should cultivate a habit of trying to dig at least a level deeper whenever faced with a puzzle.
We should not hesitate to press the F12 on any screen be it your favorite browser or visual studio. Look into the call stack and if none helps enable source stepping and check what from .net framework is not agreeing to your code. A feature, which allows you to step into .net source code has existed for visual studio for quite some time now.
When working on a web application don’t stop just at looking at your code in visual studio, study your requests and responses in fiddler to get a clear picture of what is causing the problem from webserver to your browser.
To relate an incident where digging deeper helped. Judge Alsup in the Oracle vs. Google case learnt java programming to be knowledgeably rule on the subject.

Judge: We heard the testimony of Mr. Bloch. I couldn't have told you the first thing about Java before this problem. I have done, and still do, a significant amount of programming in other languages. I've written blocks of code like RangeCheck a hundred times before. I could do it, you could do it. The idea that someone would copy that when they could do it themselves just as fast, it was an accident. There's no way you could say that was speeding them along to the marketplace. You're one of the best lawyers in America, how could you even make that kind of argument?
Oracle: I want to come back to RangeCheck.
Judge: RangeCheck! All it does is make sure the numbers you're inputting are within a range, and gives them some sort of exceptional treatment.

If the judge had decided to stay ignorant, he would have given a judgment similar to the Apple Samsung judgment.

Before we conclude I am not saying we should all be repairing our computers and bikes ourselves. But we should never hesitate in checking our carburetor; tracking your power supply and software glitches before calling the expert.