wikumsblog

Computing Science vs. Computer Science

In Education on July 2, 2009 at 11:31 am

During my undergraduate years, when we had to register for courses at the beginning of each semester, there were certain subjects that most students preferred to avoid, if possible. Not only did they find the subject matter of these courses uninteresting, none of them could be considered an easy way to fill your credit requirements nor did they provide easy grades. I don’t think some even realized why those subjects were there in the first place.

And it’s quite understandable – they wouldn’t need those subjects in the industry as a developer. In fact, only a small amount of the knowledge gathered at the university would be needed for the average developer or the engineer. Most students who come to study Computer Science are not really sure what to do with subjects like Theory of Computing. The knowledge that is really needed for the industry by a fresh undergraduate can be found in small number of courses, such as Software Engineering, Object Oriented Programming, Web Programming, and Database-related courses.

The term “Computer Science” implies that it is about the science of using computers and hence, almost any subject that is about using computers can be put under this umbrella term. But the subjects above mentioned would be the ones truly at home here, because they are indeed about using computers.

On other end of the spectrum are those subjects which only a minority of students actively pursue. What the other students often do not see is that those subjects are geared towards furthering our knowledge about computers themselves, and thus most students who take those subjects aim to do research in the future. I would categorize these subjects as “Computing Science” rather than “Computer Science”.

If you look back to your CS undergraduate curriculum, “Computer Science” subjects would be, for example,

Software Engineering
Object Oriented Programming
Computer Security
Web Programming
Databases

whereas examples for “Computing Science” subjects would be

Theory of computing
Cryptography
Algorithms
Most AI Subjects (e.g. Neural Networks)
Fuzzy Logic

Other subjects such as Operating Systems and Programming Languages fall more in-between. An almost trademark characteristic of subjects in the latter category is that a large part of them overlap with Mathematics, or, they are simply mathematics subjects. Computer Science grew out for the most part from Mathematics, and these subjects still retain that nature.

The Scientist vs. The Engineer

This division represents an important decision a CS student must make about his or her career: are you going to become a Scientist or an Engineer? It would be helpful to remember that the engineer is more concerned with how to do things, while the scientist is concerned with how things are – thought of course, Computer/Computing Science is an area where these two aspects really mesh. Most students who study CS focus on the engineering aspect of it. I chose to focus on the other.

I believe it would be useful for students if universities invested some time in explaining to new students how the different subjects are geared for different paths. In my experience some faculty members certainly did their part to educate students about this, but it didn’t happen always.

Liar, Liar, Pants on Fire!

In AI on July 2, 2009 at 12:30 am

When developing intelligent agents based on human intelligence and behaviour, it is important to understand what the agent considers to be ‘truth’. Particularly if the agent is using one or more varieties of logic for it’s reasoning purposes, then it has to be known what can be considered true and what is not. In classical logic, this is not a problem at all, but in the specific types of logic that have been developed, many of them for AI purposes, things are not so simple.

Truth Maintenance

The idea of a “Truth Maintenance System” or TMS, was developed by Jon Doyle. A TMS is used for maintaining logical consistency (i.e. “truth”) of a knowledge base (KB).

A truth maintenance system, or TMS, is a knowledge representation method for representing both beliefs and their dependencies. The name truth maintenance is due to the ability of these systems to restore consistency. It is also termed as a belief revision system, a truth maintenance system maintains consistency between old believed knowledge and current believed knowledge in the knowledge base (KB) through revision. If the current believed statements contradict the knowledge in KB, then the KB is updated with the new knowledge. It may happen that the same data will again come into existence, the previous knowledge will be required in KB. If the previous data is not present, it is required for new inference. But if the previous knowledge was with KB, then no retracing of the same knowledge was needed. Hence the use of TMS to avoid such retracing; it keeps track of the contradictory data with the help of a dependency record. This record reflects the retractions and additions which makes the inference engine (IE) aware of its current belief set.
Truth Maintenance Systems

Hypocrites!

How much of “truth maintenance” does the average human being do? Humans do value truth, and we do try to maintain logical consistency in our everyday reasoning, but it is far from perfect. And yet this does not seem to impede us much in getting day-to-day work done, and could even be more advantageous given the limitations of our senses and our brain.

We have a gigantic knowledge base that needs maintaining; if we applied the idea of truth maintenance to all of it, we would find a lot (and I do mean a lot!) of inconsistencies. But what has to be noted here is that it would be largely meaningless to considered the store of human knowledge and experience as a single KB – it would be more appropriate to consider it a cluster of KBs, where knowledge is clustered according to differing contexts. We only need to do reasoning in specific contexts (unless perhaps you’re a philosopher).

But the boundary between these clusters are not finely divided and it is quite possible that, from time to time, we might need to reason about beliefs taken from different contexts. And this is when we sometimes see inconsistencies in our beliefs, and sometimes we turn out to be hypocrites.

Nonmonotonic Reasoning

Nonmonotonic logic is particularly suitable for exploring human-like reasoning. Unlike monotonic reasoning where any conclusions drawn are final, nonmonotonic reasoning allows you to draw tentative conclusions and retract them if necessary in the future.

Consider the following scenario: suppose in an intelligent agent we have the predicates Working(W), Home(H), Listen to Music(M), and Use Headphones(U), along with the beliefs

W Λ M → U
H Λ M → ¬U

Here is it assumed that H and W will only appear in different situations. But if we put our agent in the situation Working from Home (WH) where

WH → W and
WH → H

then

WH, M ├ U
WH, M ├ ¬U

If the logic is monotonic, then the simultaneous derivation of U and ¬Uwould be equivalent to our agent running headlong into a brick wall. But with nonmonotonic logic, at such a point, beliefs can be retracted and the agent can be saved from the apparent chaos that will occur with the presence of contradictory predicates.

By proper management of the KB, such meshing of different contexts can perhaps be avoided, but I believe practically it would be inefficient, and to use nonmonotonic logic and simply retract the conclusions at necessary occasions is a better solution. With regard to the above example, if WH only occurs very rarely, then retracting beliefs when U and ¬Uoccur is a more efficient solution than trying to prevent them from occurring by adding more complexity in the KB to handle WH.

May be that’s why our brains let us be hypocrites: it’s just more efficient that way.