I have a good friend called Sam Rose. You may have heard of him. Amongst other things he is a rising star in the fields of computer science and programming. For one who is relatively young he is hugely accomplished and he’s also extremely good at what he does. I can’t really praise him enough so if you want more information on what he is up to, you can check his site out at : Lbak
We decided to have a discussion drawing on his understanding of computer science, and my unhealthy tendency to turn every discussion into a discussion om the nature of conciousness and perception. The debate has been recorded for your interest, and is written as an interview, below.
He also invited Jake Wellings, a chiropractic student and Luke Gardner, a fellow computer science student.

This is Sam. He will be part of this discussion.
Discussion #1 – Life/codes: Computer Language Vs. Human Language
Here we’ve got the first of a series of interviews/discussions I’ve done with him. My questions are in bold.
This article is a discussion into the nature of language and information processing in both the mind and the computer
We are planning to do more of these discussions as time goes by.
J: How does the logic structure of computer language (such as PHP) differ from the structure of dialectic language, (such as English or French)?
S: One of the first things that comes to mind is that the logical structure of a computer program is very strict and direct. You are writing the program for a purpose and the usual aim is to achieve that purpose in the fewest steps or the least time possible. If you compare this to spoken language where we have “small talk” and conversations often go on tangents it’s pretty obvious that computer languages and spoken languages have very few similarities.
I think that computer languages are more akin to stage directions in a script for a play: “Person 1 moves to stage left, spotlight on stage right”. Very clear, very hard to misinterpret.
It’s difficult to compare computer language to spoken language because they’re both trying to accomplish different things. Spoken language is trying to convey thoughts, feelings and ideas more often than get to the conclusion of a calculation or an algorithm.
Another comparison to be made about the differences between the two types of language is that a computer program will already know every step of code before execution starts, that’s the point. The program is usually entirely finished before you execute it (unless you’re a developer testing your program). Conversation is different, you rarely wake up in the morning and plan out all of the conversations you’re going to have, you just do it on the fly.

Mathematical language: hard to take a conversational tone..
What exactly is logic in the sense of programming? How would you say that a computer language is more logical the dialectic language (if it is at all)?
A computer language has to be built entirely on a set of logical steps to accomplish a task. If there are any illogical or arbitrary steps, the program isn’t doing what it is meant to do as efficiently as it could be. Logic in the sense of programs would probably be decisions made in the code (if, else statements) and using these decisions to eventually reach an answer or accomplish a task. You could also argue that your choice of language in programming is logical. Some languages are suited to doing things better than others.
There is a theory by Alan Turing called “Turing Completeness”. It describes what a machine needs to be capable of before it is labeled as “Turing Complete”. All that Turing Complete means is that a machine can simulate a universal Turing machine and subsequently calculate any computational problem that is thrown at it. On a theoretical level, no computer is currently capable of this and they never really will be. They would need an unlimited amount of memory, for example. However, the unlimited memory caveat is often ignored and every modern day computer is said to be Turing Complete minus the unlimited memory.
Computer languages can be labeled either Turing complete or Turing incomplete. If they are Turing complete it means that any computational problem could be solved in them (no promises on how easy, hard, slow or fast it is going to be) and Turing incomplete languages usually only deal with representing data structures, examples being XML, SQL, HTML and so on.
I believe that the point of modern spoken and written languages is to convey and communicate ideas. I don’t think that these languages are standardised or compared against any benchmarks and it’s hard to gauge which languages are “better” at doing certain things. For example, with computing if you want pretty low level access to hardware you’ll probably be writing in C, C++ or Assembly. If you want really good string manipulation I imagine you would use Python. If you want to get data from a database you use SQL (MySQL, MSSQL or whatever). With written and spoken languages, a lot of people will only speak one language and that will be the language they are brought up around (although some light Googling tells me that a majority of the world’s population is bi/multilingual).
My point is that people don’t choose their spoken language on how well it does in certain social situations, their language is chosen for them because that’s the language that the people around them are speaking. Later on in life they could learn new languages so that they can communicate with people in other countries but I think the popularity of English is growing and the need to be bi/multilingual is dying.
To conclude, there doesn’t seem to be much logic in spoken language choice other than the fact that everyone else around you is speaking it whereas you choose to use a certain computer language because it is more suited to the problem you want to solve.
Does grasping the syntax of computer language allow one to better pick up other computer languages, how about spoken languages?
I will be honest and say that I was always terrible with spoken languages. I never seemed to be able to get the grasp of them and I have no idea why. Fortunately, I never had to be able to speak another language.
With computer languages, when you get a strong grasp of your first language it makes learning new languages really really easy. The way that computer languages have progressed is by basing the new ones off the old ones but correct the mistakes of the old language in your new language.

Like conventional language, computer languages have evolved and changed with use.
There are a few really popular “styles” or “syntaxes” with computer languages. There’s the C syntax, followed by C, C++, PHP, Java, JavaScript, C#, and probably a lot more. The C syntax opens and closes code blocks with curly braces {}, ends lines with semi-colons ; and comments are written with // or /* */.
There’s the Visual Basic or Python style syntax. Code blocks are denoted by their indentation level, code blocks get started with a colon : , lines are ended by creating a new line. There are other styles of programming apart from these two, for example LISP: LISP encases everything with parenthesis (), basic calculations are done with the operator first like so: (+ 1 2 3 4) would evaluate to 10 as opposed to C syntax (and most other syntaxes) which do calculations as you would expect: 1 + 2 + 3 + 4 = 10.
The thing that transcends how you write a computer language is how you think about it. There are a variety of programming paradigms that are very well known and languages tend to be written to follow a certain paradigm, sometimes a number of paradigms.
LISP follows a functional paradigm which means you rely almost exclusively on the return values of functions and your functions don’t have side effects. C and Assembly languages follow a procedural or “imperative” paradigm which means all of the instructions get executed one after another until an answer is found. C++, Java, PHP, Python and pretty much every new language follows the “object oriented” paradigm (along with other paradigms at the same time) which is the idea that you create large data structures called objects and do manipulations on an object basis.

LISP - so good that it was made by aliens...
An easy way to explain the object oriented vs procedural paradigm is like this: The procedural paradigm uses the verb first, e.g. do this to that. Object orientation is the other way around, the data you are working with comes first, e.g. to this, do that. In code it looks something like this: “calculateSqrt(someData)” for procedural and “data.calculateSqrt()” for object oriented.
So once you know the paradigms behind languages, the list of which is quite long for both paradigms and languages, it becomes a lot easier to learn new paradigms and languages.
Luke is currently learning Japanese and he says that learning a new language is all about the immersion. He disagrees with the claim from adults “I’m too old to learn a new language, I’m past the spongy learning age of a child”, he believes that what it takes is the drive to do it, an incentive maybe. Currently he has everything in his life that he can in Japanese: operating system, games, books, computer programs. It’s back to his point about immersion.
When you’re born, you’re surrounded by your primary language and you eventually get used to it. Parents will worry that their children aren’t talking but you don’t get many adults that can’t talk for no reason, so learning a language just takes time and that time will be less the more you are around it.
As for learning new spoken languages, there are similarities between some languages. The alphabet we use, for example, is the Roman alphabet. English, French, German, these use the Roman alphabet and by knowing English you can at least have a go at saying French and German words. Then you have languages that follow entirely different ideas such as Japanese. Trying to learn the English pronunciation of Japanese words will get you nowhere. So it seems similar to how different languages will relate to each other but there are a lot more languages and styles.
How does the syntax of computer language differ from pure mathematical language (for example, Euclidean geometry, but not QED)?
It’s arguable that maths is the universal language. In every country in the world, most people will have a basic understanding of maths and the notation is the same everywhere.
There is also a need to understand at least the basics of maths. There’s not much you can do without an understanding of, for example, numbers. They aren’t difficult to understand and it’s easy to display how numbers apply in real life. When you go shopping you need to be able to compare prices, get the right amount of an item that you need and so on.
The concept of algebra is also really simple. You can apply it to real life situations by using ideas instead of numbers e.g. It’s raining, I don’t want to get wet, what’s the missing variable here? An umbrella. That’s essentially what algebra is at the most basic level, you’re looking for the missing variables and there are methods of finding them, that’s perhaps where it gets a little more difficult for people. I know that a lot of people find it difficult to rearrange equations that use a lot of different mathematical concepts such as indices, logarithms, fractions, pi and so on.
This doesn’t really compare much to computer languages. No one really has a need to learn a computer language as much as they do mathematics and computer languages aren’t universal by any stretch of the imagination. I guess that in conclusion we can say that maths is “better” than computer languages in the way that it is far more widely used, understood and universal.
How does information processing in a computer differ from how information is processed in the brain? Linear vs. lateral perhaps? Neural networks vs. the Turning machine?
This is a topic I have considered in the past. I don’t know enough about the brain to be able to give a conclusive answer but I can certainly theorise.

The Brain – the original hard drive
Take a hard drive for example. Most modern file systems keep an index of all of your files to increase search speeds. They have journals so they can make sure every transaction happened as it should have done. They are quite fragile and they wear considerably over time (I am talking about spindle hard drives, not solid state). Compare all of these qualities to the human brain.
Our brain can take some time to find things. We don’t remember everything we’ve ever done all at the same time, it takes some thinking to recall a memory which can be made to take less time if someone mentions a keyword that relates to the memory. This is similar to hard drive indexing, hard drives would take a very long time (relatively speaking) to find a file if they didn’t have indexes to speed up the processes. They also don’t remember everything at the same time, they load what they need on short notice into the RAM, which is usually significantly smaller than the hard drive and can perhaps be thought of as “short term memory”.
Hard drive journals are a list of everything they had planned to do and an indicator as to whether or not they completed them. This is useful in case the computer crashes, the hard drive can check on next start-up as to which parts of the journal actually got executed, which didn’t and which got interrupted so it can complete or rollback what it was doing appropriately. Humans have a conscience. We often review what we have done against our morals and other such criteria to determine if it was a good idea and if it wasn’t, we will try and make amends (I admit that this comparison is a little flaky but similar nonetheless).
Hard drives being fragile and wearing over the time is an easy comparison to make. The likelihood of dementia in the human brain significantly increases the older you get and things such as amnesia, which can happen in so many different ways, are akin to a hard drive failing (as insensitive as I made that sound, it still stands).
However, there are differences of course. The human memory works very differently to computer memory. When a computer is told to remember something, that’s what it will do. This is not the case in the brain, it takes a fair amount of learning to commit something to your long term memory. Luke had an example from when he learnt about long term memory in high school: “Imagine long term memory as a field of tall grass. When you walk through the first time, you might not be able to see your tracks. The more you walk through, though, the more clear and defined your path becomes”.
Linking memories and thoughts to other ones are another feature of the human brain that computers aren’t that capable of. The Google search engine is a nice example of a system that does try and remember what you’ve done and adjust to your personality. When you make searches for car rental, for example, Google will try and localise the search to present you with car rental stores that are close to you and subsequently more relevant. Google will also try and look at the links you have clicked in the past and find similar links and put them higher up in your search results. The brain does this really really well, better than any current computer. We are able to make connections between thoughts that are similar.
Since the brain and the computer are (at risk of gross simplification here) both electrical systems, could mental activity be mapped at a base level as binary in the on off function of an electric waveform?
It kind of already has. With brain scans you can see what parts of the brain are active at any time. We understand a lot of parts of the brain, sleep for example. We can tell when someone is asleep just by looking at a real time scan of their brain.
Mapping it is different from simulating it, though. We’re still a long way off fully understanding the brain to the point we can simulate one, which relates very nicely to the next question:
Do you think that self awareness could be coded into a computer? would it require a large body of text, or could you create efficient code that was self aware?
If we did manage to create artificial intelligence, I think it would be monolithic. I don’t think it’s our understanding of computers that is holding us back here, it’s our lack of understanding of the brain. I personally don’t think you would be able to code self awareness but if it were going to be possible, I think it would require a very complete understanding of how the brain works which is something we don’t have.

The main villain in the Terminator franchise was a neural network that in becoming self aware, rebelled against humanity
I highly doubt that the way the brain learns and stores new things is a simple process. I am more willing to believe that it’s a very complex process and the brain is extremely fast. Thus we would currently be limited by computer processing power even if we did figure out how the brain works and tried to simulate it.
… Self aware code? is it possible to create code that could replicate itself? in a nutshell how would it work?
Viruses. Some viruses can be very simple and others can be very complex. One of the most destructive viruses in the entire world was the Slammer worm and that was only 376bytes. Consider that 1 byte is a single ASCII character, that was almost definitely less than 30 lines of code (the source code for the Slammer virus is available online, you should be able to find it with a Google search).
As for code that can write code, I’m not sure… I don’t think that you could write a programmer program that would write whatever it wanted to. That’s going back to the realm of self awareness.
How self replicating code works is interesting. The most popular way of spreading a virus is by making it email or instant message your contact lists and tricking them to click on a link that will install the virus on their system and then repeat that process on everyone it infects. Social engineering, so to speak. Worms work a little differently, they count on network vulnerabilities to almost silently infect computers without any warning or way of defending against it. I believe these are becoming less and less the more that anti-virus and network software is progressing, though.
Conversely, do you believe that this kind of code could arise on its own? Could there be a ‘ghost in the machine?’
I don’t think so. I think if you left all of the code in the world currently written to run forever you would not get any sentience from it. It’s more likely that it all either ends or crashes due to hardware failure.
I just don’t think that’s how it works. I like to think I have quite an intimate understanding of how computers operate (for someone my age at any rate) and I can’t see any possibilities of code arbitrarily doing something it shouldn’t and turning into artificial intelligence.
In your boat, is ‘artificial’ consciousness artificial? What would the difference between a thinking machine and a human mind be?
The term “thinking machine” seems, to me, a contradiction of terms. Machines can’t really think in the same way that humans do so I think the latter part of the question is null. Humans have the ability to think, feel, theorise, make connections and these are all things that aren’t really fully understood enough to simulate. I think we have a good understanding of emotions and feelings but not quite enough to simulate them in a machine. The idea that a machine could have a sense of feeling is, in my opinion, really strange. How would it work? What would the outcome be? Would it get tired or bored and start refusing to do what you ask it to?
Even if we did manage to create an artificial consciousness, I do believe it would be artificial and totally different to what humans feel and experience. I don’t think we would get taken over by artificial intelligence if it were to arise because I don’t think we would be stupid enough to create such a thing without a backup plan or a backdoor or something. It is true that a lot of programmers leave themselves backdoors into systems or ways to control the outcome of something if they had to. Why would it be different with AI?
The next interview will deal with the nature of DNA as self replicating code and will explore it from a computer science perspective.