- 1 Technical Day 1.01: Introductions
- 1.1 Introduction to the Technical Day
- 1.2 An Human Adding Machine
- 1.3 Introduction to Computation
- 1.4 Resources
- 1.5 Quotes
- 1.6 Assignments for Next Week
Technical Day 1.01: Introductions
Introduction to the Technical Day
As a broad intoduction to the program we consider the following three questions:
- Why programming?
- What is Python?
- Why Python?
Bruce Mau's manifesto for change contains a few relevant points, in particular "the trouble with software is that everyone has it" as motivation for "making your own tools". We watched this video visualizing the history of contribution to Python. We distributed the textbook that we will be using in the class.
An Human Adding Machine
We began the day by performing an Human Adding Machine.
Introduction to Computation
The modern system of writing numbers (like 2008 and 17) can be traced to early Arab and Hindu origins. There are three key properties of this system:
- 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)
Abstract relation of symbols to quantity
Finite Symbols, Infinite Possibilites
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 Oware is used to teach children about counting.
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.
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 Analytical Engine) failed as it was simple too complex for him to build.
and a flash-format video, inspiring or terrifying? you be the judge!
In An Investigation of the Laws of Thought, 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 De Morgan's Law.
Dinner with De Morgan (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.
It was Claude 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, and much more simply than Babbage's machine, but in principle capable of performing the same calculations.
... [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.
Think Python, p. 3