[plt-scheme] Re: Programming for non-programmers

From: Arctic Fidelity (af at aaronhsu.com)
Date: Wed Oct 13 10:08:49 EDT 2004

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 

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.

Posted on the users mailing list.