Wednesday, September 28, 2005

Binary Files

Binary files are bytes or streams of 0s and 1s which computer's hardware can understand. On the other end we have source code which is series of literals and enlish like keywords which are "human understandable". Source code is a set of instructions intended to achieve some desired goal/objective/functionality. These two broadly are the two ends of spectrum of software industry.

Terminology may differ. People in OOP would make source files and class file representing them but the fact remains same. Machines and humans dont understand each other's langauge. Part of the reason the situation remains same is architecture of computing machines taken. When they where made machines where thought of as number crunching monsters. So there hardware was designed so as to compute addition, multiplication and all the logical stuff needed. Then from computing we moved to word processing and office automation which thpugh required totally different features. These features where mapped on the same hardware and general purpose machines where made. This is a separate topic of discussion. Lets not move in hardware lets just talk about the SOFTware.

Language incompatibility amongst machines and humans led to creation of this spectrum. Human readable source code on one side and machine readable binary on otherside. Source code in all its essence represents human will which gets translated in machine instructions. What happens in between? If i am the master and computer is the slave then why do i need big big companies to make my PC understand what i want to do.

Software in real life would be flexible to allow user to express her/his whims and fancies. The way we currently do it is that binary would read from a file/setting/property and change its behaviour. If you want to change "behaviour" of a program then either we have to change the "settings" somewhere which the binary would read and determine what to do. Notice that the binary is to check the values in setting and perform some action. Now behaviour of binary hasn't changed.

Wednesday, September 14, 2005

Next Best Thing

Wondering for the next killer app, the next breakthrough. Gazing through crystal ball for whether Microsoft will still be there in future and world would still use the same computer languages (Only if "computers" exist then)

Let me take a guess. First one observation. Please look at the keywords "computer languages". Why is it a language? It is an expression of desire from a user to be fulfilled by the machine.

What model current industry follows is that through market research or direct customer interaction and various inputs from resources people develop a software for a user.

The programmer made it as a "source code" i.e. human readable instructions which aim to achieve a goal. Now the typical software would encompass all the scenarios, environments, situations that a user can present and various actions it can do with the software and make the software according to that. So the user has no control.

If user wants to modify or change the software then he/she has to either get it recompiled or developer has provided options, menus, configuration files which will change softwares behaviour. What Free Software Foundation thought that it should be completely FREE and open to change. FSF though has brought a large shift in computing industry (in some other unintented ways) but it did not become the killer app.

What future requires is expression of thought and desire of the human. It can be in GUI by which I dont have to type may be i could write by just waving my hands in air or some wierdo thing. It can be in terms of logic programming where programmer only tells what is to be done not how. It can be a break through in GUI wherein I dont have to write in a linear fashion within a box.

We have studied generations of computers but not generations of users. Nowadays users have become sophisticated. You can expect some level of familiarity with computers. As Alvin Toffler envisioned in Third Wave we would be having prosumer. The line between a producer who creates a product for a consumer and they interact through an entity/interface known as market would blurr. Soon people would be programming themselves.

Now here take a word of caution. They would not be writing complex piece of software in C, Java or some other shit then compiling it and loading them but then software itself would be highly configurable and better languages would develop to express user's desire

In our technical jargons and mumbo jumbo we have forgot that computers are means to an end not the end in themselves.

Friday, September 02, 2005

Magic and Science

Magic and Science always seem opposite things. Magic is wonderful and unexplainable whereas basis of science itself is explanation. An explanation which is universal can be understood by anyone. But fundamentally they are same in one point that is wonder. Good magic and good science are always wonderfull to look at. The new age has denied both. If I tell you that soon we would be all mechanic zombies with infinite computing capabilities embedded in our neural systems then you would think ya ya ya it is possible. Magic inherently is science and vice versa. What looks magic to one has a science behind it. Remember all the great magicians where great intellectuals, had high IQs and where really intelligent.

That magic has gone out of technology domain. Where if you see a moving train on a huge screen you would run for your life. That awe for the unexplained as dimmed. May be it is because we have lost our curiosity. The scietific zeal. How many of us think how are things made how are things done? When science has entered electronic domain our experience of technology the internals, the dynamic has been remote.

To be more clear let us take example of mechanics and electronic/software. Engineering itself comes from wod engine. In my discussion it would mean a system not necessary and "engine" or a tangible machine but a system which has various components which is designed and implemented to fulfill a particulare requirement or desire.

In mechanical engineering you can visualize that if you pull this gear it will pull this part,this part will rotate and so this part would move by this amount. Your imagination and visualization depends on everyday experience. In software and even in hardware it becomes increasingly abstract and remote. It is always very difficulto to explain the software "design" and "architecture". How can you explain a server "running" and client listening . How do you explain or visualize what software does. The mental image that you make may not be necessarily the same the other guy makes.

One way is software documentation where by words and diagrams one tries to explain and "represent" various parts, connections, behaviour of software. The other is sorce code. It is the human readable form of actual thing that runs on machine. But increasingly we need better mechanisms to represent them. What a function does and how does it achieve this. We should move out of the standard documents in a hierarchical folder concept.

Crazy Idea: We can simulate a physical thing i.e. a machine, physical set up by software can we simulate another software using a software ?