Monday, February 27, 2006

Fundamentals of the C Programming Language

The C Programming Language is one of the few programming languages that redefined a programmer's outlook to programming computers in late 70s and early 80s. But, it's important to point out why is C different from others. It's well known fact that it has the simplicity of a standard functional programming language yet has the power of a system programming language. Following are a set of features which differentiates C from others.

Functions vs. Sub-routine

Everything in C is a function. The question comes now is what is a function? A function is a partial program that can take certain inputs and return an output. Subroutine is a modular piece of code that may or may not take any input and certainly will not return any output. C eliminated all this distinction by providing
void
which would mean no input or no output.

Pass by Value

Unlike other programming languages C has no pass by reference concept. Everything that needs to be passed to the function has to be passed by value. What if you need an in/out parameter to a function. C does not have any direct answer to that. However, C definitely has a solution in terms of passing the memory address of the location to the function.

Support for Pointers

Pointers are the saving grace for a language that is a pure pass by value language. Pointers are a round about means of achieving a pass by reference alternative. However, pointers are beyond that actually. Pointers in most architectures actually expose out the exact process memory location to the user. This is an important and useful feature as the address can be obtained and be input to a piece of assembly methods for direct memory operations.

Dynamic Memory Allocation

Memory management which is pretty popular in today's languages were still a big requirement during the days of C. C provided dynamic memory allocation in its standard library implementation which can be used to allocate memory on an as required basis. Memory allocation and resizing gives enormous flexibility in designing programs which do not hog all the memory during program start up.

Abstract Data Design

Ability to design abstract data structures are a very useful feature with C. The following are some of the useful methods of designing abstract data structures.

1. Typedef
2. Struct
3. Bitsets
4. Bit operands and macros

Pre-processor

One of the most disliked features of C yet the most useful as well. Of course pre-processors being compile time constructs do not help a developer during debugging phase. However, this is one of the most useful features for designing generics, inlining and other such programming principles.

Use of C may be declining off late in comparison to C++ or Java, yet it will always be used as a base language that has made significant changes in the way programmers think today.

Wednesday, February 01, 2006

Knowledge - In the Internet Age

It's interesting to note with advent of internet a lot has changed how data is presented and communication as we have known so far. Firstly, the volume of data has increased to a large extent. Secondly, ability to manage data may it be databases or mere storage has increased drastically as well. Thirdly, the channels of dissemination of information has grown as well. An age which has thoroughly redefined itself in terms of data and information it's really important to look is all this leading to increase in the community knowledge base and human wisdom at large.

What is Knowledge?


Before answering these questions we must define Knowledge. Knowledge is a an embodiment of information (which is context sensitive data) that structure, classification and presentation attached to it. Although Knowledge sources are in the available data mere data imparts very little to knowledge. For example, a catalog of items have the cataloged information in a data store, however it becomes a knowledge asset only when all the data numerals are mapped to a presentation form which makes it legible to human use. XML technology in certain form actually has helped in presenting data separately from form of presentation through XSL, CSS and the like. Knowledge embodies both form of presentation as well as the data which is present in the presentation.

Origin of Knowledge


Another important question that arises from the above discussion is what is the origin of knowledge. Is there something called as a primary knowledge? What is most interesting to note here is every data that comes as input to a system has certain form information associated to it. Which essentially means there can be no data which is understandable to humans unless it carries a set of context, thus data in true sense is more of a transitory state. Said differently the data becomes information the moment we start decoding it. Now suppose we have received certain information and we are trying to summarize it and present it as a summary article. It's interesting to note here the origin of such knowledge is it the summary, the information receipt from a source or the source itself. To answer this I will say none. To drill down to the origin of a knowledge is fairly complex. Another example will be the syndication of news reported by search sites like Google. Can we say the knowledge of the news is held by the news site, the agency, the reporter or the actual site where the knowledge was gathered. The simplest way to address knowledge origin problem is to look at the form which is legally allowed to pick the information from rather than getting deeper into the copyright or patent laws issues.

Classification of Knowledge


When there were limited information around there was only one subject one classification of all information available. However, times have changed. Interdisciplinary concepts are being very common. Subjects like Robotics, Artificial Intelligence, Bio-Computing have merged the borders of knowledge bases. Given a piece of knowledge it has become fairly complex as to which domain/classification it will fall in. Thus, there is information and classification of the information can be in multiple domains. A systems which truly represents knowledge needs to identify and handle this in a useful way. There is nothing like a correct way in today's complex world of information.

Knowledge Transformation and Forms

While many companies have invested substantial resources in developing forms based solutions they are still solving the presentation aspect of the forms and from the structured presentation how to extract data which is meaningful, hierarchal. However, what needs to be thought of is a means to transform one body of knowledge into another. For example, most RFIs, RFPs and corporate brochures use the same body of knowledge as source but they are filled up differently based on a presentation style which different. A transformation system which can read and understand one form of presentation and transform the data into another for is bound to provide a strong meaning to the knowledge available today. Of course some companies are using resume databases to be automatically extracted out from resume databases but a lot needs to be done to provide true form based solutions for knowledge management.

Knowledge Security

When information becomes available to the extent it has become ubiquitous the immediate question that arises is, who should have access to the body of knowledge. What is interesting here to note is that the presented content has various security provisions. For example, although abstract of a publication is normally shown free to public there may be a charge for the complete publication. Your financial details are information available to your tax attorney it needs to be kept hidden from the general public. Now it's important to note here what makes a knowledge body complex is that although complete information is secured a derivative of that can be made accessible to everyone. In case of an automated transformation system proposed as above it will be hard to classify the information in the source of information what part of it is secured and what part is not.

What should a true knowledge management system provide?

Given that it's fairly complex as far as knowledge goes it's important to note what is expected of a true knowledge management system

0. Should have a method to classify and search content.
1. Support for large formats and forms of content.
2. Respect for original source of content (copyrights, patents and trademarks)
3. Security definition at the user and portions of the content level.
4. Ability to transform content from one form to other.
5. Should define a means of portability of content from one form to other.