old-www/LDP/LG/issue72/jones.html

471 lines
26 KiB
HTML

<!--startcut ==============================================-->
<!-- *** BEGIN HTML header *** -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML><HEAD>
<title>The Godfather of Computing - Charles Babbage LG #72</title>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#0000AF"
ALINK="#FF0000">
<!-- *** END HTML header *** -->
<CENTER>
<A HREF="http://www.linuxgazette.com/">
<IMG ALT="LINUX GAZETTE" SRC="../gx/lglogo.png"
WIDTH="600" HEIGHT="124" border="0"></A>
<BR>
<!-- *** BEGIN navbar *** -->
<IMG ALT="" SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom"><A HREF="forsberg.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A><A HREF="index.html"><IMG ALT="[ Table of Contents ]" SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A><A HREF="../index.html"><IMG ALT="[ Front Page ]" SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A><A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue72/jones.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A><A HREF="../faq/index.html"><IMG ALT="[ FAQ ]" SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A><A HREF="nielsen.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A><IMG ALT="" SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom">
<!-- *** END navbar *** -->
<P>
</CENTER>
<!--endcut ============================================================-->
<H4 ALIGN="center">
"Linux Gazette...<I>making Linux just a little more fun!</I>"
</H4>
<P> <HR> <P>
<!--===================================================================-->
<center>
<H1><font color="maroon">The Godfather of Computing - Charles Babbage</font></H1>
<H4>By <a href="mailto:jones@systemtoolbox.com">G James Jones</a><BR>
Reprinted from <A HREF="http://www.systemtoolbox.com/">System Toolbox's</A>
History section with permission<BR>
Original URL: <A HREF="http://www.systemtoolbox.com/article.php?articles_id=43">http://www.systemtoolbox.com/article.php?articles_id=43</A>
</H4>
</center>
<P> <HR> <P>
<!-- END header -->
<H3>In the beginning...</H3>
<P>Some of the most often used cliches about writing and telling
stories turn out to be good advice as well. A writer is told to
"write what she knows" and a storyteller is to "begin at the
beginning." And so, I hope to focus on "our" beginnings and the
things that "we" know; the beginnings of network and hardware
engineers, computer scientists, system administrators and others among
a host of geeks, hackers, and phreaks that exist in our world.
<P>The original idea came out of an interchange between Chris Campbell
and I about an articled titled
<A HREF="http://www.binaryfreedom.com/content.php?content_id=8">Adventures
in Babysitting</A> that he had written for
<A HREF="http://www.binaryfreedom.com">Binary Freedom</A>. The article
described Chris' foray among our would-be next generation at a local
2600 meeting and featured his utter disbelief at their lack of
interest or understanding of their technology history. Names like
Admiral Grace Hopper and Ken Thompson didn't come close to ringing a
bell. You can tell how disheartening an experience it was for him.
These people were his heroes after all (mine as well) and they should
be looked up to and seen as the mentors that they are. In order to
showcase and explore them, I proposed this column.
<P>So, to begin somewhere near the beginning, let's investigate the
Godfather of Computing, Charles Babbage.
<H3>A Beginning of Another Sort...</H3>
<P>Charles Babbage is variously called the Father, Grandfather and
Patron Saint of Computing. To many that care, he began it all. I
prefer to think of him as the Godfather of Computing and to see why is
all part of his story.
<P>Babbage was born into a wealthy, but undistinguished, family in
Devonshire, England, in 1791. While still a young boy, Babbage was
concerned with questions of "how" over those of "why." The expression
of this concern saw the boy dismantling his fair share of toys and
mechanical objects around his family's home.
<H3>A "Personality Disorder" Explored...</H3>
<P>My father-in-law, an engineer, likes to say that engineering is the
expression of a personality disorder. The way he sees it, all
engineers think and see the world such an odd, but similar, way that
it can only be attributed to some sort of mental disorder. When they
see something new, they want to pull it apart. When they hear of a
problem, whether in their realm of control or not, they will offer
"the most efficient" solution. In general, the world is seen as a
broken puzzle that only some good solid, and sustained, engineering
will fix. I can see his point. Besides, breaking Aunt Edna's antique
clock just to see how it works can be considered rude at the very
least. On top of which, "normal" social graces are generally thrown
out the window, placing the final nail in the coffin of diagnosis.
<P>The funny thing is that the expression of this "disorder" can be
fingered early in life. One can watch for the early warning signs.
Children that take apart watches or have a penchant for building
elaborate structures from blocks may just be engineers in their pupae
stage. By all accounts, Babbage definitely was afflicted by the time
of his boyhood. His tinkering with things, his dismantling of
gadgets, and his inquisitiveness as to how things worked are all sure
signs. While the draw of engineering can be sublimated if caught
early and treated with care, Charles had no such luck. His fate was
sealed when he stumbled upon a copy of the <U>Young Mathematician's
Guide</U> in the school library. From that point on, Babbage devoted
himself to the pursuit of rational thought and scientific knowledge.
<P> After boarding school, Babbage headed to Cambridge to attend
Trinity College. While at Trinity, the precocious student tended to
test the patience and abilities of his instructors, a manner that may
be familiar to a few among our readers. One rebellious episode saw
Babbage and his Analytical Society taking on the very way math was
done in England.
<P>At the time, most of England preferred to do complex mathematics
using Sir Isaac Newton's "dot notation." The choice of notation was
more out of civic pride than actual utilitarianism. Babbage
considered this an affront to the way things should be. It went
against efficiency and clarity and was a general affront to Babbage's
rational senses. He favored instead the scientific notation perfected
by Leibniz and used throughout Europe. The Analytical Society, which
Babbage helped found, championed the fight to switch to scientific
calculation by translating Lacroix's <U>Examples to the Differential
and Analytical Calculus</U> from its original French. This
achievement is considered one of the main events that helped bring
modern mathematics to England.
<H3>The Beginnings of an Idea...</H3>
<P>Though stories about the first notion of Babbage's calculating
machine vary, they all seem to focus on Babbage's unwillingness to
suffer inefficiency and undue complexity. It seems that Babbage was
reviewing some of the many "look-up" tables that were used to aid in
calculating complex equations in his day. The number of errors that
were contained therein quickly exasperated him and his partners.
Since the tables were generally copied by hand or transcribed to
plates for printing, it was inevitable that errors would get
introduced into the tables during the process. Those errors then just
percolated through all the calculations that they were used to
perform. One error made hundreds of years ago could potentially
misroute ships or hurt financial projections.
<P>Babbage is said to have complained to his colleague that he wished
these calculations could be carried out by steam. In that simple
complaint lies the beginning of the first programmable mechanical
calculator. It would later see life as the Difference Engine and
still later as plans for the much more ambitious, and versatile,
Analytical Engine. It was 1820.
<H3>Calculating Machines...</H3>
<P>Babbage's first attempt at a calculating machine took the form of a
small six-wheeled model that took advantage of number differences to
aid in complex calculations. The machine, dubbed the Difference
Engine, was powerful and elegant in its simplicity.
<P>Babbage realized that any process that could be distilled into a
repeatable algorithm probably could be mechanized. It's entirely
likely that he was inspired to this line of reasoning through his
fascination with automata at an early age. Automata were mechanical
creations and figurines that imitated life in the form of animals,
ballerinas and musicians and such. By following complex, but
repeatable, mechanical tricks, some automata were able to seem
extraordinarily lifelike. It was this controlled, and nearly
invisible, complexity that interested Babbage.
<P>Babbage's table problem was similar to that of the automata. While
fixing the errors in copying tables was a complex problem, he realized
that embracing the complexity and wrapping it in elegant mechanics was
a likely solution. Babbage decided that by using the method of
differences, he could create a calculating machine that would aid in
these complex calculations. This is how it worked.
<H3>Method of Differences...</H3>
<P>This is how the method of differences works. First one takes a set
of consecutive numbers and then you perform a set function on
each. For sake of ease, let's use the squares of the starting
number's. Then you begin to successively look at the differences
between the results until you arrive at a common number. It is then
possible to work the process in reverse using only addition (something
that machines can easily be engineered to do) to fill in the answer to
the function for successive beginning numbers in the table. The only
requirement is that you begin with a certain amount starting of
"known" numbers that will, following the process, eventually come to a
form of stasis.
<P>For our example we will use <i>1</i>, <i>2</i>, <i>3</i>, and
<i>4</i> as our starting points. These numbers will form our <i>x</i>
column. The function column, <i>f(x)</i>, is then determined by
applying the function chosen, squaring in this case, to each number of
the <i>x</i> column. This gives <i>1</i>, <i>4</i>, <i>9</i>, and
<i>16</i> in order. For the next column, we find the differences
between each <i>f(x)</i>, giving us <i>3</i>, the difference between 1
and 4, <i>5</i>, the difference between 4 and 9, and <i>7</i>, the
difference between 9 and 16. We line these numbers in a column,
<i>delta 1</i>, so that they are positioned vertically, for ease of
calculation, about halfway between the two numbers in the preceding
column. Next we calculate the differences between the numbers in
<i>delta 1</i>. The answers, placed in a fourth column, <i>delta
2</i>, are <i>2</i>, the difference between 3 and 5, and <i>2</i>, the
difference between 5 and 7. We have now reached a stasis point where
the differences are the same. Once we have reached this point we can
now work our way backwards and fill in the table. But first, the
starting table looks something like this:
<P>
<div align="left">
<table border="0" width="408" height="375" cellspacing="0" cellpadding="0">
<tr>
<td width="101" height="46" align="center" valign="middle"><b>x</b></td>
<td width="101" height="46" align="center" valign="middle"><b>f(x)</b></td>
<td width="101" height="46" align="center" valign="middle"><b>delta 1</b></td>
<td width="101" height="46" align="center" valign="middle"><b>delta 2</b></td>
</tr>
<tr>
<td width="101" height="47" align="center" valign="middle">1</td>
<td width="101" height="47" align="center" valign="middle">1</td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle">3</td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="101" height="47" align="center" valign="middle">2</td>
<td width="101" height="47" align="center" valign="middle">4</td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle">2</td>
</tr>
<tr>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle">5</td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="101" height="47" align="center" valign="middle">3</td>
<td width="101" height="47" align="center" valign="middle">9</td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle">2</td>
</tr>
<tr>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle">7</td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="101" height="47" align="center" valign="middle">4</td>
<td width="101" height="47" align="center" valign="middle">16</td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
</table>
</div>
<P>Now we just work our way backwards on the table to fill in the
values for the function of new values of <i>x</i>. First we can check
our work. Starting at the top value in the <i>delta 2</i> column
(<i>2</i>), we can add it to the top value in the <i>delta 1</i>
column (<i>3</i>) and should get the next value in line in the
<i>delta 1</i> column. If you don't get 5, check your addition. If
you do get the second value in <i>delta 1</i>, then you did your
calculations for those two rows correctly and you can move on (see,
it's self checking). Now take the value at the top of <i>delta 1</i>
and add it to the top of <i>f(x)</i>. The result is the value for the
function applied to the next value of <i>x</i> in the table. You can
carry this for any value of <i>x</i> as long as you know the values of
the function for a few numbers before x, and you only have to use
addition to fill in the table after that point. Here is a table with
the values for <i>x = 5</i>, to show you how it works for "new" table
additions.
<P><div align="left">
<table border="0" width="408" height="375" cellspacing="0" cellpadding="0">
<tr>
<td width="102" height="46" align="center" valign="middle"><b><font face="Times New Roman" size="3">x</font></b></td>
<td width="100" height="46" align="center" valign="middle"><b><font face="Times New Roman" size="3">f(x)</font></b></td>
<td width="101" height="46" align="center" valign="middle"><b><font face="Times New Roman" size="3">delta 1</font></b></td>
<td width="101" height="46" align="center" valign="middle"><b><font face="Times New Roman" size="3">delta 2</font></b></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">1</font></td>
<td width="100" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">1</font></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"></td>
<td width="100" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">3</font></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">2</font></td>
<td width="100" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">4</font></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">2</font></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"></td>
<td width="100" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">5</font></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">3</font></td>
<td width="100" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">9</font></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">2</font></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"></td>
<td width="100" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">7</font></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">4</font></td>
<td width="100" height="47" align="center" valign="middle"><font face="Times New Roman" size="3">16</font></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"><b><font face="Arial Black">2</font></b></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"></td>
<td width="100" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"><b><font face="Arial Black">9</font></b></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
<tr>
<td width="102" height="47" align="center" valign="middle"><b><font face="Arial Black">5</font></b></td>
<td width="100" height="47" align="center" valign="middle"><b><font face="Arial Black">25</font></b></td>
<td width="101" height="47" align="center" valign="middle"></td>
<td width="101" height="47" align="center" valign="middle"></td>
</tr>
</table>
</div>
<P>As you can see, it becomes very easy to add new values to the
table. Working backwards from <i>delta 2</i>, two (2) plus <i>delta
1</i>'s value of seven (7) yields nine (9) for <i>delta 1</i>, which
in turn yields twenty five (25) for the function of <i>x</i>, or
<i>f(x)</i>. Pretty straightforward. So much so, in fact, that it
can be carried out mechanically. Herein was Babbage's genius. He
understood, perhaps innately, before any objective <i>proof</i>
existed, that complex calculations could be carried out by machine.
In order to avoid transcription errors when users of the machine copied
the results of the calculation, Babbage's goal was to create a printer
of sorts that would copy out the results by itself. The methods that
Babbage devised would successfully skirt the sources of table errors
that so infuriated the inventive Babbage. It was this understanding,
this internal realization of the "correctness" of his solution, that
would drive him in the pursuit of the ultimate manifestation of his
ideas until the day he died.
<H3>The Analytical Engine...</H3>
<P>Babbage's early prototype of the Difference Engine was met with
great public excitement. He became the hit of London's social circle
and it was often the mark of a party's success or failure as to
whether Babbage had accepted an invitation to attend. This prototype
also brought him some initial funding, to the tune of 15,000 to
17,000 pounds (accounts vary), from the British government. This
money was to be put into the development of a fully functional
Difference Engine and, later, a more complex calculating machine
dubbed the Analytical Engine.
<P>Babbage had been able to prove his ideas and gained general
acceptance of his theories. His major problem with creating a version
beyond his proof-of-concept prototype for the Difference Engine was
his constant learning and tinkering. As Babbage worked on the project
he was constantly discovering more efficient ways to accomplish his
goals and overcome the problems with precision machining that hampered
his progress. It is said that as soon as new plans had left his shop
for the machinists, he had already come up with a revision of the
previous idea. This constant tinkering would be Babbage's undoing and
would defeat the progress of nearly every project he undertook. It
was as if his mind were so active, that it couldn't slow down long
enough to take a snapshot of an idea from which he could work to
physical completion.
<P>Babbage never completed a full Difference or Analytical Engine. He
died in his London home to a cacophony of street musicians (a group
that Babbage sought to have abolished from the city's streets) who had
come from across the country to serenade him on his way outside his
window. Let's just say that he didn't make many friends among that
group (lawsuits will do that). But we still remember him. Beyond the
idea that complex calculations could be carried out mechanically, an
idea that seems inevitable, what did he contribute?
<P>The beauty of Babbage's ideas and their overall contribution to
computer science lies in their completeness. Babbage envisioned a
system that was programmable through punch card inputs. It could
carry out many varied types of calculations and was as versatile as
the instructions that it received; versatility through "software".
With his printing ideas, Babbage had basically pioneered the idea of
input/output (IO) via punch cards and printers. Taking it a step
further, his conception of Analytical engine could store calculations
(by punching cards) and continue them later or use the results of
certain calculations to continue in different directions based on the
outcome; the stored program and programmatic logic respectively.
<P>Unfortunately, Babbage never saw his most dramatic ideas reach
reality, though he maintained his vision going so far as to work with
Ada, the Countess of Lovelace (and mathematical wunderkind) to work
out the proper functioning and use of the machines. It is due to
Ada's copious and <i>annotated</i> notes of some of Babbage's lectures,
that his ideas weren't lost as a footnote in history and that the
awesomeness of his, at least mental, achievement came to be
appreciated. Her notes and Babbage's unearthed plans helped this
vindication even further when a working and more complex
Difference Engine No. 2, the precursor to the Analytical
Engine, was constructed by Science Museum in London in
1991. He should be appreciated for his persistence and
his ideas. The world could have
been wildly different if only he had been moderately successful (read
<U>The Difference Engine</U> by Gibson and Sterling for one possible
outcome). Babbage is the <i>godfather</i> of computing because he
beat everyone to the punch. Using the technology that was available
to him, metalworking, engineering, and steam, he was able to
approximate the early "computers" of the electrical age.
<P>He was a visionary before his time. We should all hope to be as much.
<br>
<br>
<p>-----------
<P><I>&copy; 2001 G. James Jones is a Microcomputer Network
Analyst for a mid-sized public university in the midwest. He writes
on topics ranging from Open Source Software to privacy to the history
of technology and its social ramifications. Verbatim copying and
redistribution of this entire article is permitted in any medium if
this notice is preserved.</I>
<!-- *** BEGIN bio *** -->
<!-- *** END bio *** -->
<!-- *** BEGIN copyright *** -->
<P> <hr> <!-- P -->
<H5 ALIGN=center>
Copyright &copy; 2001, The Binary Freedom Project, LLC.<BR>
Copying license as above<BR>
Published in Issue 72 of <i>Linux Gazette</i>, November 2001</H5>
<!-- *** END copyright *** -->
<!--startcut ==========================================================-->
<HR><P>
<CENTER>
<!-- *** BEGIN navbar *** -->
<IMG ALT="" SRC="../gx/navbar/left.jpg" WIDTH="14" HEIGHT="45" BORDER="0" ALIGN="bottom"><A HREF="forsberg.html"><IMG ALT="[ Prev ]" SRC="../gx/navbar/prev.jpg" WIDTH="16" HEIGHT="45" BORDER="0" ALIGN="bottom"></A><A HREF="index.html"><IMG ALT="[ Table of Contents ]" SRC="../gx/navbar/toc.jpg" WIDTH="220" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A><A HREF="../index.html"><IMG ALT="[ Front Page ]" SRC="../gx/navbar/frontpage.jpg" WIDTH="137" HEIGHT="45" BORDER="0" ALIGN="bottom"></A><A HREF="http://www.linuxgazette.com/cgi-bin/talkback/all.py?site=LG&article=http://www.linuxgazette.com/issue72/jones.html"><IMG ALT="[ Talkback ]" SRC="../gx/navbar/talkback.jpg" WIDTH="121" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A><A HREF="../faq/index.html"><IMG ALT="[ FAQ ]" SRC="./../gx/navbar/faq.jpg"WIDTH="62" HEIGHT="45" BORDER="0" ALIGN="bottom"></A><A HREF="nielsen.html"><IMG ALT="[ Next ]" SRC="../gx/navbar/next.jpg" WIDTH="15" HEIGHT="45" BORDER="0" ALIGN="bottom" ></A><IMG ALT="" SRC="../gx/navbar/right.jpg" WIDTH="15" HEIGHT="45" ALIGN="bottom">
<!-- *** END navbar *** -->
</CENTER>
</BODY></HTML>
<!--endcut ============================================================-->