Wednesday, September 16, 2015

Programming, Computer Science, or What?

The NY Times recounts the current Mayor's intent to introduce Computer Science into the Grammar and Secondary School programs.

They state:

To ensure that every child can learn the skills required to work in New York City’s fast-growing technology sector, Mayor Bill de Blasio will announce on Wednesday that within 10 years all of the city’s public schools will be required to offer computer science to all students. Meeting that goal will present major challenges, mostly in training enough teachers. There is no state teacher certification in computer science, and no pipeline of computer science teachers coming out of college. Fewer than 10 percent of city schools currently offer any form of computer science education, and only 1 percent of students receive it, according to estimates by the city’s Department of Education.

Now this raises several questions.

First, does he understand what Computer Science means? Doubt it but lets continue. 

Second, I think he means programming. Computer Science is a much broader discipline, from architecture to language structures.

Third, and this is a key point, coding can be counter productive. Let me explain.

In 1962 I started teaching Fortran on an IBM 709 computer to students. I first had to learn some, FAP, Fortran Assembly Programming. Recently I came up to speed with Python on an MIT MOOC. What I noticed what that the focus was on using Python to "manipulate" the solution. The underlying mathematics was not even discussed. When I did Apollo guidance calculations we used an assembly program and that was only after we had done the mathematical analyses and reduced the steps to a minimum, after all we only had 64K memory!

Over the years I have picked up probably a couple of dozen languages, depending what I needed them for. Pascal for an options trading station, C for a communications protocol, Python for DNA string analysis, SNOBOL for modelling switching networks, FORTRAN for scientific stuff, BASIC to run my old Atari, and the list goes on. More than two dozen languages, each to solve a specific set of problems. Programming is implementing a logical set of commands to achieve a result from a potential complex mathematical problem. It is a means to an end, NOT and end in itself.

Learning a language is secondary to understanding the application and its related mathematics. Cluster analysis for genomic testing, or time series analysis for Kalman Filtering. 

Thus the issue is that programming is a tool, and there are many tools available. So what are we trying to teach a student. If we had a spectrophotometer, we use it to help solve a chemical problem, not to known how to use a tool. Programming should be viewed first as a tool, not as an end.

Yet Computer Science is NOT programming. Hematologists are not Phlebotomists. 

The final issue is who are the teachers? If good programming is a means to and end and if the end is the solution of some putatively complex mathematical problem, that we do a mass disservice to students in "teaching" them to code. We need to facilitate their thinking process. Not turn them into coders.