Showing posts with label Design. Show all posts
Showing posts with label Design. Show all posts

Monday, December 11, 2006

Service Oriented Computing and Tech Shamans

The Design and the Designer – Part 8

There is a lot of talk about Service Oriented Computing these days – mostly by people who don’t seem to understand what it really stands for.

Until now, we have very good models of infrastructure engineering and applications engineering, but we are yet to see a reasonable model for process engineering and structural engineering in the computing science. This could be because of the unfolding of services as a primary business model has just begun and we have not yet understood what service really is.

A very successful billionaire once told me that the Services Automation is several orders of magnitude more significant than the industrial revolution. The explanation he offered for this significance was very striking. It has the beauty of simplicity and the brilliance of Truth to it. According to him, the basis of industrial revolution is control of resources and centralization of knowledge and power. Who ever can control and marshal resources and centralize and guard knowledge becomes wealthy.

But, the services revolution is exactly opposite. Its basis is decentralization of information, power and knowledge. Its basic premise is that we should use resources as when required without really possessing them. Look at the business models of today, especially the Internet. Its basic principle is making information equally available to everyone, and make use of resources as when required without possessing any resource at all.

But, how is this possible? Why would the wealthy people - who became wealthy because of the exact opposite principle - allow such a thing to happen? Why would they want to let go of their control and let go of their wealth?

Well, the answer is that it was not made possible by the wealthy and rich business people. Most of the computing science and the consequent business models are the creations of enlightened hippies. They were the only people capable of such subtlety of thought and action. They even managed to get vast amounts of funding from the very same people that they resolved to dethrone them from their seats of power!!

Let's look at the evolution of computing science, its absorption by the 'industry' and the unseen hand of the hippy.

On one hand, there is IBM and all its 'industrial' representatives and on the other hand there were tech-shamans.

What did IBM and its representatives contribute to the computing science? They tried big, fat main frame machines, resource hogging, hierarchical operating systems like MVS, they tried unusable programming languages like COBOL and they tried to push for data modeling rooted in their three hundred years of arrogance. Now they are trying Java and J2EE. In the software engineering side, they perpetrated process centric methodologies. All these technologies, methodologies, disciplines have one thing in common - they all aim to make the process expensive, aimed to clear the "owner's" inventory and make their clients/customer pay a very heavy price. And, more importantly - they have some kind of 'lock-in' of the customer built into all of them. In the long run - all of them are very expensive - the price paid by people who adopted COBOL during the Y2K issue must be an eye opener. And, who spent the money to resolve the Y2K bug, and who earned it? The people who bought COBOL paid the price, and the people who invented COBOL made the money. The same thing is currently happening with Java and J2EE - all in the name of open computing. The Java technology is an invention of the large computer hardware companies - their aim is to push their hardware, and consequently - the Java Technology demands more and more of 'centralized' computing power. As a language, it is doesn't maintain a clean separation between the virtual machine, the environment and the programming constructs. It looks like SmallTalk, but its philosophy is that of ADA - a big, fat language with too many features and no simplicity. And, today these are the same people who are talking about service oriented architectures and design methodologies. How will it ever work? When they talk about service - they have only one thing in their mind, the customer serving them!! One critical look at the current SOA will reveal that it is a tiger disguised as a holy cow - the SOA wants more and more resources, introduces more and more technologies, centralizes all information and knowledge in the system and very cleanly hands over the customer to the corporations. It is nothing but the mainframe machines, COBOL and process centric methodologies put together in a new disguise.

On the other hand, what was the invention of the tech-shamans of computing science? They invented workstations, powerful user interfaces, networking, distributed computing, cryptography, artificial intelligence, gaming, multi-media, Internet, Unix Operating system, C-like programming languages, hypertext, grid computing and relational data bases, agile programming, extreme programming, design centric processes and problem solving and so on. The list goes on and on. More importantly, they invented open sources programming, making freely available their ideas and designs. Is there any real programmer on earth who learnt his programming from IBM and what it stands for? Is it even possible to learn programming in such closed circuit, big brother environments? All programmers learn programming from the open sources - by contributing to open sources, by using open sources, by reading and following the open sources programming models. One thing common in all their contributions - is a clean separation of concerns, extraordinary simplicity of design, an approach to very clearly communicate the problem-solving techniques, and all these above inventions do not make it heavy on the users - they take responsibility for their own mistakes, they are all designed to tolerate errors from the environment, all of them are extraordinarily reliable and consequently very cheap to own. Neither the inventors nor their inventions charge the customer for their own mistakes. The SOA is known to this community decades ago. In fact, all the systems and technologies built by were all inherently "service-oriented". They are very economical in their resource usage, and they all freely disseminate knowledge and information. I call these people the tech-shamans and hippies of computing science.

I need to explain what I mean by Shaman and Hippy.

In general, the public image of a hippy is a person who is a drug addict and a general misfit in the society, who cannot live in the usual demands of the societal pressures. But, in reality - the hippies are people who are "free" - they are free from the usual tendency to acquire material possessions, they are free from the usual conventions of linear thought processes, and they are free from fear, greed and the usual trappings. They only desire for ecstasy - a few degenerated hippies may get this ecstasy from drugs - but the majority of them get it from problem-solving, from the joy of work. They do not demand any other form of payment. For them, money, power, fame etc., are all byproducts. Their main interest is in the 'kick' they get in understanding, the suffering they go through in the effort required to assimilate and internalize information and in problem-solving - the application of knowledge. A recent psychological survey revealed that problem-solving – working on difficult problems – releases the same chemicals that are involved in drugs – it produces a ‘kick’ very similar to drugs and sex.

Shamans are evolved ‘hippies’ – in a way hippies of the highest order. He could sit with a plant for a month, talk to it to find out whether its herbs could be eaten. Finally he may eat the herb and die – that would be his contribution to humanity. On the other hand, there are priests – the organized institutional worker - working for control and centralization as opposed to the Shaman who acts as a bridge between two worlds.

In no other field of human Endeavour, the fight between the free spirited hippy and the controlling industrialist are more marked and visible than in the computing science. The history of computing science is littered with records of such fiercely fought battles - the failure and success of Multix and UNIX, the great debate on relational and hierarchical data models, between what is ugly and beautiful and so on. The hippies had Dijkstra, Knuth, Ken Thompson, Tony Hoare, Writh, and E.F. Codd as their keepers of faith and the industrialists had large bank accounts. The history of human beings recorded rather well that it is fearlessness and truth that win the war, not power, money and ignorance. The result is well known even before the war started.

But, this time the hippies learned their lessons from history. They were no longer interested in fighting useless battles. By definition, their knowledge and inventions are available to every one - including the control minded industrialist. The evolution of computing science really nothing but a statement of how the industry assimilated the contribution of the hippies and shamans, and is slowly and painfully learning to respect them and their contributions.

Some examples and illustrations are probably required at this stage.

First, let's take Object Oriented Programming. For any normal human being, objectivity is the hardest thing to understand. Many philosophers, over the last few millenniums devoted their entire lives to understand and explain to us objectivity. The aim of science is an objective understanding and explanation of the reality - did it succeed?

Some tech shamans like Marvin Minsky and others - unleashed in the early sixties - some thing called Frames as a knowledge representation scheme, and some other shamans developed SmallTalk programming language. Even the names give their Shamanistic origins. So, object oriented programming was born. This was a very original idea - for those who understand it, it appeared very simple, and for those who did not understand it - it was an alluring mystery, whose secrets must be cracked at any cost. This division continues even till today - very few programmers really understand object oriented programming - the rest of them use UML. The object oriented analysis, modeling and the modeling languages are nothing but the industry's attempt to assimilate a very hippy concept. After all the literature, tools, systems, training courses that the industry developed for Object Oriented Programming - no one can still explain 'how to' identify and design an 'Object'. This is still the best kept secret of programming - passed on from the Master to his most accomplished disciple.

Again in the Sixties, the patron saints of tech-shamans - Dijkstra and Tony Hoare - unleashed some thing called concurrent or non-linear programming. The concept simply is that it is more efficient use of resources if programming is relieved of its tiresome linearity. How many people can think non-linearly? The shaman hardware designers went ahead and fundamentally altered the way the machine is constructed - they made the machines interrupt driven, in other words, the behavior of the machine is non-deterministic and thus non-linear. Countless coding soldiers wasted probably billions of lines of code trying to understand how to configure such a non-deterministic machine. If you look carefully at the core of the unreliable software - you can trace it to the so called 'dynamic' aspects of the environment - aspects that are not known apriori. How can you design a program for an environment that you cannot predict it at the time of writing the program? For the shamans - it is a simple problem with an obvious solution, and for a control minded industrial freak - it is unthinkable.

One thing is very obvious. More than seventy percent of the programming projects undertaken by the industry are failures - they run into too many technical and budget problems, they run into performance and reliability problems. But, name one open sources project that has any of these problems?

The industry tried to tackle this problem using their age old technique and very old, useless thinking tools. They created software engineering methodologies and they write tons of documentation of their technical designs and programs, they spend millions of dollars in testing. But, for some mysterious reason - open sources systems do not have any such things. They don't come with tons of specification documents, high level designs, pseudo code etc.

Anywhere you care to look - this division is obvious. There are two streams of computing science and two streams of people. Let me call them programmers and coders, or if you don't mind - shamans and priests. Even computing literature can be divided into two classes - the shaman literature and the priest literature. This division is very marked especially in Software Engineering.

Software Engineering is perhaps the only discipline that aims to teach problem-solving. Its interest is not in providing some specific solutions to specific problems, but to teach problem-solving. But, the big, fat books on Software Engineering written by priests do not get the central idea. They only confuse it even further – they describe methodologies and processes, basically they preach what people should be doing, without even giving a hint of how to do something.

The best software engineering books were written by Shamans – people like Dijkstra, Knuth, Weinberg, Rob Pike, and Bertrand Mayer and so on. Knuth’s 70 page paper on Errors of Tex is perhaps the best description of the software engineering process ever published. These are works that are full of insights and techniques – not some religious preaching.

But, what is the secret of the shaman?

The secret is - as all best kept secrets in the history are - is very simple and very obvious. The tech-shamans are basically builders and engineers. The metaphorical links between Free Masons and Free Software Foundation is hard to miss. They understand the process of design, they understand engineering as a discipline, and they understand that the process of making something and its final object of creation are two completely different things altogether.

Monday, December 04, 2006

The Alchemy of Design and the Sound of Music

The Design and the Designer – Part 7

In the last post, I made some observations about the process of Architecture – very briefly I stated that Architecture is the process of bringing meaning to space, and expressing the meaning in terms of certain engineering transformations, which transform the problem into an engineering problem.

The process of design – transforming ‘meaning’ into a set of engineering problems is very analogous to music composition. The difference between music and sound is the same as the difference between a sweet home and a concrete building. Therefore, let’s try and understand how music is composed. Later, we will define what engineering really is, and then I shall describe the relationship between design and engineering.

It is very simple to explain the physics of Sound. Sound is produced when two objects make contact with each other. Sound consists of a series of waves that ‘move’ the air in a particular way. The two major characteristics of Sound are its amplitude and frequency plotted on a time scale. That’s pretty much it.

What is Music? What makes certain sounds musical and certain other types of sounds non-musical? Can we say that Music is the sound we like? What do we ‘mean’ by liking? We use many different ‘esoteric’ words associated with Music, but not with Sound – words like melody, harmony, rhythm, tempo, beauty and balance.

A music composer somehow ‘transforms’ these musical attributes into a set of sound waves. The music theory build up over thousands of years provides some guide lines of how this transformation could be achieved. The music theory – whether it is western music, or Indian music theory – is a body of knowledge that codifies how music can be produced using sound. This body of knowledge can be divided into two distinct categories – the first category enables a music composer to ‘recognize’ his/her creative impulse. This is the body of knowledge that deals with recognizing music. This body of knowledge does not talk about frequencies, amplitude or rhythm, but it deals with characterizing the emotional qualities of music, and tries to categorize them.

In Indian Music – the concept of Raga for example deals with systematizing the ‘melody’ into a set of information structures. A Raga is therefore nothing but a shared understanding of melody and how to express it objectively. For those who are not familiar with Indian Classical music, here is a very brief explanation of Raga.

A Raga defines a set of melodic patterns and a melodic structure. For example, if you take a Raga like Mohanam – it is used to express the feelings of love and romance. Love and Romance are very ‘semantic’ concepts. What the Raga manages to do is to transform these concepts into a melodic structure and a set of melodic patterns. So, a composer whose creative impulse connects him with love or romance, he can then use the codified body of knowledge of Raga Mohanam, and compose music in that Raga.

Melodic Structure: This deals with the ‘rasa’ or ‘experience’ of music. There are about nine primary ‘rasas’ and another nine sub categories. There are all kinds of permutations and combinations of these primary experiences are possible, but any composition’s melodic aspects can be explained using these ‘rasas’. Apart from the Rasas, there is a ‘presentation’ aspect of the experience. The presentation is further divided into three categories: Majestic, Mellifluous, Simple (the Sanskrit Terms are Ghana Ragas, Rakti Ragas and Desi Ragas).

Melodic Patterns: The human ear is apparently very logarithmic. All music uses a concept of Octave. An octave is a predefined set of ‘notes’ or ‘frequencies’. The most frequently used octave all over the world uses 12 notes. Basically, you start from a certain base frequency, and keep increasing the frequency for every subsequent note, and by the time the octave is completed, you would have doubled the original frequency. Basically a Raga is a particular subset from an octave (7, 6 or 5 notes). It defines how to move back and forth along the octave (called Ascent and Descent). It also defines certain relationships between the notes – these are called ‘sangati’ and ‘sancharam’. In other words, a Raga defines – purely theoretically – a certain ‘musical movement’ (chalan), and also gives a set of ‘musical phrases’ that could be used to create a certain type of experience. A ‘raga’ therefore defines both the melodic structure and the melodic pattern.

The beauty of a raga is that it is just a pattern – without any ‘fixed’ compositional aspect to it. The same pattern can be used in millions of different ways – giving rise to a wide variety of compositions. A raga is thus a design pattern or a ‘semantic abstraction’. In the same way that a bird does not exist any where in the physical world, but there are millions of manifestations of the bird, a raga has no physical existence – it is just a useful abstraction.

The second category of Music Composition is closer to the characteristics of sound – and this acts a bridge between the musical characteristics and sound characteristics. For example, almost all musical traditions have a concept of an octave and beat cycles. An octave is an information structure and a very useful abstraction. (Please refer to my earlier posts for a detailed discussion on abstraction, semantic types and concepts). This body of knowledge of basically deals with the structural aspects of music composition.

Music composition therefore is very similar to design and engineering. There is an understanding of meaning and transforming that understanding into a set of structural transformations. Perhaps this is the reason why architecture is followed by structural engineering, and there is a very strong connection between architecture and structural engineering.

In the next post, we will define structural engineering, and its relationship to design and architecture.

Thursday, October 26, 2006

Non-Linear Thinking and Structures

The Design and the Designer – Part 5

In the last post, I made a brief mention of Nasruddin, Heuristics and Non-Linear Thinking. I shall continue in this post on the same theme and establish the role of semantics in Design and Non-Linear Thinking, and explore some techniques of practicing non-linear thinking.

First, here is a very brief synthesis of the previous posts on this subject: In the previous posts, I applied law of 2 and tried to demonstrate the underlying unity of the theme in various disciplines – which is referred to as Plausible and Demonstrative, Creative and Logical, Synthesis and Analysis, Right Brain and Left Brain, Linear and Non-Linear, Heuristic and Rational and so forth. Largely, the conclusion that one can reach is that there are two distinctive types of thinking – which are interdependent on each other, but at the same time have very different functions and applications. We termed the functions of these two types as – recognition of problems and finding solutions to problems. We also presented a few laws of synthesis – from various fields – particularly societies, management, computing science and consciousness.

Before we get into Semantics, let’s examine linear thinking and non-linear thinking in some detail – with some examples and techniques of how to switch from one to another.

Logic – at least the way Socrates and his disciples developed it – is largely linear. This is carried over into mathematics as well. Logic mostly depends on reasoning from evidence. The early Artificial Intelligence (which is neither artificial nor intelligence) applications ran into some problems with the linear reasoning and there are now several attempts to develop non-linear reasoning systems. Such logics in AI are called “non-classical” reasoning systems. Here is a classic example of linear and non-linear reasoning – it involves a very well known logic puzzle.

Three monks and three cannibals were traveling together because of some strange circumstances – even though naturally there cannot be any friendship and trust among such a diametrically opposite groups. If at any time, the cannibals outnumber the monks – they will eat them. Now, they came to a river bank and they had to cross the river. There was only one boat. The boat can only carry two people at a time. Now, your problem is to devise a strategy to transport the monks and the cannibals safely across the river.

The usual linear reasoning system will start with River Bank-1: 3M, 3C, River Bank2: 0M, 0C as the initial state of the system, and will try to devise a series of moves that will establish the desired final state - River Bank1:- 0M, 0C, River Bank2: 3M, 3C. It is a simple puzzle – you start with something like first two cannibals will travel, one will come back, two monks will then go etc., and you can easily arrive at the final state.

Suppose you give the problem to Nasruddin, what do you think he will do? He will listen to your descriptions, and even before you have completed your narration, he will jump from his chair and shout with the excitement of a child “I know, I know - the monks will take the bridge, and the cannibals will take the boat”.

It is a perfectly valid solution to the problem – isn’t it? Then you tell him “look Nasruddin, I did not say that there was a bridge”. Nasruddin will reply, “Well – you did not say that there was no bridge either”. Now, you modify the problem description, and you will add another constraint to the problem – there are no bridges. “Well, in that case, the monks take the helicopter” will be Nasruddin’s answer. By this time, you get very frustrated and shout back at him – “I want you to solve the problem – not avoid it”. But, for Nasruddin, there was no problem there to be solved. Can you see how he eliminates the problem instead of trying to solve it?

No matter, how hard you try, you cannot contain Nasruddin. He will always think of exploiting some constraint that is not included in the problem definition and use that as a means to eliminate the problem.

The AI community in the last thirty years tried and discovered several techniques for “programming Nasruddin type behavior” into the computer programmers – with some reasonable success. I have no intention of boring you with the Non-Monotonic Reasoning systems here. But what is the technique of Nasruddin?

One, Nasruddin does not depend on “evidence” as the only way of establishing the existence of something. All formal logical systems depend on evidence as the only means of establishing “truth”. For example, if I tell you that all visitors from Canopus are fools, and you know that Mr. X is a visitor from Canopus, you can confidently establish the truth that this particular Mr. X is a fool. But, there is a catch. Suppose, if this particular Mr. X is not a visitor from Canopus, then what are you going to do? You cannot establish anything. He may or may not be a fool. You can conclude Mr. X’s foolishness, only if you know that he is a visitor from Canopus.

We need facts to recognize truth, but Nasruddin does not rely on such petty things like facts to recognize truth. According to Nasruddin, some thing does not have to be a fact for it to be true. Kurt Gödel proved this mathematically – it is known as Gödel’s incompleteness theorem. The incompleteness theorem states that in any formal system, there always exists a statement which is “known” to be true, but cannot be proved.

Rabindranath Tagore – with the brevity that a poet alone can command – says it beautifully.

“If I say that the earth is flat – you inform me that my near sight is false.
If say that the stars are the fireflies attracted to the moon, the candle of the sky – you inform me that my far sight is false. My dear logician – in your presence, I prefer to be blind”.

*****

The second principle that Nasruddin mastered is the System’s Principle – understand the problem by studying its relationship to the larger environment in which it is only but a part. I wrote about this principle in part 2 of this series of articles.

In the specific case of monks and cannibals – all Nasruddin does is to bring his knowledge of the larger environment to solve the problem. The minute you tell him about the river and the boat, he can think of a bridge. He can bring his knowledge of traveling in the air, or swim in the water. Or, he will say that the monks – using their magical techniques – will vanish and reappear on the other side. Or, he will say that the monks will use their secret herbs and put the cannibals to sleep. His possibilities to come up a solution are infinite.

The study of system level relationships requires knowledge of semantics – or the “meaning” of things. There are basically two types of relationships – structural and semantic. It is important to distinguish between these two types of relationships. Though, in logic and other sciences, we are mostly taught how to study the structural relationships, in fact, our mind works naturally very well with semantic relationships.

A few examples from various fields may be in order here.

In language, grammar defines the structural relationships. In English, a valid sentence must have a subject, a verb, an orbject/predicate. And, there are various rules that define the relationships between various parts of speech. These relationships are basically structural – they govern the structure of the sentence. We can say that water is triangular – it is a grammatically valid sentence, but completely meaningless.

In information systems there are basically four types of structural relationships. By information systems I do not mean just software applications. Any system that organizes knowledge and depends on that organization is an information system. By this definition, societies, cultures, various disciplines of study are all information systems.

The first – and simplest structural relationship is hierarchy. This relationship in information systems is called “IS-A” relationship. A “IS-A” B. This could be interpreted in several different ways:

• B is the parent of A
• B is the boss of A
• B is part of A
• B is subsumed by A
• B is the root of A

Entire systems, organizations, societies are modeled based on this one particular relationship. Most hierarchical structures use this relationship as the primary relationship. The different sections in this blog-page have a parent-child relationship with the master page. There are basically five sub-sections – header, footer, posts, author information, archives – each of them is a “child” of the main blog page. Similarly, many corporations have a hierarchical structure – with the owner of the corporation at the top. The “semantics” of this relationship connotes ownership and protection.

The second structural relationship is network relationship. In such a structure, elements, or objects at the same level can be connected. This is called “sibling” relationship. A “IS-A brother of” B. The relationship basically means that two things are at the same level. It connotes competition and/or collobaration.

There are two other types of structural relationships in information systems hyper-text and groups. Both these relationships are somewhat non-linear relationships, but nonetheless, they are structural relationships.

The Set, and Hyper-Text are more complex structural relationships than a simple hierarchy and a Network. A set uses a function to create a structure. For example, you can say that all integers belong to a set. You can then define a function that determines an integer and therefore, the membership to the set. The members in the set may not have any particular relationship – they have something in common – that’s all. This is how most social groups are formed. The function gives an identity to the set and therefore to all its members. All people “born” in US are “Americans”. “Being born” in the US determines the identity of the set called Americans.

A Hyper-Text relationship is much more interesting relationships. It does not relate two nodes, but instead it relates content from one node to another node. All web pages use this structure extensively. For example, I can provide a link to an article in wikipedia in one of my articles in this blog. This does not mean that this blog as a whole and wikipedia share any relationship; it also does not mean that this article and the wikipedia share any relationship, and it also does not mean that this article as a whole has any relationship to that article in wikipedia. This relationship connotes friendship. There is no function, there is no responsibility, and there is no ownership in this relationship.

Using these four relationships, we can explain almost all “order” in our world. We defined the basic family relationships (parent-child, sibling), groups and friendships.

So, where is the place for Semantic Relationships?

We conveniently left out the most important, most complex, wonderful, problematic and the most beautiful relationship of all– that of the lover and the beloved. None of the above relationships explain that relationship – do they? What is the relationship of a husband and wife? What is the relationship of a teacher and a student? Friendship comes closest, but these relationships transcend friendship.

This is the realm of semantics – which is the topic of next post.

Sunday, October 22, 2006

Non-Linear Thinking, Nasruddin and Polya

The Design and the Designer – Part 4

In these series of articles on Creativity and Design, my intention is to explore if there is a “formal” model of creativity. I am not interested in the psychological aspects of creativity, how it works and so on. The Psychology of discovery and invention is wonderfully described by Mihaly Csikszentmihalyi in his classic book called Creativity.

My interest is to discover a method of consciously practicing it. In the last few posts, I tried to provide a basic framework that I am working on. Basically I am trying to bring together all my experience under one unified theme. Design is the name I gave it.

I studied mathematics and more importantly I studied how to ‘do’ mathematics. I studied computer science and information systems – I designed some very large and complex software systems. I studied design theory – product design, appliance design, communication design, aesthetics, user interfaces, ergonomics etc. I studied philosophy – Western Philosophy, Indian Philosophy and Sufi Philosophy. I studied systems thinking. Basically I am a problem-solver. Given any problem, I can come up with some kind of a solution. I met many people who are fantastic problem solvers. Many of these people can almost instantaneously identify a line of attack and can come up with a solution almost immediately.

In my experience, problem-solving can be taught and can be learned – even though we generally think some people are gifted with this ability. But, teaching problem-solving has been one of the toughest problems for the teaching community. There does not seem to be a discipline for teaching problem-solving. Even the most beautiful subject – mathematics – has not addressed this problem.

How are we taught mathematics? The mathematics teacher presents the proof of a theorem in a step by step manner. First, he defines the theorem, and he has the proof in front of him, and all the teacher does is to explain the ‘logical flow’ of the proof. In the course of several years, various problems and solutions are demonstrated as examples, and somehow the student is expected to ‘understand’ problem-solving from these examples. There is no conscious attempt at teaching problem-solving.

The ‘doing’ of mathematics is not taught. This is what makes Mathematics difficult to learn for many people. The best reference works ever written about this are Polya’s books on mathematical method: How to Solve It and Mathematics and Plausible Reasoning. For some strange reason – these books are not part of the mathematics curriculum.

Polya makes a very useful observation. According to him – rightly so – the process of problem solving is a heuristic process. The difficult part of problem solving is to ‘recognize the problem’ correctly. This recognition is not a “rational”, “logical” process. It is very irrational – if you are good at it – you can immediately recognize what the problem really is in an instant, and you decide on the line of attack. How do we normally recognize the problem? We generally use a set of heuristics. For example, you may recognize that the problem is “similar” to another problem you solved before, or you may recognize that the problem belongs to a class of problems that are already solved and so on. These are all heuristics.

Here is an illustration of how heuristics are applied. Archimedes first discovered the formula for calculating the area of the circle. The area of the circle is PI*r2. In Mathematics texts, the proof is presented using some complex coordinate geometric equations. Archimedes proof is rather very simple and can be explained in one line. He drew several lines from the center of the circle to its circumference. Now, the area enclosed by two such lines and the arc of the circle looks like a triangle. The area of the triangle is (base*height)/2. Now, the height in this case is r. And, the base of all the triangles put together is the circumference of the circle – which is 2*PI*r. Therefore, the area of the circle is PI*r2. Beautiful – isn’t it?

A mathematician will not agree to a proof like this – because, the way Archimedes divided the circle into different regions are not exact triangles – they only look like a triangle. Archimedes used a heuristic.

Now, let’s look at the process that Archimedes used to solve this problem. First, for Archimedes, the problem of calculating the area of a circle is a real problem; it is not a theoretical problem. He had to calculate the area of agricultural land for calculating taxes. Second, given a particular circle, he knew how to come up with answer. So, he has some data in hand. He has the areas of different circles in front of him and he was looking for a common “pattern” that explains all the answers. Third, he knew that the two fundamental properties of the circle are its radius and its circumference. The last step is the important one. He asked himself a question – can I formulate this problem in terms of problems that I already know how to solve? In other words, he knew how to calculate the area of a square, a rectangle and a triangle. Now, he is trying to “reduce” this problem to the problem of a square, a rectangle or a triangle. He also knew another important fact about areas – they are always expressed as a product of the two different lengths. He used four different heuristic techniques – generalization, analogy, reduction and induction.

Polya calls this type of reasoning “plausible” reasoning as opposed to “demonstrative reasoning”. Different disciplines may have different names for this. Psychologists call it right brain thinking, designers call it creativity at work, scientist call it intuition at work, systems people call it “systems thinking”. In popular literature, this is called “non-linear thinking”, “out of box thinking” and by many other similar names.

No matter what name you give it – the process of recognizing the problem, and the process of actually solving it involve two different kinds of thinking altogether.

Polya’s books are the best reference works on this subject. He tried to formulate a systematic method of “problem-recognition”. Unfortunately – thanks largely due to the American experiments with modern mathematics – the world today suffers from cultural isolation of mathematics. Polya’s achievement is remarkable. With the precision of a mathematician, he formulated a “dictionary of heuristic”. This means – if you have some patience – you can learn the heuristic thinking like learning the vocabulary from a dictionary.

Another dictionary of heuristic that is particularly enjoyable to read is the collection of Nasruddin Stories. These stories help us to break our usual linear and cause-effect thinking. Even just remembering the stories has the remarkable effect of constructing a different kind of associative memory. The stories ‘just’ pop up by themselves when we need them most.

More than 700 tales of Nasruddin are collected by Idries Shah and are published by Octagon Press. Here is one story of how Nasruddin describes the “two modes of thinking” that we have been talking about:

One day Nasruddin stormed into the tea house and announced with lot of excitement that he discovered a very important truth.

People asked him what it is.

Nasruddin said – “The moon is more useful than the Sun”

Everyone was taken aback, and asked him why he thinks so.

“Because we have more need for light in the night”

Nasruddin Stories make sense at many levels, and it is said that there are at least seven interpretations for each story. Here is one interpretation that is relevant in our context. Moon is the agent of synthesis. He synthesizes the sun light and reflects it back to earth. Sun is the source of light – when he is there – we have no need for light because it there everywhere. Your need is more when something is not available – right?

There are people who are experts at synthesis. Polya synthesized mathematical method, Will Durant synthesized history, Ackoff synthesized management, and Christopher Alexander synthesized Architecture. I am trying to synthesize Design. In order to synthesize a domain, you need to be a super-specialist in that domain and you need to be able to absorb the entire domain completely.

Both modes of thinking co-exist and compliment each other. I am not indicating that synthesis is more “important” or “superior” to analysis. Like the Sun and Moon, they are interdependent on each other. The linear and the non-linear, the creative and the logical, the plausible and the demonstrative co-exist together.

In order to synthesize Design – we need an understanding of Semantics. We have to understand the meaning of things, and how different things relate to each other.

This will be the topic of the next post in this series of articles.

****
Nasruddin on cause and effect:

One day Nasruddin was waling along a street with his students. As Nasruddin was walking past a two story building, a man fell down from the first floor – and he fell on Nasruddin. Nasruddin’s neck was badly hurt.

His students asked him what lesson they can draw from this incident.

Nasruddin was in pain and he was now angry at such stupid questions. He shouted – “fools – can’t you see? He falls from the building, and it is my neck that is broken”.

Tuesday, October 17, 2006

Innovation and The Principle of Inversion

The Design and the Designer - Part 3


In the last post, I made an observation that the design of complex products has a higher probability of success than the design of really simple applications. I believe it is an important principle from the context of creativity and the modern professional design.

If you are a professional designer – you may not get a contract to design a Stethoscope. Most certainly you will not get a contract to ‘design’ a new mathematical concept. Such things are innovations by the experts in the same domain. So, there is a well defined line between ‘revolutionary concept’ and ‘improvisation through innovation’. Most professional design today is more or less improvisation. It all begins with some one being able to specify what the need is and there already exists the product in some form or the other.

Most designers may take offense with a statement like this one. But, let me explain.

Something like a Fountain Pen, Printing Press, and Stethoscope are not simply products, but they are very fundamental concepts. Coming up with a new concept is a much harder task. Let’s call this creativity of the highest order. Or, let’s simply say that it requires genius. I really do not know how this works.

Next comes Innovation. What is innovation really? A Russian scientist (I forgot his name) studied this subject in great depth. He analyzed more than 20,000 patents to understand what innovation really is. And, he came up with a very beautiful definition:

“Innovation is eliminating an inherent contradiction”.

Suppose you were living in the late 19th century and you were working for an automobile company. You are asked to design a car with two contradictory parameters – performance and fuel efficiency. This means that the engine should be powerful enough, but at the same time it must also consume relatively less fuel. Common Sense dictates that as you increase the speed of the car, you have to give it more fuel to keep it running faster. You break your head for some years, and finally you come up with the design of a gear-box as a solution. As the speed increases, the engine has to do less work there by reducing the fuel consumption. This eliminates the ‘contradiction’ that existed between two design variables. From here, you can do many improvisations – like use light-weight materials for the body of the car and so on. (My understanding of the internal workings of an automobile is close to zero. Therefore, my explanation of the gear-box may be technically wrong. But, I am just making a point that everyone can relate to.)

Many of the famous algorithms in computing science work on the same basis – a really good algorithm is the one that ‘maximizes performance’ on two counts – speed and storage requirements. In general, in computing science, speed and storage can be mutually traded for each other. This means that if you want more speed, you consume more memory, and if you want to optimize on memory, you consume more CPU cycles. But, the really great algorithms maximize speed and minimize the storage requirements.

Innovation therefore works something like this: there are two or more variables that influence each other in some way – either proportionately or inversely. Innovation is nothing but somehow eliminating that relationship – meaning control both the variables independently, or in some cases, invert the relationship – this means that if the variables influence each other proportionately – then make them influence each other inversely and vice versa.

This requires counter intuitive thinking. The best example of counter intuitive thinking is the binary search algorithm. The binary search algorithm is a very simple algorithm – the algorithm finds whether a search key is present in a sorted input or not. Suppose you are given a set of integers sorted in ascending order – let’s say integers starting from 1 to 10. And, you are also given a ‘particular’ number – let’s say the number 8. What you have to do is to find out whether 8 is present in the input set or not.

The common sense solution goes somewhat like this: you compare 8 with 1, then with 2, then with 3 and so on, until either you find a match, or until you run through the entire input set. This is very expensive – because technically if there are billion numbers, then you may have to a billion comparisons before you terminate your search.

The binary search is a brilliant innovation. In binary search – you divide the input set into two halves – say numbers starting from 1 to 5 in set one, and from 6-10 in set two. And then you compare the ‘search key’ – in this case 8 with the last element in the set one. In this case, you compare 5 and 8. Since 8 is greater than 5, you ‘eliminate’ set-one entirely – because all numbers in set-one are less than 5, and therefore they are all less than 8. Now, you take set two and again divide into half – say 6-7 in set one, and 8-10 in set two. And you repeat this process.

You can search through a billion numbers with in 15 lookups. Because, with each lookup, you are eliminating half the input set. So, if you have a billion numbers – in the first lookup, you throw away half a billion numbers. And, that is a tremendous increase in performance. As the size of the input set increases, the benefit of the algorithm increases.

It is very difficult to think of solutions like this. In fact, there is no other algorithm that comes anywhere close to binary search in computing science. It is because, it is a very counter intuitive way of problem solving. The designer of the binary search is not interested in searching at all. His interest is to find out all those numbers that he does not have to search and ‘eliminate’ them as quickly as possible. Because you don’t have to retain the entire input set until the termination of the algorithm, as the algorithm proceeds with each lookup, you can in fact free up memory as well!! It is in fact an elimination algorithm, not a search algorithm. It is a search algorithm that does not search.

So, here is another systems principle. I call it the principle of inversion. According to this principle – our common sense understanding of the world is inverted. We live in an inverted reality. If you are looking for a best solution, therefore what you have to do is to “invert” your common sense understanding and this conscious inversion almost always leads to a better solution. All of us at first come up with a common sense solution. What you have to do is to then invert the common sense solution to get the right solution. Instead of looking from left to right, look from right to left (The Boyer-Moor sub-string search algorithm does precisely this). Instead of dividing from top to bottom, aggregate from bottom to top – or what ever else. Basically invert your initial solution. Instead of trying to ‘solve’ a problem, ask yourself the question: what can I do to not solve the problem? How can I eliminate the problem totally instead of looking for a solution? If you can eliminate the problem – what need is there for a solution?

If you want a very good application of this principle – refer to my earlier post called ‘Throw the Clock and Save the Humanity’.

If you are a first time visitor to this blog, you have to actually read it from bottom. This means that you actually have to ‘invert’ the page. The design of the blog is such that the part-3 of an article is followed by part-2 followed by part-1. Do you see how inverted the world is?!

Donald Knuth – one of the greatest computing scientists - made a very interesting comment about this inversion principle. He remarked that in computing science everything is inverted – even the trees have their roots at the top and leaves at the bottom!!

*****

As stated earlier, my primary interest is in applying the design principles to design one’s own consciousness. How can we apply the principle of inversion to obtain a better solution of the self?

Here is one application I found – and my life totally changed after this discovery. Most of us are taught that we reason with the intellect and feel with the heart. This is rubbish, it is totally inverted. In reality, we actually reason with heart and feel with the mind. Sounds intriguing? I am sure it does, and it begs some explanation.

The mind and intellect only react – they don’t respond. It is the heart that responds to a situation. Suppose you get into some fight with your wife on some usually very trivial issue. You get angry and both of you fight. After some time, it is your love that comes to your rescue; you realize that you were only reacting to something that is very silly. Which part of you is reacting and which part of you is doing the real thinking?

Suppose you are ‘by nature’ a ‘gentle’ person, or a ‘friendly’ person, or a ‘generous’ person, or a ‘humble’ person. It is this ‘gentleness’, ‘friendliness’, ‘generosity’ or ‘humility’ that decide how you relate to the world and situations – right? These are qualities that normally you do not associate with your intellect and mind. The heart does the real thinking for us – does it not?

The core values that one holds very dear – like goodness, love, friendship – are retained in the heart. And, it is these core values that drive our ultimate responses – not the fickle mind. The intellect is only an instrument of memory – its function is to retain and store experiences and information. The algorithms are resident in the heart. There are temporary algorithms (reactions) that may be initiated by the mind – only to ‘flush out’ the unimportant areas of memory. So, think and respond with your heart and store and retain with your intellect. This is what we normally do, but a realization of this can improve the quality of our lives tremendously.

For a beautiful illustration of this subject, refer to Chogyam Thrungpa’s “Path of the Sacred Warrior”

****

In the next post – I shall write about Non-Linear thinking and some techniques for practicing non-linear thinking.

Tuesday, October 10, 2006

The Design and the Designer

It is good to be back in touch with old friends and students who are all fired up about Design with a capital D. I have been reading the blogs of some of my young friends who are starting their careers as Designers. Recently I have been reading Manjiri Joglekar’s blog. She posted many interesting thoughts and observations. This series of posts are prompted by what I read in her blog.

It took me twenty years to understand what is Design and finally I now have the arrogance to call myself a Designer. In the next few posts, I plan to write something about what I understood, and may be give some advice to young and upcoming designers.

As a designer one has to deal with the Law of 2 all the time. Law of 2 is one of the most fundamental laws of the universe. Using this law, you can divide the entire creation into two different things which together make up the ‘universe’. For example, you can use Law of 2 and divide the universe into Creator and the Creation, Male and Female, Potential and Probability, Siva and Sakti, System fo Enequiry and Object of Enquiry, Plants and Animals, Humanity and the rest, Mass and Energy, Stars and Planets, Subject and Object, Form and Function, Usability and Functionality, Interface and Implementation, Boss and Subordinate, Rich and Poor, Believers and Agnostics, Republicans and Democrats, Democracy and Dictatorship, Intellect and Emotion, Cost and Performance – and what ever else is your fancy.

This law is a designer’s power and it is also the designer’s curse. Mastery over it is mandatory for success. It is your power because it is the most fundamental instrument you use to produce an appliance. It is your curse, because you have to understand the ‘unity’ that existed in the universe until you applied this unforgiving knife and mercilessly cut up the creation into two parts. If you don’t understand that unity, you will put your knife at the wrong place – and all the King’s men and his army cannot put Humpty-Dumpty together again. Law of 2 produces an interface.

Law of 2 also produces Law of 3, Law of 4, Law of 5 and Law of 8. A very brief description of the other laws is probably not out of place here.

Law of 3 deals with Functional Completeness. The concept of trinity is very old in religious, philosophical, and esoteric literature and systems of thought. In Hindu philosophy – there is a concept of Creation, Maintenance and Destruction, there is a concept of Tri-Gunas – Satvic, Rajasic and Tamasic and so on. Similarly, Christianity has a concept of Trinity. Most governments today are organized as a form of trinity – the President, Parliament and the Judiciary. In computing systems – there are architectures called Model, View and Controllers which are the most popular way of constructing large, complex systems. Most of the human endeavour is divided into art, craft and engineering. This law is used when ever you want to do “functional division”. Law of 3 produces structure.

Law of 4 deals with “spatial completeness” and “knowledge representation”. There are four Vedas, four sciences – physics, chemistry, biology and social sciences, there are four major directions – North, South, East and West. There are four major relationships – Spouse, Parents, Children and In-Laws. Basically, you use Law of 4 to organize the world. Law of 4 produces Organization.

By now, I am sure you get the drift. Law of 5 deals with materials and how those materials interact with each other to produce new materials and functions. For example, application of this law produces the five fundamental elements, the five primary organs of perception, the five primary functions of a human being and so on. Law of 5 produces Processes

It is a bit complex to explain Law of 8. Very briefly, Law of 8 is the law of integration. You put together all your divisions back together using Law of 8 to produce unified whole. Law of 8 thus produces integration. But, this is right now out of syllabus. This is not easy to explain, you have to internalize it on your own.

As a designer – your most fundamental concepts that you manipulate all the time are therefore – Interface, Structure, Organization and Process. Do you see an application of Law of 4 already working here?

Suppose you are asked to design a corporation – what you produce is an interface, a structure, an organization scheme and the related processes.

Suppose you are asked to produce a household electronics product – what you produce is its interface, its structure, its organization and the basic processes.

Suppose you have to design your own family and make it work as a harmonious unit – you have to think of its interface, its structure, its organization and the processes in built in it. Any problem in the family could be explained in terms of one of these four ‘elements of design’.

All laws of design apply equally well to ourselves. As a designer – you must first design the structure of your own consciousness. How do you do that?

You must learn how to interface with the rest of the world. If you attend an interview, and you tell them that your work is essentially a creative process – it will make people very nervous. Most design students that I interacted with place a lot of unnecessary emphasis on creativity. They somehow think that because their work is very creative, they are somehow “a special brand of people” and they expect the world to give them some special respect.

The world doesn’t care – your employer wants results. They don’t care whether the process you use is creative process or whether you have some sort of “manual” from which you cut and paste. Creativity is totally your problem.

Creativity and out of box thinking are very unreliable as far as the rest of the world is concerned. We are all conditioned to associate creativity with poets, artists and the like. And, we also think that there is no way such a function can be called on demand reliably every time. So your employer thinks that there is no way they can ask you to work to a dead line, there is no way to assess your performance, and that your quality of work will be very inconsistent.

They are right. Until you can master your own “creative process” and have the ability to summon its services when ever you want – you are standing on a very slippery ground. If our discipline lacks a mathematical underpinning, the rest of the world cannot be held responsible for that.

Instead of getting high on creativity bit, instead you should tell the rest of the world that your work involves synthesis and systems thinking. Tell them that instead of using the usual analysis and deductive modes of problem solving – you depend on synthesis, integration and problem identification. Tell them instead of thinking in terms of causes and effects, you approach the problem in terms of associations and relationships. You may stand a better chance of getting that job.

To be continued….
There are a total of about more than 30 articles I planned in this series. Eventually, I will complete this series. But , be patient. I am very greatful for any comments, feedback, suggestions. All your contributions will be duely acknowledged.