# Computers are Dumb

Objective: Overcome your fear of computers! If you can count to two, then you can master the basics of computers. If you think computers are smarter than you, you are wrong and I will prove it. For normal people, just follow the LOG: comments. Computers are dumb:  comments tell you the computer’s point of view.

For the GEEKS, hackers, programmers, experimenters, and Arduinoites add the GEEK comments for a more detailed understanding of how computers work.
And don’t worry if you don’t understand some things. I’ve been working with computers for too long and sometimes ‘think’ like one.

LOG(Lazy Old Geek): Remember when you were maybe 3-4 years old and you learned to count up to 10? Well, I don’t. I am a Lazy Old Geek (LOG) and can’t remember back that far. But I could count to ten with my fingers. For a while, I was an instructor in computer technology.

Computers are dumb: Computers can only count to 1. Fortunately they start with 0. So they only know 0s and 1s.

GEEK Speak: The typical human (Non-Geek) numeral system is called decimal, 0-9. The computer numeral system, 0 and 1 is called binary.

LOG Irrelevant: Do you ever think about 0, zero? It is very important. Do you remember Roman numerals? They didn’t have zeros. Maybe that’s why they aren’t used anymore. Oops, I guess they still use it to number SuperBowls. Football fanatics, enough said.
The invention of zero was important. How else would you be able to numericalize your test score in Algebra or maybe sometimes your bank account.

## Step 1: Binary numbers in computers

Computers are dumb: So I exaggerated a bit. Digital computers don’t know 0s and 1s, all they really know is off and on. Electrically, they really only understand no voltage or voltage. I like to visualize this as a light switch. (See picture) Little kids can understand a light switch. Either it’s off or on. So, simplistically, if there is a voltage there then it represents 1, if there is no voltage, then it is a 0.
LOG: This is like if I have a banana (See picture), I represent it on paper as the word ‘banana’. It is symbolic.

GEEK Speak: For a long time, in computers 0 volts symbolized 0 and 5 volts symbolized 1. While this is still true in some cases, sometimes 3.3V represents 1. And I am fairly certain that internally, some CPUs use even less like 1.8V?
Why: One reason is when you have voltage you have current, voltage and current means energy and energy means heat. So the more voltage you use the more heat is generated. Reducing the voltage means less heat.
Electrical Geek Speak: If you want to get technical, 0 and 1 are actually represented by ranges of voltages. Like 0 was 0V to maybe 1.25V and 1 was 3.75V to 5V. I used to remember what the ranges are exactly but don’t any more and don’t really care, any more.

Arduino: So Arduinos are computers. Since I am an Arduino user, I will often comment on Arduinos. They still use 0V and 5V representing 0 and 1.

## Step 2: Languages

LOG: Humans that speak English use an alphabet of 26 letters. I won’t even get into Japanese which may have more than 10,000 letters (sort of). Humans combine these letters into words to create a language so there are millions of words. But humans can also learn several languages so just think of all the words a person could know.

Computers are dumb: Computers only know one language. It is called machine language. Machine language consists only of 0s and 1s.
Furthermore, a computer only knows one machine language. There are probably hundreds of machine languages but any computer knows only one, the one for the specific CPU (Central Processing Unit) that it uses.

GEEK Speak: Some of you technoGeeks will say: what about those other computer languages like Assembly, C and C++? (See picture) Doesn’t the computer understand them? The answer is no! The actual computer hardware understands only one machine language.
Those other languages were ‘invented’ by humans to make it easier to talk to computers. Humans made interpreters and compilers to translate C and others to that one machine language. Compilers and interpreters translate the English-like program to 0s and 1s for the machine language selected.

Arduino: Arduino users, when you click on the little arrow, this compiles the sketch to the machine language that Arduinos understand. (see picture). The other right arrow, compiles it and sends the machine code to the Arduino.

## Step 3: Binary numbers

LOG: How can computers do anything with just 0s and 1s?
Well, I will tell you but I’m going to have to do a little arithmetic review first.
Okay, let’s say you count up to ten. (See picture). There’s nothing significant with ten until you write it down. From 0 through 9 you have a different number but ten is not a different number. It is made up of two previous numbers 1 and 0. Now the 1 on the left doesn’t mean the same if it was by itself. Can you explain? Well, I’m a computer Geek. I can. It’s called positional notation. The 0 on the right is just a 0. The 1 on the left is 1 multiplied by 10 or 10 because it is in the second position. So as we all know if there was another digit, then it would be multiplied by 100. Positional notation means where a number is locate affects its value. Each position further left increases it value, in this case, by ten times.

Computers are dumb: They have no idea what 22 is. They don’t even understand that 10110 in binary represents 22.
Geek: Positional notation for binary numbers: For the curious, the right most digit value is 0 or 1. If next digit is 1 then multiplied by 2, the next by 2×2 or 4, then next is 2x2x2 or 8, etc. If there is a zero in a position then nothing is contributed to the total, all it is doing is marking the space so the next digit over has a greater value.

Some of you may have heard of something called a byte. A byte is eight 0s and 1s. A byte can contain 256 different values. A computer word has 16 bits so it can contain 65,536 different values.
Geek: Hexadecimal was invented by computer programmers to make it easier to talk to computers. Computers only understand binary but a big binary number is hard to read by normal human, But it is easy to convert to hexadecimal, which is a little easier to read than binary. E.g., A2C7 is a little easier to read then 1010001011000111 for most humans but both are numbers representing the same value which is 41,671 decimal.

## Step 4: Computer RAM

LOG: So you may wonder what is RAM? RAM stands for random access memory. It can be some much more picturesque than it used to be. (See picture)

I like to think of memory as a post office full of mailboxes. (See picture) Hopefully, you know what a mailbox is. Each mailbox has a unique address and contains information (letters). A memory module is like a post office. It is a collection of binary numbers each of which has a unique address. To get the information you have to know the address, just like to get your letters, you have to know the box number.

Geek: Writing to memory is like the postman placing letters into the mailbox. Reading from memory is like you taking a letter out of the mailbox and reading it. One difference is that when a computer is turned off, the RAM information is lost.
Random access means the computer can select any address (randomly) and write to it or read from it.

Computers are dumb: Mailboxes can hold multiple letters with all different kinds of information. (Some of you Old readers, like me, may remember getting letters). Computer memory holds only binary numbers 0s and 1s (or no voltage and voltage) and only of a certain size. I had to look it up, modules like the one in the picture has 64 bits in each location. It doesn’t contain alphabet letters or pictures or sounds only 0s and 1s.

Geek: The pictured memory modules have 8Gbytes of data, which is 8 billion bytes which is 8 x 1,000,000,000. So if I understand this correctly since each location holds 64 bits or 8 bytes, then there are 125,000,000 memory locations.
Anyway, it’s a lot of locations but it’s still only 0s and 1s.

Geek: Okay, if you want to get technical. 8Gbytes of RAM usually refers to 8 x 1073741824 or 8 x 230. This is because hardware addresses are either off or on, binary so 30 address lines can access exactly 230 locations.

Geek: There is another type of memory called ROM. These are not very pretty. (See picture) But they have an important purpose. ROM means Read Only Memory. The difference is that the postman cannot change the contents of the mailbox, it can only be read. To a computer, it can only read the 0s and 1s in the ROM. They cannot be changed.

Arduino: The RAM and the ROM are actually in the Atmega chip, in many this is the Atmega328.

For more detail: Computers are Dumb