Sunday, 14 September 2014

Why Suddenly The languages I Studied Look Bad!??




(Image Ref: http://en.wikibooks.org/wiki/Programming_Languages)

The decisive goal of each programming language is to keep it effortless for the user and conceal the complexity in the implementation. The intact notion of theory in computer science verbalizes the abstraction by keeping it easy to the user. The theory puts a demand that every perception needs a formal proof for acceptance. Concept is goal driven to optimize it to the computer architecture. After completion of my degree, when I have the bigger picture of what I have acquired, I still have following questions unanswered.

The Expression Notation
We study about prefix and postfix notations and its greater advantages. Why do not the programming languages we use follow prefix/postfix evaluation of expressions? Why is not my language a set of expressions formally proving my program is right?

The Data Type
Data is information. User should write the data leaving behind the type of storage to the system. But we don’t do that! Instead we are also asked to communicate the type of data and hence defining a data type.  Instead, for the user there should be only one data type. The “data” data-type. May be that’s why I can’t return functions. Language would be so cool, if there was a provision to return the functions as well as a result.

The Definition of Data-Type
The definition of the data-type itself looks a faulty one. It’s not about how the data is stored in memory. In the first case, why should I even worry about how the data fits in the memory layout? It should be all about the operations which are possible on the data. Data type should be more of algebra on the data.

The Address Operation
Why the user is made aware of registers and pointer operations? Was it to cover up the limitations of the language? Instead, should not the language implementation take care of all the efficiency issues and not make it a concern to the user?

The Idea of Programmable
We all speak of domain specific languages today. Why is not my language customizable? It should be as small as possible which can grow as large as possible. User bears in mind very few details and grows the language in his own terms.  Why there is a restriction that execution has to begin with “main”? Why is writing an interpreter for my required domain so complex? Is it that the limitations of a language are covered up by adding more features than providing the abstraction?

The list of questions keeps growing like an ant trail. And that’s when you start falling in love with Functional programming.

Tuesday, 19 August 2014

The Software Productivity Paradox


Firstly my Acknowledgements to Mr. Harold Thimblebly for his extra-ordinary book on “Press On – Principles of Interaction Programming” which made me realize and put forward the following thoughts.

We never realized!
---> We never realized that the productivity from technology did come with side effects. Look at this arresting instance. Earlier people used to sit at customer care and handle the customer queries. Technology carved in and the process got automated. Now we snoop to automated voice and elect to choose for the required service. Look at the process in monetary terms. Earlier company used to pay for person who used to sit at customer service. Now we pay for using the service and listening to automated voice. Where is the benefit heading?

---> Though things have improved drastically, it still takes us same time to edit a document. Why do most applications fail to reach the audience? Too many features have only made the process slower. Some applications are in use, only because we are mandated to use it or there is no enhanced one yet.

---> Yes, I get a product with multiple functionalities but what about the training cost? A benefit somewhere is costing elsewhere.  We buy it to bank and invest on training without the realization. The holistic view may not integrate in totality.

---> Software’s have created inter-dependencies. I need to use some product only because my system does not support the format. The mandatory usage to one makes his connected also to depend and bring into play the same. The commons are over grazed and everyone suffers at the end.

---> At times, they come as a solution to a problem and thereby introduce many other tribulations. Once when we are into the system, we get dependent and drive the tradition. They come with a never ending manual documenting what doesn’t work; as the limitation of the product and never say that they were the shortcomings. We would have never purchased a washing machine if the vendor told us he would deliver the components in installments.

Yes, technology choices make a huge difference. I don’t intend to run a strike over “software usage”. All the “world changing” stuff seem like they need a polishing.  What we need are better interactive systems. Oh yeah! We need better engineers!

Monday, 28 July 2014

Kick Start to OpenSource


(Image Reference:assoc.drupal.org)

Following article gives you on how you can introduce yourself to open-source environment. 
 
The first mandatory requirement is to get a open-source Operating system installed on your machine. Or alternatively, find a problem and set up an suitable environment to deploy.

Firstly, all open source contributors share their code. Where and How?

The famous open-source repositories where you can find open-source projects are: SourceForge and GitHub. 1000's of code repo are available from distinct domains. You can download, install, run and add an improvement.
Follow the links:
You can go to a specific project and download all available resource. Most of the codes also have manual on how to run them and required environment set up. 
Example: New Command for Xen Scheduler
And there are some really interesting applications having thousand of weekly downloads. That should give a good kick start. Remember, you will have to be the one to explore the requirements. Open-source comes with less documentation, more challenges and hyper learning. You should be ready to explore the environment and really understand how system around us works.

There are numerous ways you can contribute to the open-source community. It could be a patch, code, documentation, theme design, art work etc. 
Find out more details from "Wiki How" .

There are numerous open source tools available. Can you build your own new API or a tool? Here is a exhaustive list of more than required number of tools.

However, to be more specific, your problems should look like:
I want to translate Notepad++ to Kannada and and i got the source Here. Am planning to contribute something to programming language "go" from google. Like report a bug or resolve an issue etc. and Here is where i found the documentation. I want to build my own new mathematical equation editor and Here is my reference.

Well, Enjoy Coding!