Musings of a Software Designer

Thursday, May 10, 2007

"All that we see or seem is but a dream within a dream."
- Edgar Allan Poe


My latest entry concerns a principle which I find is vaguely known by many one way or another but not really understood or appreciated fully. What I intend to describe in this entry is a consequence of the most important physical theory of the 20th century, that being Heisenberg's Uncertain Principle. It is not an understatement to state that this principle really opens your eyes as to the nature of our existence and its implication on how it is we experience the universe we live in. What we observe with our 5 senses really is nothing more than an illusion, a gross over-simplification designed by our brains to make sense of the world as much as possible when in reality something far stranger and mysterious is going on behind the scenes.

I am motivated to write this after having a discussion on this issue where I felt some of the fundamental ideas behind the uncertainty principle were not well understood. It's not unusual that I find people confuse the uncertainty principle for being some philosophy or idea that says that when we observe something, we change the outcome of what we observe in an unpredictable way. This actually is radically different from what the principle states itself, although I can understand why people would make this mistake.

Unfortunately to really understand why this is can't just be laid out all in laymens terms and it does require having some understanding of the physics behind it. I am virtually baffled as to how to begin approaching this topic, and so perhaps some motivation and would help, let's imagine we're physicists embarking on a new field of study. We'll start with the simple question, is light made up of tiny particles, or is it instead a wave like sound?

Think about what it means to be a particle, usually a particle is some ball of mass that occupies a region of space. A wave, on the other hand is something that sort of vibrates up and down as it travels along a path. When two particles collide they bounce off of one another, whereas when waves collide they just temporarily merge and then travel through one another without a problem. Simple stuff right...

So, in general, how can we determine if light is a wave or a particle? Well how can we determine if any arbitrary entity is a wave or a particle? Let's come up with an experiment, in fact the name of this experiment is the double-slit experiment.

What we will do is have a machine that emits something repetedly over and over again and we will follow the path that it takes as it passes through a barrier with two slits in it.

If what we emit is a wave, then when it hits the barrier two new waves are generated whose origins are the slits, and since we have 2 waves they are free to pass through one another and merge together.

When two waves merge one of two things happens, either the waves cancel one another out and it appears as though the wave disappeared (destructive interference), or the two waves boost one another and you get like a super-wave (constructive interference).




(example of a single wave splitting into two)

As such, if we emit a wave we expect that when the single wave splits into two waves, that those two waves will sometimes interfere and disappear, or interfere and become a superwave.

However, if I take a pellet gun and start shooting bullets, there's no chance that a bullet will magically split into two identical bullets and either cancel one another out and remerge to create a super bullet. That makes no sense at all and clearly is an absurd notion... a particle can't just split and be at two places at once only to either re-emerge as a super particle, or to just vanish off the face of the earth.



(example of path of a particle)

So, let's take our experiment and apply it to light, if it's a wave then we will notice the wave of light split into two waves and these two waves will interfere with one another blah blah blah you get the idea... if it's a particle no such weirdness will occur.

Well after conducting this experiment, it turns out we notice that light DOES interfere with one another. Voila, light must thus be a wave and this century old debate is now over...


And now comes the Uncertainty Principle. Without diving too much into the math, it turns out that a physicist by the name of Heisenberg managed to derive, purely mathematically, an equation that relates position and momentum together. The problem is that the equation states that the more you know the position of a particle, the less you can know about its momentum. This equation has nothing to do with the fact that our measuring tools are inprecise, or that when we observe something we change the outcome, it has to do strictly with the definitions of position and of momentum and it is something that is derived entirely mathematically. This is IMPORTANT since many people seem to think that the problem is simply that when you observe something you change the outcome, that couldn't be further from the truth.

Well if this is the case, then something is really wrong here. See it turns out that waves in general have momentum, and if you don't know what momentum is, it doesn't matter, just recognize that light does have such a property. So this uncertainty principle says we can't know both position and momentum accurately, there's some kind of trade-off. Well let's cheat the system. By examining the way that the waves interfere with one another, I can actually determine as accurately as I desire what its momentum will be. To determine what the position of the wave will be, well that can also be done, I will just place a position detector at each slit and wait for the wave to pass through it, when it does I can use the detector to record its precise position. By making better and better position detectors I can also record the position of the wave as accurately as I desire.

So in doing this I will now proceed to cheat the system and measure BOTH the position and momentum of light as it passes through my slit with arbitrary accuracy thus violating this mathematical proof of Heisenberg's.

But alas, something very weird happens when you perform this experiment! Whereas before light behaved as a wave, when you try and measure its position, it now behaves like a particle and so it's not possible to measure its momentum since no interference occurs! What the heck is going on? When light was allowed to pass unobserved, it behaves like a wave, but when you observe it passing, it behaves like a particle.

Okay fine... light is weird, let's ignore it. Let's use our experiment on something we know to be a particle, the good ol electron. An electron is a particle everyone knows that right? It's a particle that orbits a nucleus at the centre of an atom in much the same way that planets orbit the sun. The trusty ol electron surely won't have any crazy behaviour like light does.

But indeed, when you perform this exact same experiment with the electron you will also notice that when you don't observe the electron, it BEHAVES LIKE A WAVE! The electron somehow manages to be in two places at once at the same time! But when you try and observe the path the electron takes, then it behaves like a particle.

That's the weirdness of the uncertainty principle, it's not that if you observe an electron you change its position or you change its momentum, it's that until you actually observe the electron, it doesn't have any actual position or any actual momentum. An objects position or momentum does not exist, period, until something observes it.

Position is just some concept that our brain uses to make sense of the universe, this notion that you're position is way off over there and that my position is over here, and the sun is out some billions of kilometers away are but illusions, they exist only in so far as something is there to observe its existence. But when left alone an object is free to occupy many positions all at once and it will do so and it will interfere with itself sometimes disappearing and producing really weird side effects. In our example I simplified it and told you the electron splits into two, this is technically false, the electron technically is in an infinite number of positions all at once and it isn't until you observe it that you force it to be in one of those infinity of positions. This is why an electron left unobserved produces this wave like behaviour, it is in so many positions at once travelling that it interferes with itself, it bounces off of its own self sometimes disappearing, sometimes reappearing.

But position and momentum aren't the only two physical quantities that are a product of our own observations... quantum mechanics actually has several such pairs, and perhaps the one that might strike you as being the weirdest is that both time and energy are also subject to this same weirdness.

The universe, in reality, is typically denoted by U. The universe we observe, is typically denoted by R. Since R is a simplification of U, there are many possible ways that U can be converted into R so that we human beings can observe it. Because of these many possibilities, physicists have to resort to using probabilistic models of physics to describe the observable universe. They use something known as Schrodinger's equation to describe the behaviour of an object as it exists in the universe U, but there is a special procedure known as the wave-function collapse which describes how to take the universe U and convert it into one of the many possibilities for R. This wave-function collapse occurs when someone tries to observe U and thus make a simplification of it.

And there you have it, the uncertainty principle in as close to laymans terms as I could possibly make it, but also staying true to what the uncertainty principle really says. This really is only touching the surface of course, since now that we know that what we observe is different from what really happens, the question is, how do we reconcile this difference? How do we interpret this result? What are the implications?

I will save this for another post.

Thursday, May 11, 2006

After years of programming, my dream has finally come true. I am now a Microsoft employee. My first day of work as a Software Design Engineer has been great. After the new employee orientation I went to meet my team of developers who were having their weekly meeting at a brewery. I introduced myself and we quickly jumped into discussing software architecture and the state of various projects. All this while enjoying a very large meal at MS's expense. One of the odd curiosities about orientation is that in the MS book, it states that not only is it against policy to take pictures of the interior of any MS building for security purposes, but it is also against policy to take a picture of Bill Gate's parking spot!

The first thing that strikes you about the Microsoft campus is how large and beautiful it is. It's 48 buildings surrounded by trees and full of rich gardens and futuristic building architecture. Where ever you are on campus, you can see people working outdoors in the fresh air on their laptops, or discussing projects in small groups, or even playing soccer, volleyball or frisbee on the large playing field. It's a very vibrant work environment where people are constantly keeping themselves active.

The work environment here is also much different than the traditional 9-5 approach. For one, there is no work schedule, you have a set of tasks and a deadline for them that you and the lead architect agree upon, the rest is up to you. The MS campus is intended to be more of a resource than it is a workplace. You can attend seminars/presentations on new products, go to the MS Research Department and attend very interesting lectures there, try out new gadgets and technology, or be involved in many of the other activities scheduled throughout the day. It's exactly how I pictured a major technology based company should be.

Work was fun as well. I got to my own office and saw a new computer, monitor and a bunch of computer accessories all still in its box sitting on my desk. Microsoft has a culture of using its own products before releasing them to the public, so we all work using Windows Vista, Office 2007, Visual Studio 2008, and also use the upcoming version of Internet Explorer. To familiarize myself with the project I'll be working on, I was asked to fish around for bugs and fix them. When a Microsoft product crashes, there is an option to send an error report of the crash to Microsoft. Much to my surprise, these reports actually DO get sent to Microsoft and get entered into a massive database. I searched for bug reports pertaining to my project and began working on fixing them. As of earlier today I can proudly say I have fixed my first bug for Microsoft. And then of course there was another one I had to fix... and then another one.

I am working with the dynamic languages team. Our job is to extend .NET to make it an appealing platform for dynamic programming languages such as Python, Ruby, and Lisp. Microsoft's first dynamic language to run on this will be Python and that is what I am assigned to work on. Once I've familiarized myself with the codebase, ie. fixed enough bugs, my task will be strictly to focus on language optimizations, basically making sure that programs made in Python run as fast as possible. Once this project is done and is released, the languages team has invited me to give a presentation of my programming language, Maylee. I am rather excited about that and about the overall experience Microsoft has to offer. It's taken a real long time to get here, but definitely well worth the work and wait.

Thursday, April 20, 2006

Amongst all computer scientists who take a philosophical approach to the subject, there comes a time when a personal visit the mystical realm known as the Mandelbrot set is in order. The hope here is simply to reveal that mathematics and computer science is far from being about the dry and technical aspects that people often confuse it for, and instead show that the technical aspect is merely a means to an end, the end being a better understanding and appreciation for what it is we can know and understand about the world we live in.

The Mandelbrot set is an example of a structure that can be defined mathematically, but whose complexity and nature is such that it can not be understood using any sort of computational means. It is a prime example of how there exist incredibly strange and mysterious forms in mathematics for which we can never fully comprehend or explain using algorithms, computers, or any other kind of computation, and yet we can define it in such simple and elementary terms.

Now the notion that there exists truths that can be not explained mathematically has been understood since the 1930s, when Kurt Godel published his famous Incompleteness Theorem, and then later on Alan Turing showed how computers are also limited in what they can accomplish.

Both of those proofs were symbolic, involving rigorous equations and theorems and axioms. The Mandelbrot set is beautiful because it's an actual colourful picture. It expresses the notion in an artistic and aesthetically pleasing manner that the universe contains secrets for which we have no means of understanding using math or science.

So what is this... Mandelbrot set exactly? Some have described it as a beetle, others have said it resembles a tropical island, and yes, one individual has described it to me as an oversized ass. Don't be too intimidated by the following mathematical definition, but if you find you are, simply ignore this next section and explore the Mandelbrot set yourself in what follows.

Pick a number, any number... let's call it c. Now consider the following sequence of equations:

c
c^2 + c
(c^2 + c)^2 + c
((c^2 + c)^2 + c^2)^2 + c
(((c^2 + c)^2 + c^2)^2 + c)^2 + c

Notice the pattern? You start with the simple equation c, and then you derive the next equation in the sequence by taking the previous one, squaring it, and adding c to it.

So as an example, if we let c = 1, then it's pretty clear that this sequence of equations diverges, that is, if you keep calculating this sequence of equations, it keeps getting bigger and bigger without settling on any single number. If on the other hand, you let c = 0, you notice that this equation converges, infact it, it converges to 0.

The Mandelbrot set is the collection of all values of c such that the sequence of equations converges. So the number 0 is a member of the set, whereas the number 1 is not. It is such a simple definition and yet it has a structure so complex that it escapes any attempt at being understood.

The best that we can do is approximate how it looks like, and in fact we can understand in full how the interior of the structure looks like, the problem comes when we try to explore the very edges of the structure, the corners. The closer you zoom in on any corner, the more and more complex the structure becomes.

But now that you've made it this far, it's best to have a look at what the Mandelbrot set "looks" like:



That's a look at the set as a whole, without zooming in on any of it, a beetle? An island? An... ass? You decide for yourself. As you can see, it's made up of some bulbs, and then some "antennas" which reach away from the bulbs. It's these antennas where a lot of the complexity of the set occurs, and infact if you zoom in on one of these antennas you get the following:



That strange looking beetle reappears and this time with an even greater complexity! The set is made up of little copies of itself, and zooming in on it even more one gets:



This is some sort of incredible spiral, and strangely enough the spiral is actually made up of infinitely many copies of the so called "beetle." Where does this spiral lead to? What is at the centre of this spiral?

Unfortunately, this is just one mystery that will forever remain a secret. The closer you zoom in on the spiral, the more complicated the pattern gets, and you realize that you're no where closer to the centre of the spiral than you were just a couple of zooms ago.

The Mandelbrot set simply refuses to allow itself to be fully comprehended. It is an example of what exists outside the boundary of human comprehension and how this outside world is vastly rich and infinitely beautiful.

I have included as part of this entry a program I quickly wrote up that allows you to explore this set for yourself. Left click zooms in, right click zooms out. There are many such programs that exist on the internet for exploring this beautiful structure, enjoy!

Download it here.

Sunday, April 09, 2006

I am a great admirer of Douglas Hofstadter, author of “Godel, Escher, Bach” and indeed that book, along with “The Mind’s I” are among two of my favorites. These are both books which have been some of the most influential and most inspiring in my overall understanding of nature itself, and yet I was never able to agree with Hofstadter’s premise on the nature of consciousness.

You see, Hofstadter is a functionalist; in simple terms, that means that he believes that the nature of consciousness is strictly the act of carrying out an algorithm regardless of the physical makeup of the action. That’s a fairly technical description and so the following illustration should help to better clarify what it is a functionalist believes.

As you likely know, your brain is made up of trillions of atoms; furthermore, the atoms that make up your brain today are not the exact same atoms that made up your brain even 2 minutes ago, a very small number of them will be replaced or swapped out by other identical atoms. Most people, however, would agree that they are the same “consciousness” now as they were 2 minutes ago, despite the fact that their physical composition has changed. Indeed, over the course of no more than 7 years, ones entire brain will consist of entirely different atoms, despite the fact that one would nevertheless argue that they are the same consciousness. Thus consciousness, it is argued, has nothing to do with physical composition.


The atoms of a human brain and of the nervous system in general are organized into cells called neurons, and these are the most fundamental cells responsible for transmitting information around your body. Neurons transmit information such as pain, vision, hearing and all other senses to your brain; furthermore neurons transmit information from one part of your brain to another.

Now assume that a Bob was selected for a long term experiment where the first phase of this experiment was to just replace a single neuron in his brain with a very tiny mechanical unit, like a silicon chip. The unit would act in a manner indistinguishable from that of the original the neuron, but the unit was instead created inside of a laboratory by a team of scientists rather than from naturally occurring biological means. The functionalist would argue that in the same way atoms in the brain get replaced by new indistinguishable atoms all the time without any change of consciousness occurring, no change of consciousness would occur at all by replacing a biological neuron with a mechanical neuron. That is, so long as the mechanical neuron can carry out its action in the same manner that the biological neuron can, no change in consciousness occurs.

Alright, so let’s say that after 7 years, all of Bob’s biological neurons had somehow been replaced by mechanical neurons. The argument is that even though Bob is now composed entirely of silicon chips, he will nevertheless be conscious, and that in fact his consciousness is the same Bob today as it was 7 years ago.

The absurdity of functionalism occurs when lifting the restriction, as we have imposed on ourselves, of limiting consciousness to the confines of a human brain. As is pointed out in the famous thought experiment by Ned Block, neurons are incredibly simple cells to understand, there is nothing magical or mysterious about an individual neuron. The description of how any individual neuron behaves and interacts can be described entirely in less than a single page. Since it is believed that the human brain has about 1 billion neurons, and the population of China is roughly equal to 1 billion, let’s assume that instead of replacing all of Bob’s neurons with silicon replicas, we just create a copy of Bob’s neurons one by one, by writing out the description of each individual neuron on a sheet of paper, and giving that sheet of paper to a single Chinese inhabitant. After 7 years, every citizen of China will have a piece of paper describing some very simple rules and instructions that correspond exactly to a single neuron in Bob’s brain.

Is China now conscious? Is China now Bob? What is the difference between replacing all of Bob’s neurons with silicon chips, and replacing all of Bob’s neurons (or in our case duplicating them) with the citizens of China?

Visualizing this reminds me of the Matrix Revolution’s when Neo confronts Deus Ex Machina. The consciousness behind Deus Ex Machina is the all powerful Architect, and to manifest himself physically outside of the Matrix he simply brings together an entire swarm of Sentinel’s to form a face, where each Sentinel acts as a tiny cell of Machina’s being. The concept works elegantly for the movie, but in reality there seems to be something rather dogmatic about the assertion that since all of China is carrying out the actions performed by Bob’s brain, that somehow China is a conscious being.



I do not mean to trivialize functionalism, on the contrary it is certainly difficult to argue that if one replaces biological neurons with something artificial, that the artificial being will not act and behave as the original. The argument against functionalism is that this artificial being would lack the comprehension of its actions, in much the same manner that a chess playing program lacks any sort of understanding of what it’s doing even though it might end up defeating a human Grandmaster chess player. Functionalism can not account for what I believe is the most crucial aspect of consciousness; that is the self-awareness component. Deep Blue, the IBM computer mainframe that defeated International Grandmaster Gary Kasparov at chess, while perhaps very similar in behavior and in action to Gary Kasparov at chess, lacks the self-awareness of its own actions.

Self-awareness is, in fact, what put an end to the ideal that the foundation of mathematics could be put on a solid footing. As Kurt Godel showed, whenever a system even so much as hints at the possibility of a self-referential theorem, that system is subject to either inconsistencies, a property most dreaded by mathematicians, or incompleteness, a property which denies any sense of complete satisfaction to mathematicians. And yet we, as conscious beings, allow for and even ourselves make self-referential statements constantly without breaking down. The fact that we can accommodate this should suggest that our consciousness is performing something that can not be replicated functionally. It is thus the breakdown that occurs when self-reference is introduced into a mathematical or computational system that I feel makes both of these fields unsuited to understanding consciousness. We may, and in fact I firmly believe will, manage to construct artificial beings that can very accurately mimic the actions of actual biological entities, yet I maintain that actually getting these entities to become conscious and actually aware of their own existence to be a feat wholly impossible using mathematical or computational methods.

Thursday, April 06, 2006

Software design is a pretty strange thing when you think of it. You know what it is you want the computer to do, you can describe it to yourself and to your friends, but it becomes such a difficult and sometimes frustrating task to properly tell that same thing to a computer. Granted some of the difficulty is a result of the vagueries of normal conversation, but that's mostly a minor problem.

The biggest problem with software design today is the lack of an appropriate means of communication between a human being and a computer. The most popular languages available to us today are C++, Java, and Python. These languages are all just minor variations of one another, and as such they all suffer from the same fundamental flaw, they lack a level of expressiveness and flexibility that humans beings desire when they talk to one another.

Think of writing an essay... does it ever occur to you while writing one how restrictive the English language is? Do you ever write an essay, stop, and think to yourself, "Oh darn, I can't quite explain this concept elegantly in English. If only I could write it in Russian, or Japanese, or Arabic I would be able to clearly say what it is I want."

Assuming you were an incredibly fluent speaker of every human language, it's highly unlikely you would find that some things are easier to express in one language while being incredibly difficult in another. Yet, software designers face this problem all the time, trying to find just the right language they need to get the computer to do the task they want it to.

The root of problem is largely historical. During the 50s, the sole task of a computer was to take a mathematical formula, and calculate a precise and correct answer to it. Essentially a computer was just a really big calculator that engineers could use to find solutions to their highly complicated equations. This was a very complicated and infinitely frustrating task as the only way to communicate to a computer back then was by punching holes into a card, with the pattern of holes determining what equation to calculate. To simplify this task, the very first high-level programming language was developed, FORTRAN (Formula Translator). Boy did it make life easier... for the first time in computing history, someone could input to the computer an equation like:

x^2 + 5x + 6 = 0

And the computer would almost instantaneously solve it. Life was good for the engineers, they had a great tool at their disposal to do all the mechanical work for them while they focused on the design.

Surely, while one can appreciate the power FORTRAN has for solving equations, one can only imagine how difficult it would be to express the game of Chess, Gemstone IV, or even The World of Warcraft as a series of equations. And so for the next 50 years, all software designers have done with respect to the design of computer languages was to add new constructs, new features to the language. Basically taking FORTAN, a special purpose language, and adding a new feature to it that makes it easier to do some other specific task, and adding a new feature later on, and so on so forth...

This, in my opinion, has proven to be a flawed approach in the pursuit of a general purpose computer language. C++, Java, and Python are not general purpose languages, they are just examples of languages that have many purposes that are of practical importance today. This has held back the potential that computers can have since before the use of a computer can expand to new, uncharted territory, these languages have to be updated with new features to accomodate the new problems that are faced. Of course it would be a miracle if human beings could come up with a genuinely general purpose language that would allow humans to easily communicate with a computer after only 50 years, but we will be far from such an ideal language if we continue down the same path we've been on.

The best path we have towards the ideal language is one that was also discovered 50 years ago, but unfortunately was almost all but abandoned shortly after. That path begins with a language called Lisp, and its other dialect, Scheme. Perhaps I will go into detail as to why these two languages lay the true foundation for an ideal language, but that will have to wait for another day.

Tuesday, March 21, 2006

If there's one thing that I admire most about the major scientific and mathematical discoveries of the 20th century, it's how humble they are. Compare the last century to say... the Scientific Revolution. Mathematicians and scientists had opened up an entire treasure chest of physical and mathematic laws, and they were certainly convinced that these laws were absolute in their truth. According to the likes of Isaac Newton, Karl Gauss and the other great minds of the classical era, the universe could be entirely described by adhering to a few simple laws and rules. Their acheivements can not be understated and the relevance of their work is just as influential today as it was 100s of years ago. What is remarkable about the 20th century is just how quickly the methods of the times past were abandoned to make way for a new era of uncertainty.

Take mathematics for instance. There was little doubt in the minds of mathematicians in the 19th century that all there was to know about mathematics would be unified under one single infallible system. Of course many to this day still do regard mathematics as being a rigid, indisputible field. The drive to capture math as a whole and then dissect it had reached its peak with mathematicians such as Russell and Whitehead publishing the beast that is Principia Mathematica. It was only shortly after that their dream has crumbled and Kurt Godel, one of the greatest logicians to ever live, illustrated the impossibility of fully comprehending mathematics or logic itself by any finite means.

It was a century that saw Albert Einstein, a man who changed how it is we think of space and time and a man so determined to unify the laws that governed nature, watch as his ideal of a grand unified theory fall before the mysterious and peculiar quantum mechanics.

And finally, it was a century where people convinced that computers could at least in theory be able to mechanically solve any problem, come to terms with the fact that computers are also restricted in their capabilities.

Whereas the classical era was about what human beings could know and come to understand about the universe... the modern era focused on what science and mathematics are unable to teach us about the universe. That math is subject to just as much uncertainty, fuzziness, and imprecision as art. That science is full of incredibly strange and even contradictory natural phenomenon. That computation can never compare itself to the ingenuity held by our imaginations.

Where does that leave us today? Perhaps the greatest marvel to come out of the last 100 years, and also the one least known, is Information Theory. What is so special about Information Theory is how in such a subtle way, it combines all the ideas of computation, science, and mathematics. It is my firm belief that the greatest advancements that await us in this century will be a direct result of the application of Information Theory.

Information theory, spawned by Claude Shannon in 1948, was at the time nothing more than an attempt to transmit signals efficiently over a physical medium, such as a telephone cable. But what makes it so great is that for the first time in human history, someone was able to take such an abstract and formless concept, and quantify it. Information theory is a way to measure, in precise terms, just how much information content there exists in a pattern of symbols.

It's remarkable... for example, one can take a newspaper, a novel, or heck, even take this very blog, and actually quantify into a single number just how much information it contains. Furthermore, by measuring how much information is contained in a pattern, and then measuring how many symbols are being used in a pattern, one can determine how much redundancy there is in the pattern.

The implications of this have been well understood for practical purposes. For example, anytime you listen to an MP3 or watch a movie on your computer, information theory was right at the core of making sure that the sound file or video file contained only as many symbols (binary digits) as is needed to communicate the content of the sounds or images. It's only recently, however, that information theory has begun to play a major role in mathematics, and theoretical science.

Now that scientists and mathematicians have matured to acknowledging that there are limits to what we can know, information theory has played an influential role in quantifying whether the solution to a problem is knowable or not. If one seeks to determine if the solution to a problem can be solved more efficiently, one can simply ask "Is the amount of information contained in this problem less than the amount of information contained in this solution to the problem."

Since information is at the core of every single problem or idea, any single problem or idea can be rephrased so as to analyze its information content. It's because of this, that information theory will prove to be very powerful tool this century. Now that we have a better grasp of what's knowable and what is not, what is needed is a way to understand the very root of knowledge itself and to study it in its most purest of forms: raw information.

Monday, March 20, 2006

Let's face it, no one studies philosophy thinking they're going to get rich off of it. The one thing I can admire most about those studying philosophy is that they do so out of genuine interest and passion for the subject, for the breadth of ideas that philosophy exposes to them. It may simply be my own personal experience at the University of Toronto, but students who study computer science are the exact opposite.

Computers were, especially during the 80s and 90s, a great way to get rich. They were also very intimidating at that time too though, so only those who were really brave and certain they wanted to involve themselves completely in the subject would dare to study them. The problem I find that exists today, is that now almost any student who gets accepted into a University to study computer science feels a sense of entitlement to the degree which they hope to get issued after 4 years. Worst of all, they then think they're entitled to get rich because of it. This has seriously had a negative impact on the quality of education. Rather than students getting exposed to an entire world of ideas, expressiveness and inspiration that computer science ought to have been about, students seem to only care about learning strictly what is required to pass their assignments or tests or inch closer to the day when someone hands them the piece of paper with the University's stamp on it.

Computer science, underneath all of the technical jargon and funny looking symbols, is an art. It's a way of taking ideas you have that exist in this fuzzy realm known as your brain, and giving them some physical meaning. Just as a painter takes an image in their head or an emotion in their heart and can export it onto a canvass, so too does a computer scientist. Now being an artist isn't exactly known to turn someone into a millionaire... but lets suppose that it did. Now imagine how absurd it would be if all of a sudden a huge influx of students decided to take up learning how to paint, not because they're really passionate deep down about painting and love it, but simply because painting is where all the money's at.

Just imagine how severely art education would suffer as a result of that. With the culture of entitlement that students have, commonly complaining or nitpicking over marks and numbers and fairness, eventually professors would have to give in and lower their standard of what they grade as being good art.

That is the problem with computer science today. It has gone from being such a great subject matter in its own right, to being a means for which people feel they can make money. Those who are truly passionate about computer science are getting drowned out by those who aren't and as far as virtually all my undergraduate studies at the University of Toronto goes... this drowning out has led to some very serious degradation in the standard and quality of computer science education.

Not that I just came to this realization... but I have a tendency to talk to myself a heck of a lot. And I don't mean the casual "What am I going to eat tonight?" kind of self chatter... I mean I sometimes get into full blown debates with myself; political debates, ethical debates, philosophical debates, you name it.

The problem really is that I like to debate very controversial issues... I like controversy, I like finding issues that most people would rather keep hush hush about and just go ahead and dig right into it. Unfortunately, by it's very nature, that means there will be very few people around to debate these issues with... which is quite likely why I have to debate them with myself.

This blog... let's say its a way for people to get in on the debates I have with myself. As the title suggests, I am very passionate about creating software, learning computer science, and so you'll read a lot of my struggles in tackling what I consider one of the most facinating subject matter.

And if I make a comment or state an opinion so outrageous that you feel you have to jump in there and correct me... it would only make me so happy for you to do so. Believe me... I definitely do not enjoy debating with myself, it's just that I find I sometimes have no choice.