Monday, October 24, 2011

Does a Teacher of Programming Need to Know Turing Machine?

I learnt COBOL programming through a few months of in-house training in Datamatics Consultants, a software consultancy company in Mumbai in 1984. I moved on to other programming languages, notably Wang VS Assembler (close to IBM 360/370 Assembler)1 & 'C', through self-learning with some input, at times, from short company sponsored training programs. "The C Programming Language" by K&R book was perhaps my most important teacher of programming.

I don't know Turing Machine, NP-hard, NP-complete and a host of such Computer Science/Mathematics concepts. I have not read the influential computer-science text Structure and Interpretation of Computer Programs, by Abelson, Sussman, and Sussman: http://mitpress.mit.edu/sicp/. But I have read hosts of other books on Programming (specific computer language like C++, Java oriented), Unix, OOAD, Design Patterns, Databases, Networks, Operating Systems, ... besides countless manuals on processor instruction sets, computer hardware architecture, software design, OS and Programming references & guides ...

So I am clearly not a Computer Science guy :). But I consider myself to be a strong computer software technologist with many, many years of international design and programming experience in areas like process control software, networking (mail gateway, LAN OS, Videotex, Internet profiling etc.), windowing, database oriented business apps etc. Over time my main technical expertise was in Object Oriented Analysis & Design and C++ programming. Of course, it may, in all probability, have helped me do a better job if I were a master of Design & Analysis of Algorithms & Computational Complexity etc. But I managed to get by without knowing these Computer Science subjects and, if you will allow me to blow my own bugle, my software work gave a lot of satisfaction and happiness to my managers & customers/users.

I am not saying that a software professional should not be a master of Computer Science. It will be great if he is. But there are lots of very capable software professionals who are not Computer Science masters.

With that background, let me pop a couple of questions on the need for a teacher of programming to know Computer Science theory:

  • Does a teacher of programming need to know Turing Machine?

  • Does he also need to know NP-hard & NP-complete concepts?

My view is that the answer for both the questions is NO. It will help if he knows them but it is "not necessary for him to know".

But if the person has to be a teacher of Computer Science courses on Design & Analysis of Algorithms, Computational Complexity, High Performance Computing etc. then, IMHO, he may have to know such Computer Science theory topics well. [I cannot say he definitely will need to know as I am quite blissfully ignorant about Computational Complexity and High Peformance Computing, and have introductory knowledge of Design & Analysis of Algorithms.]

I also need to mention that I am given to understand that in many elite tech. universities like IITs they don't have 'programming' courses. So they have no notion of a 'teacher of programming' at all. But in many commoner tech. universities they certainly have programming courses e.g. C, C++, Java, Web programming etc. and so have 'teachers of programming'.

Notes
  1. "VS Assembler is very much like IBM mainframe macroassembler, with sophisticated macro features. It is virtually identical to IBM 360/370 assembler, and mainframe programmers make the transition quite easily." Source: Wang VS Languages, http://wangvs.ning.com/group/newvsreference/forum/topics/vs-languages

No comments:

Post a Comment