[plt-scheme] Re: Programming for non-programmers
On 13 Oct 2004 at 9:39, Joe Marshall wrote:
> Eric Kidd <eric.kidd at gmail.com> writes:
>
> > Programming is a hard skill.
>
> Programming is *extraordinarily* hard. Programmers (as well as
> software engineers and computer scientists) are among the smartest
> people I know, and *not one of them* can write a program longer than
> about a page without making mistakes. Even those that have been doing
> it for years.
I have found that with programming, much of it depends on the
thought that goes into a program before writing the actual code. I
find a direct relation to the amount of preprocessing one does
before coding, and the amount of errors in the code afterwards. I
think that understanding this is really what produces more "mature"
programmers. Some people just take longer than others to make
"preprocessing" a natural skill rather than something they have to
think about.
> > Some people understand variables and functions, but don't quite grok
> > data structures. Others may understand "for each" loops, but not
> > recursion.
>
> Most `beginning computer books' teach recursion in the last chapter,
> if at all.
Most beginning programming books are stuck with a language
which is unintuitive or two complicated, and thus they must teach
semantics and syntax before ever reaching true programming
concepts. Thus, a student could not possibly understand recursion
explained in a programming language that they do not understand
how to read; hence, we have books that teach recursion at the end
rather than at the beginning.
It is a sad state, because for me, recursion has now become almost
second nature, and if I did not have that skill, most of my programs
would cease to be working ones. I think recursively, and without
that skill, I do not know where I would be.
> > 2) Everybody should learn how to program.
>
> I don't know what you mean by this.
>
> If we consider a program as a description of a process that is formal
> enough to be carried out in a mechanistic way (which is about as broad
> a definition as I can think of that still bears some meaningful
> relationship to programming), then being able to give clear directions
> is often beyond some people. Actually writing a procedure that
> implements some well-known algorithm might be asking way too much.
>
> It'd sure be nice if everyone had the ability to apply critical
> thinking and logic to the extent that even a mediocre programmer can,
> but I don't think that will ever happen.
I think this has to do with a broader problem of our education
system. We are no longer teaching the critical thinking skills
necessary to actually understand how programming works. In some
sense, the more "precisely" educated men of the late 1700's were
more of programmers, than are most of the college students we
have today. This is because there has been a shift in how people
treat thinking.
That is why programming is such an important skill to teach. It
teaches precision, accuracy, and critical thinking which is all but
lost in most other areas of learning today. The ability to logically
and accurately describe something is the fundament of
communication, and necessary in any field, including basic hard
labor.
We can take English as an example of a programming language,
but the vast majority of people do not know how to formally create
"programs" in English, because their mastery of that language is
about equal to that of a dog's.
English is a complicated language, however, and learning it is
difficult. If one could possibly detatch the higher level logic from
English, one could more easily teach critical thinking.
Enter programming in Scheme, or another syntactically clean
language. A simpler form of communication such as Scheme,
allows a student to focus on logic. When the student can think
clearly in Scheme terms, he can apply this thinking to any other
form of ordered communication, such as English, Chemistry,
Mathematics, or Law.
Programming is just another name for the lost art of thinking.
People are quite capable of thinking, but they do not. If they are
taught how to think, they are also taught how to program, and vice
versa. It is simply a necessity that people learn to program, it is
part of a liberal education.
> > But I also still hold out a hope of accomplishing (2)--teaching the
> > artists and writers of the world to write hundred line scripts.
>
> I'm skeptical that it can be done, but don't let me dissuade you from
> trying. The benefits of even the smallest amount of success in this
> department would be enormous.
The problem that you state is all too true. In the current thinking of
today, people will not learn how to program, because the very
foundation of "what we are learning" is different. Rather than
teaching people how to think critically, we are teaching people how
to follow processes or memorize definitions. Not only does this
make the job of teaching more difficult and broad, it also directly
effects people's competence in any thought related area.
What we are seeing with the difficulty in teaching someone how to
program is simply a result of this methodology. Programming is
such a precise skill with such precise and demanding requirements,
one of which being the ability to think critically, that it simply throws
into sharper relief a more general problem. The problem we have
with programming is a clear and acute example of the lack of
foundation in most people's education today.