Great thread. Several people have hinted at something which should be made explicit. You can code virtually anything you want in binary, or in many other systems, BUT the recipient has to know the coding system already.
Using 26 letters to give complex instructions seems obvious now, but it takes years of immersion for a human to figure it out.
I dunno about that, Muttrox. Seems to me that very young children are capable of absorbing the alphabet’s of many languages ( common knowledge that the younger you expose kids to more than one language, the more easily they will become bilingual or polylingual). So, one 26-letter language is simple. Can they absorb complex words or ideas? I do not know- I DO know that I didn’t ever speak baby talk to my kids. Their early on vocabulary was a shade more advanced than those toddlers whose parents oogie-ooh’d their way through ages 1-5.
I wonder if it is possible to clinically prove that a child understands a three-step instruction, and cannot process one of the steps, or if they are incapable of processing complex steps. For example, if I said to my toddler daughter,
Come in here.
Pick up your juice cup.
Take it into the kitchen.
And she was capable of doing this at age, what- 4? 5? Would that tell me that her computational skills were advanced enough to do multiple tasks, or that she was able to parse out three different one-step tasks?
In view of this conversation, I’d have to say that her little gray computer would have to hear all three steps and think, " If I go in, I can get the juice cup. If I do not go in, I cannot get the juice cup." So, she goes and gets it. Then, she may think, " If I have the juice cup, I can take it into the kitchen. Lacking the juice cup from step 2, there cannot be a step 3 that brings me to the kitchen. Daddy will be happy with me and will give me a kiss."
A computer is a non-emotional entity, H.A.L. 9000 aside. My daughter learned to do multiple step tasks because of positive reinforcement.
Using 1 and 0 for coding, am I to understand that one can create a program that reacts to positive feedback, and learns from such computations? ( I know this is a hijack, but hell, it’s still about computing. )
There are algorithms called genetic algorithms that attempt to find solutions to problems through natural selection. Put simply they try different solutions, choose the best ones and “combine” them in different ways to form the next generation of solutions, and iterates through this process until a satisfactory solution is found. Wikipedia seems to have to good pages on them if you’d like to know more.
I would recommend the book Code, by Charles Petzold, which takes you from morse code/braille/sign language up through processor codes - how binary works, etc.
Muttrox was talking about the process of learning written language, not spoken language.
There’s an interesting twist brought on by your observation though. The spoken English language could be thought of as concisting of a set of “phonetic” letters so to speak–they’re called “phonemes” in Linguistics, and basically they are the individual sounds that are put together to form words–and in English, at least, the spoken language has far more of these “letters” than the 26 letters usually used to write that language. (For example, there is an “sh”-sound phoneme, but no single written letter for that sound. That’s one extra “letter” in the spoken language than the written one. There are something like 46 such phonemes in English, IIRC.)
A further twist: Spoken English (and languages more generally) is almost never spoken in a way which makes the “spaces” between words clear and distinct. When we learn how to hear a language, we learn pragmatic rules for sort of figuring out afterthe fact where the “spaces” should have gone, so to speak.
So it seems like a child learning to speak and understand English is doing something far more complex than he is when he learns to read and write English.
And yet: we all know it is far more difficult to learn to read and write than it is to learn to speak and understand, at least as a child learning new languages.
To understand how ones and zeros can be represented in circuitry, and how those representations can be combined to encode information, create programs, and create machines that will execute those programs, I can do no better than to recommend Larry Gonick’s Cartoon Guide to Computers.
It is one of the clearest explanations of this that I have ever encountered, even though it was written twenty years ago (an eon in the field of computers), and it taught me a few things that my electronics books didn’t. And I speak as someone who has actually built a working computer from wires and chips and things.
Dunno if this will help, but if you’ve any understsanding of DNA, understanding how a computer uses binary is a pretty simple step.
DNA uses just 4 nucleotides to code for entirety that is YOU. If you think coding a computer with just 2 bits is fascinating, knowing you can code A PERSON with 4 will completely blow your mind.
First of all, the 1 and 0 are part of machine language. No one usually codes in machine language, and even if they do, they usually use a hexadecimal instead of binary notation for it.
Computers don’t want anything. The closest you can come using low-level computer programming to a response to positive feedback would be to give the computer a task to do, have it, at some point, compare its result to some ideal result previously provided to it, and, if the two do not match, to keep performing the task.
But the computer has no way of knowing you are happy it succeeded. It does not know it succeeded at anything. It hardly even knows that it completed anything, really. It only knows how to follow one instruction at a time, and that the last instruction of this process is done with and it’s time to find out what the next instruction for the next process is.
Now, using very advanced techniques (certain AI techniques, neural networks, et.al.), a computer can acquire knowledge, in a way, in that it can develop techniques for storing results it has already come across, and developing some heuristics about when to apply those results.
They can make a computer that can beat a chess grandmaster at that game, by evaluating every possible move and choosing the most-likely-to-be-successful one, but until they make a computer that, on its own, decides to upend the chess table in overly dramatic frustration, or wear a distractingly large fuchsia hat to the match to get a psychological edge, or sulk in its hotel room and forfeit the tournament because its girlfriend broke up with it, I’ll disbelieve that there’s actual intelligence going on here.
No, just use a prefix free code. For example, encode A as 000, B as 01, C as 100 and D as 110. There’s no necessity for the strings to be of the same length, either, as the prefix free nature of the strings makes it possible to deduce when a new string starts.
We can now encode ABCD as 00001100110, which is simple to decode, without adding any spaces.
Huffman compression uses this concept.
You’re describing the process of reinforcement learning, a subfield of machine learning which is a subfield of artificial intelligence.
Nobody really programs in ones and zeros, as that gets pretty tedious, pretty quickly. Also, as people in this thread have (sort of) pointed out, the groups of ones and zeros have no fixed meaning in and of themselves. They only have assigned meanings, and the possible meanings will vary from context to context.
So, for example, a stream of bytes that represents a valid program for the Intel Pentium will very probably not, at the same time, also represent a valid program on the PowerPC or Alpha processors. If the stream even executes at all on those other chips, it won’t be doing the same thing it was intended to do on the Pentium.
On the other hand, a stream of ASCII character codes will represent pretty much the same thing on all modern computers — ignoring the infernal end-of-line issue anyway. Also, certain languages like Java and Python define portable file formats that can be used on almost any platform. This allows programs written in these languages to be run on any machine that supports the interpreter, also provided by the language designers.
Instead of writing ones and zeros, what people generally do is write software in a high-level language. The source code is usually a set of ASCII text files that, if you’re skilled in the language, you can read pretty directly. Most of the commands and procedures will be named after English words, or short sequences of English words. Source code in this form is obviously a lot easier to read and modify than naked ones and zeros.
And, you can certainly write programs that “learn” from positive and negative feedback. But that’s generally true of any programming language that allows persistent storage — pretty much all of them. (Still, I wouldn’t want to do that sort of thing in Fortran, let’s say.) Programming doesn’t always have much to do with the low-level ones and zeros that everything is, admittedly, represented in. In some programming languages, the fact that the host computer is ultimately a machine for binary arithmetic is completely hidden from you, or if not hidden, can still be ignored.