COMPUTER PROGRAMMING IN THE 21ST CENTURY: QUO VADIS?
Department of Geological Sciences/172, University of Nevada, Reno, NV 89557-0138
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.