2009 101: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
Line 15: Line 15:
== Introduction to Computation (including performance) ==
== Introduction to Computation (including performance) ==


=== The Number System is abstract ===
=== Writing Numbers ===


The way numbers are written today (in English) is based on ancient systems that can be traced back to the [[Wikipedia:Hindu-Arabic_numeral_system | Arab and Hindu]] origins.
The modern system of writing numbers (like 2008 and 17) can trace its origins to early [[Wikipedia:Hindu-Arabic_numeral_system | Arab and Hindu]]. There are three key properties of this system:


There have been alternatives, for instance [[Wikipedia:Roman Numerals | Roman Numerals]]. Also see [http://en.wikipedia.org/wiki/Quipu Quipu] for an alternative to writing systems.
# Based on an abstract relation of symbols to notions of quantity.
# Positional: Limited (or finite) number of symbols to represent an unlimited (infinite) number of quantities
# Decimal: Based on counting in groups of tens (or powers of ten)


But key features of this system are that it is positional, and decimal.


The fact that it is positional, is a "clever hack" in that using just 10 symbols (if one includes an explicit symbol for "nothing") you can write down an infinite (unlimited) number of quantities.
==== Abstract relation of symbols to quantity ====


* [http://en.wikipedia.org/wiki/Oware Oware]
==== Finite Symbols, Infinite Possibilites ====


Minimalist Math
In contrast to [[Wikipedia:Roman Numerals | Roman Numerals]], new symbols are not needed as the quantity increases, you simply keep adding digits to the left. Sometimes the African game [http://en.wikipedia.org/wiki/Oware Oware] is used to teach children about counting.


==== Decimal ====
The common number system is based on 10 symbols (if one includes an explicit representation of nothing or zero (0)). This seems to be because we have 10 fingers (also known as digits)... thus 10 numerical digits. However, other systems are equally possible (based-4, base-9, base-173). Babylonians used a number system based on 60 (which is reflected in our representation of time). Also see [http://en.wikipedia.org/wiki/Quipu Quipu] for an early alternative writing systems.
=== Thinking Machines ===
==== Mechanical Math ====
[[Charles Babbage's Adding Machine]]
Babbage worked at the limits of what was physically possible in terms of producing the many mechanical parts, and produced many of his own tools, achieving a level of precision unique to his time. Ultimately his later effors (with his second machine, the Differential Engine) failed as it was simple too complex for him to build.
==== Minimalist Math ====
British Mathematician [[George Boole]] also worked with a notion of capturing something of the workings of human thought, though as an abstract mathematical system rather than a mechanical one. The system of algebra he developed is now called [http://www.kerryr.net/pioneers/boolean.htm Boolean Algebra].
Note that a key property of Boole's "algebra" was that, just as with a positional number system, it was possible to represent an infinite variety of equations using just a limited set of basic "building blocks" (or "primitives") -- the "and", "or", and "not" elements. In fact, it can be shown that and can be represented using "or" and "not", and similarly "or" can be represented using "and" and "not" -- so only the system can be reduced even further to just elements. This is called [[DeMorgan's law]].
===== Keeping DeMorgan Happy (an aside) =====
To make DeMorgan's law more concrete, consider the following situations with a somewhat demanding friend:
On making a decision to go out to eat:
I am only happy if we eat Chinese OR Indian food.
is the same as saying:
I will NOT be happy if we do NOT eat Chinese AND we do NOT eat Indian.
The morning after:
I am only happy when I have a good dinner AND sleep well.
is the same as saying:
I am NOT happy if I do NOT have a good dinner OR I do NOT sleep well.
==== Electrical Math ====
It was [[Charles Shannon]] who later (in the 20th century) connected the idea of Babbage & Boole to realize that a machine working with a binary representation of numbers would be possible to realize using flows of electricty.
Image: The Binary Half Adder
[http://en.wikipedia.org/wiki/Half_adder]
[http://en.wikipedia.org/wiki/Half_adder]


* [http://www.kerryr.net/pioneers/boolean.htm Boolean Algebra]
Image: The Binary Full Adder
 
== Resources ==
 
* [[Danny Hillis: The Pattern on the Stone]]


<blockquote>
<blockquote>
Line 38: Line 84:
''ThinkPython, p. 3''
''ThinkPython, p. 3''
</blockquote>
</blockquote>
Exercise
* Human Adding Machine
distribute [[ThinkPython]]
A brief introduction to Python
First exercise: A dialog with Python

Revision as of 13:40, 7 October 2008

Technical Day 1.01: Introductions

Introduction to the Technical Day

Why programming?

A Manifesto for Change

What is Python?

Why Python?

Introduction to Computation (including performance)

Writing Numbers

The modern system of writing numbers (like 2008 and 17) can trace its origins to early Arab and Hindu. There are three key properties of this system:

  1. Based on an abstract relation of symbols to notions of quantity.
  2. Positional: Limited (or finite) number of symbols to represent an unlimited (infinite) number of quantities
  3. Decimal: Based on counting in groups of tens (or powers of ten)


Abstract relation of symbols to quantity

Finite Symbols, Infinite Possibilites

In contrast to Roman Numerals, new symbols are not needed as the quantity increases, you simply keep adding digits to the left. Sometimes the African game Oware is used to teach children about counting.

Decimal

The common number system is based on 10 symbols (if one includes an explicit representation of nothing or zero (0)). This seems to be because we have 10 fingers (also known as digits)... thus 10 numerical digits. However, other systems are equally possible (based-4, base-9, base-173). Babylonians used a number system based on 60 (which is reflected in our representation of time). Also see Quipu for an early alternative writing systems.


Thinking Machines

Mechanical Math

Charles Babbage's Adding Machine

Babbage worked at the limits of what was physically possible in terms of producing the many mechanical parts, and produced many of his own tools, achieving a level of precision unique to his time. Ultimately his later effors (with his second machine, the Differential Engine) failed as it was simple too complex for him to build.

Minimalist Math

British Mathematician George Boole also worked with a notion of capturing something of the workings of human thought, though as an abstract mathematical system rather than a mechanical one. The system of algebra he developed is now called Boolean Algebra.

Note that a key property of Boole's "algebra" was that, just as with a positional number system, it was possible to represent an infinite variety of equations using just a limited set of basic "building blocks" (or "primitives") -- the "and", "or", and "not" elements. In fact, it can be shown that and can be represented using "or" and "not", and similarly "or" can be represented using "and" and "not" -- so only the system can be reduced even further to just elements. This is called DeMorgan's law.

Keeping DeMorgan Happy (an aside)

To make DeMorgan's law more concrete, consider the following situations with a somewhat demanding friend:

On making a decision to go out to eat:

I am only happy if we eat Chinese OR Indian food.
is the same as saying:
I will NOT be happy if we do NOT eat Chinese AND we do NOT eat Indian.

The morning after:

I am only happy when I have a good dinner AND sleep well.
is the same as saying:
I am NOT happy if I do NOT have a good dinner OR I do NOT sleep well.


Electrical Math

It was Charles Shannon who later (in the 20th century) connected the idea of Babbage & Boole to realize that a machine working with a binary representation of numbers would be possible to realize using flows of electricty.

Image: The Binary Half Adder [1]

Image: The Binary Full Adder

Resources

... [Y]ou can think of programming as the process of breaking a large, complex task into smaller and smaller subtasks until the subtasks are simple enough to be performed with one of these basic instructions.
ThinkPython, p. 3