How to Teach Computer Programming

There is very little emphasis these days on teaching programming, in spite of the fact that technology is becoming more and more a dominant aspect of our lives. Perhaps this is because many programmers are self-taught, used to working alone on projects, and therefore the assumption is that students will learn programming "as they go" or "on their own". This is unfortunate because I think that this aversion to traditional instruction and the preference for "self-taught" programmers leaves some people who want to learn in the dust.
I have lately become interested in rectifying this problem. A few of my clients have discussed the option of learning programming through tutoring sessions with me. I think that if I had been able to avail myself of such an option when I was first learning to program, I might have had a much easier time in learning how to properly use computers as the powerful tools that they are.

I believe, however, that this is very much an open subject. One thing that I think is not useful is the debugging marathons that some computer science tutoring becomes. Debugging code is an important skill to learn, but, like proofreading an essay, it focuses only on the functionality of the project rather than the deeper concepts and outcomes that are desired. What do you want the program to do? How do you want the program to do it? These kinds of questions are the best ones to ask and answer.
I am also of the opinion that the best direction in which to go is teaching students Python. I think this language strikes the right balance between high level and low level and lends itself to rather natural syntax and organization. Unlike many languages, the first program you would attempt to write in Python is liable to work right away. That user-friendly feature of the language and the well-designed environments such as iPython Notebook makes me think that this is the best language for someone hoping to learn programming to learn.

I am not a computer scientist and I do not have extensive experience tutoring this subject. I think this is something of a New Frontier of sorts, so it would be very interesting to hear from people who have various ideas on what would or would not be desirable in tutoring computer programming. Please let me know!


Like you, I teach computer programming, but I do not hold a degree in computer science.  I, too, am a big fan of Python.
My programming students currently fall into two distinct categories.  On the one hand, I have rather gifted middle and high-school students, who are seeking enrichment.  They tend to be motivated enough that I can give them "homework" which they will attempt to solve on their own, between our weekly sessions.  The problems are simple ones, but it makes them apply what they have learned without my prompting.
My other student is a Silicon Valley test engineering contractor.  He knows a lot about networking hardware, but surprisingly little about programming.  He is trying to automate some of the test engineering jobs that his technicians currently do by hand.  He is learning Python from me, but he really WANTS the majority of our time to be spent debugging code, and I feel obligated to accommodate him.
I have an MS in Computer Science and 40 years of experience.  I am teaching both adults and children to program in Microsoft Small Basic first.  I am teaching them Design at the same time.  I know many languages; perhaps I should learn PYTHON too.  You definitely do not want to start with JAVA or C#. Consider this when teaching programming; a good program must have a good design, aka blueprint.  You cannot build  a building without a blueprint. Testing is an intricate subject in itself since there are so many kinds of testing, and a good programmer should know that too. You could teach an entire course in Testing.
Hi, I really appreciate those Instructors that really know how to teach programming language. Cause you see, most of the programmers i know don't have a talent in teaching programming language. They are very smart and know most of the codes, they know how to code but they can hardly explain when I ask them how they code goes..
The tool in which you learn concepts is really not important with a grain of salt. Yes with Java you lose the hardware control, the pointer arithmetic, the true linked list, and so forth. Most languages are moving away from this paradigm. There's nothing wrong with beginning with Java. There is a layer of understanding you may or may not lose from starting with a Java over a C, but the concepts are still present. I would definitely recommend python as a starting language (and ending for that matter). It makes use of a GC similar to Java. Is it important to learn C or other lower level languages, probably, but that isn't to say if you learn Java first you're hell-bent for disaster. Languages are tools which are used to solve problems, some tools have advantages over others across contexts. If your goal is web development, pointer arithmetic is not particularly pertinent. If you want to be a hacker, sure I say C, GNU, Linux, ASM is imperative. 
if (isMyPost) { }