BFOIT - Introduction to Computer Programming

# What's Computer Programming Screencast

```

Welcome to BFOIT's Introduction to Computer Programming website.

This is a short screencast overview of the first lesson:
What is Computer Programming?

Computer programming is composing/authoring of a process/procedure
for doing something, BUT IN INCREDIBLE DETAIL.

proc-ess / Noun:
A series of actions or steps taken to achieve an end.

pro-ce-dure / Noun:
A series of actions conducted in a certain order or manner.

In a more advanced world (science fiction today) it will be possible to
teach the computer to do something by describing what it is that you want
in your native language, English in my case.

But, as of now, this is pretty much fantasy.  Why?  This lesson contains
an experiment that you can perform which demonstrates why. Participants
in the experiment write procedures for How to Make a Peanut Butter and
Jelly Sandwich. Then, someone plays the part of a computer and tries
to perform the procedures. When this is done properly it demonstrates
how much information is assumed in normal human communications.
Think about it... computers have absolutely no common sense.

So if we can't program a computer in our native language, how is it done?

Almost all of the computer programming these days is done with high-level
programming languages.  For BFOIT's introductory lessons, we start with
the Logo programming language.

Logo has early ties to MIT and a scientist named Seymour Papert. It has
a "low floor and high ceiling" which means it can be learned easily, but
is quite capable. It is a derivative of the LISP programming language
which itself has been around since the 1950s and is still used today to
explore very complex stuff, as an example research in the area of
artificial intelligence.

Let's look at some examples of programming a computer in Logo.

-------------------------------------------------------------------------

The first program simply introduces itself - it prints out "Hello world!"

A slightly more complex program prints the result of multiplying a
random number in the range of 0 - 14 by 10.

And, if we get Logo to perform this program again you'll see we get
different results.

Finally a program that is complex enough that we have to create it in
the Editor provided.  It's a function named getMax. It outputs the
largest number from a list it is given.

When I invoke this procedure in the CommandCenter, it produces the
proper results.

As you can see, the Logo programming language is sort-of like English
but not quite... It's got square brackets and colons where you don't
expect them.  And, the ordering of the words seems a bit strange...

These differences are important... they make it easier to translate
what we want done into the language of a computer...

-------------------------------------------------------------------------

Below the level of programming languages, one step above a computer's
native language is what is known as assembler language where everything
is given human-friendly names.  A programmer works with operations that
the microprocessor knows how to do but they have names.  The
microprocessor's registers and addresses in the computer's memory can
also be given meaningful names by the programmer.

Remember our Logo getMax example?  Table 1.1 contains a similar program
in assembler; it locates the maximum number in an array (a group of
numbers in sequential memory locations). Take note of the  "Comment"
column; the remarks in it are only for humans, the computer ignores
them.

-------------------------------------------------------------------------

Before I can show you what a computer's native language looks like, lets
look at what it contains - bits.

[A] computer successfully creates the illusion that it contains
photographs, letters, songs, and movies. All it really contains is
bits, lots of them, patterned in ways you can't see.

Think of bits as light circuits like the ones in Figure 1.1. A bit is
either off, which means it is a zero, or it is on which means it's one.
its and a light circuit - ones and zeros.

-------------------------------------------------------------------------

Since a single bit is quite limited computers manipulate groups of bits.

In the next three sections of this lesson I go into detail describing
how bits are used to represent

numbers (Integers),

ASCII characters, and

Pixels.

-------------------------------------------------------------------------

So... a computer's native language must also be bits. How?

Well, each instruction a computer can perform is identified by an
opcode (which is short for operation code). An opcode is just a number.

Instructions and the things they operate on are in memory and each
location in memory has an address - which is simply a number.

Like your brain has working memory, microprocessors have registers
for quick access to stuff. They are also addressed in instructions
by groups of bits.

Yes, the  language a computer understands is just bits.

Here is a robot computer simulator you can explore if you are
interested.

-------------------------------------------------------------------------

Summary

As I said at the start of this lesson, programming is just describing
how to do something.  But since computers don't understand our native
language and we would go crazy trying to describe something with just
ones and zeros, which is what the computer does understand, we use
computer programming languages.

In the following eighteen lessons you will learn the basics of computer
programming.  We will work together, writing programs in the Logo
programming language.  It should be fun.

-------------------------------------------------------------------------

When was the last time you got to play a game as an exercise?

Here is a game that will help you get good at working with
binary numbers.

-------------------------------------------------------------------------

Blown to Bits - check it out!

```