Michel wrote:
> Turing's great achievement was not the construction of computational
> machinery per se but supplying a theory of computation.
The formalized notion of computability is characterized by the
following three equivalent formalizations (one of which is Turing’s
theory):
------------------------------
Before a precise definition of computation was developed,
mathematicians often used the informal term “effectively calculable”
to describe functions that are computable by paper-and-pencil methods.
In the 1930s, several independent attempts were made to formalize the
notion of computability:
1) In 1933, Austrian-American mathematician Kurt Gödel, with Jacques
Herbrand, created a formal definition of a class called general
recursive functions. The class of general recursive functions is the
smallest class of functions (possibly with more than one argument)
which includes all constant functions, projections, the successor
function, and which is closed under function composition and
recursion.
2) In 1936, Alonzo Church created a method for defining functions
called the λ-calculus. Within λ-calculus, he defined an encoding of
the natural numbers called the Church numerals. A function on the
natural numbers is called λ-computable if the corresponding function
on the Church numerals can be represented by a term of the λ-calculus.
3) Also in 1936, before learning of Church's work, Alan Turing created
a theoretical model for machines, now called Turing machines, that
could carry out calculations from inputs by manipulating symbols on a
tape. Given a suitable encoding of the natural numbers as sequences of
symbols, a function on the natural numbers is called Turing computable
if some Turing machine computes the corresponding function on encoded
natural numbers.
Church and Turing proved that these three formally defined classes of
computable functions coincide: a function is λ-computable if and only
if it is Turing computable if and only if it is general recursive.
This has led mathematicians and computer scientists to believe that
the concept of computability is accurately characterized by these
three equivalent processes.
On the other hand, the Church–Turing thesis states that the above
three formally defined classes of computable functions coincide with
the informal notion of an effectively calculable function.
------------------------------
(
http://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis)
In addition to being mathematicians, Gödel, Herbrand, Church, and
Turing were also formal logicians. I think this indicates that to
fully understand these three formalizations of computability, one must
first have a solid understanding of formal logic. However, I think
most computer programmers have had enough exposure to formal logic to
gain an intuitive understanding of parts of these formalizations.
For example, most microprocessors are based on the Von Neumann
architecture, and the Von Neumann architecture is based on the concept
of a Turing machine.
(
http://en.wikipedia.org/wiki/Universal_Turing_machine) The only
computer language that these microprocessors “understand” is machine
language (which can be created directly from the low-level language
called assembly language). (
http://en.wikipedia.org/wiki/Machine_code)
Therefore, if someone understands a Turing machine, they have what can
be thought of as a low-level language understanding of computation.
Most programmers don’t learn assembly language as their first computer
programming language because its very low-level of abstraction makes
it difficult to grasp the fundamental concepts of programming. They
learn a high-level language instead. Even though machine language can
be created directly from assembly language, most machine language is
created by the transFORMation of high-level language programs into
equivalent machine language programs using a compiler.
General recursive functions and the lambda calculus are analogous to
high-level computer programing languages. For example, one of the
highest-level computer programming languages is Lisp, and Lisp is
directly based on the lambda calculus. High-level languages and
machine languages are equivalent because the above three concepts of
computation are equivalent.
Just like most beginning programmers should not study machine language
first, most people who are interested in learning how computation
works should not start by studying Turning machines. Instead, they
should study general recursive functions and the lambda calculus
before studying Turing machines. Also, every programming language is a
formal language (
http://en.wikipedia.org/wiki/Formal_language). Anyone
who wants to understand what a programming language is must first
understand what a formal language is.
Ted