COMPUTER PROGRAMMING IN THE 21ST CENTURY:
QUO VADIS?
Department of Geological Sciences/172, University of
Nevada, Reno, NV 89557-0138
carr@unr.edu
Is
the development of computer programming skills a necessary component of the
curriculum when educating college students? Twenty years ago, there was no reason to question the
answer. Is there a reason to
question the answer now?
Indeed,
can computer programming be taught by imposition? This is an important consideration when contemplating curriculums. To be successful at
software development, an individual must hone the skills of logical
thought. This takes considerable
practice, no different from learning a musical instrument, such as the guitar
or piano. Are three hours per week
in a semester (or 4 to 5 hours per week in a quarter) in a formal classroom
setting, plus outside classroom effort, enough to instill permanent programming
skills in students?
Consider
a positive response to this query.
Such a response presupposes that all individuals have the same thought
processes. This is the implicit
presumption I maintained when embarking on an academic career in 1983. Then, the personal computer was a new
advent. Mainframe and minicomputer
usage and programming were mainstream.
Certainly in regard to scientific programming, FORTRAN was the language
of choice. Consequently, my
conviction at the time was to make FORTRAN programmers of all my students.
This
philosophy, however, was flawed. I
forgot an important event in my own educational experience. In 1978, when an undergraduate student
majoring in geological engineering at the University of Nevada-Reno (then, the
name was hyphenated), I was forced to take a FORTRAN programming course. I earned an A in this course, even
though there was one program that I never was able to successfully
execute. To this day, all I
remember about this course is this failure. Moreover, because I was not required to use my programming
“skills” on a regular basis upon completion of this course, I forgot
how to write FORTRAN programs by the time I entered graduate school at the
University of Arizona in 1979.
Consequently, when faced there with using a FORTRAN computer package for
digital image processing, SADIE (System at Arizona for Digital Image Experimentation),
a package that consisted only of subroutines that required a user to write a
short, front-end FORTRAN program to control the mounting of tapes, opening
files, and calling the subroutines necessary for the type of image processing
desired, I was completely lost. I
had forgotten all knowledge of FORTRAN and how to write a program.
Faced
with this challenge, I purchased a reference book on FORTRAN and taught myself
how to write a FORTRAN program.
This time, no one was “forcing” me to learn programming. I was being “forced” to
learn remote sensing and digital image processing. But, this gave me a reason for knowing FORTRAN, moreover the
necessity of developing good programming skills. So, I offer what may be viewed as a controversial response
to the foregoing query. No,
programming skills cannot be taught.
Instead, they must be learned.
After
eighteen academic years, I have come to appreciate this philosophy. If a person wants to become a software
developer, a self-motivation, then these skills will be pursued, much like a
hobby. Alternatively, if a person
does not want to become a software developer, a cane can be cracked over the
person’s knuckles until they bleed and the skills will not be
learned. I no longer teach
computer programming. Instead, I
teach data analysis using software that I have developed. My emphasis is on using, rather than
developing software. As I finish
this sentence, I pause to listen to my daughter practicing Bach’s Minuette
in G Major on her piano, an instrument
she chose to learn. I am awed by
how well she plays. I hate playing
the piano, but certainly enjoy listening to it.
Today’s
software engineering challenges are, in my opinion, much greater than twenty
years ago. Not only must an
algorithm be successfully programmed, but a Windows interface must also be
designed. This statement is
certainly made in reference to personal computers. Yet, this editorial is also directed at teachers of
students. Researchers may still
use Unix-based workstations, but these are quite expensive. Many (most?) educational programs
are based on the use of personal computers. Many (most?) students own personal computers, not Unix-based
workstations. Maybe when
using Unix-based workstations, only algorithmic programming is necessary. Certainly, if personal computers are
the platform of choice for students, Windows-based software is necessary to
whatever is being taught that requires the use of a computer.
Teaching
programming on a personal computer consequently requires a Windows development
environment, such as Visual tools, Basic, C++, or FORTRAN. Of these, Visual Basic perhaps offers
the most convenient environment for designing Windows interfaces. Nevertheless, the environment,
itself, is a computer program and must be purchased for students’
use. Moreover, the purchase
of a multiple user license is a likely requirement. This software acquisition is expensive, perhaps prohibitive
for many educational programs.
Consequently,
many of us now teach students using various commercial programs, such as
Microsoft’s Excel spreadsheet program. Another popular, commercial program is Matlab that requires
students to implement pseudo programming steps to obtain an answer. This can help to improve logical
thinking. Developing
“programs” under Matlab, though, does not yield portable
products. Another user must also
have Matlab installed on their system to run the program. A course oriented toward the use of
Matlab must make this program available to students, either through a multiple
site license, or by requiring students to purchase the student version. This is also true of other commercial
programs, such as Microsoft Excel.
This
leads to the very essence of this editorial. Are we risking the reduction in talented software developers
by an over-reliance on the use of commercially available Windows-based software
in our curriculums? Modern
computer users are certainly point-and-click oriented. The expectation of the computer user is
for access to software, the usage of which is self-evident. Patience for pouring through software
user’s guides is diminished or nonexistent. Certainly, this is the expectation of the modern and
impatient college student. As I
often maintain, there is only one vulgar, four-letter word in the English
language: time. Today’s
student is pressed for time, and any computer assignment is viewed with
contempt when it threatens the amount of “free” time outside the
classroom. Students are readily
given to seeking outside classroom help if a computer program does not work in
their first attempt. This places a
considerable burden on those faculty that teach computer-oriented classes and
further are required to perform stellar research. Students’ expectations for a computer assignment is
point, click, then print, and if it takes more than this, then hell hath no
fury like a student scorned.
Given
this impatient atmosphere, teaching software programming is even more difficult
today than yesterday.
Without any knowledge of software development, though, users are
oblivious to the amount of time and energy necessary to develop such
user-friendly software environments.
Students consequently lack an appreciation for modern software
development. Is this a failure of
our academic programs?
This
is an unsettling question. As I
argue earlier, software development cannot be taught, but must be learned. I still do not advocate taking up
precious space in crowded curriculums for programming classes. Nevertheless, I am bothered by
students’ lack of understanding the difficulty in developing successful
software, especially Windows-based applications. Rather than a class on computer programming, would a review
course on software development be beneficial if included in curriculums to
expose students to detailed knowledge of what is required to develop a
Windows-based program? Answers to
these questions are perhaps as difficult as determining who won the 2000 United
States Presidential election.
Moreover,
how can we motivate individuals to become software developers in the highly
visual and modern computer environment?
I am concerned that the pool of talented software developers is
shrinking as reliance on commercial, Windows-based software expands. Students no longer are exposed to
actual code, as they once were when running programs in batch mode on mainframe
and minicomputers. I am not sure
that there is any real understanding about the coding aspects of modern
software. This may be my failing
for not exposing my students to this aspect of software. And, without a sound
understanding of the foundations of software development, there can be no sound
understanding of the fairness of software cost. Without competing software, there is little check on
software cost.
Our
reliance on commercial software today is heavy. One, or more, persons wrote each of these
programs. Who will write the
programs of tomorrow? Is it the
responsibility of college curriculums to meet this challenge? Or, will there always be a pool of
talented programmers who have developed their skills through personal
learning? I am no closer to
answers to these important questions now than when I started this editorial.