Archive for June, 2010

Programming Methods Course Outline v1

June 21, 2010

I have started on an outline for a programming methods course for teachers.  I am designing the course to be as general as possible so it will be suitable for elementary or secondary teachers.  This outline is based on my 10+ years of experience teach programming to middle school and high school students.  Since I teach in Montana and programming teachers are not a dime-a-dozen in Montana there has not been a lot of teaching technique comparisons in my programming teaching career.   As a result this outline is from a very narrow experience base.   So please give comments/recommondations/objections.

The material is posted on my Skydrive account

http://cid-c10376c3512f464d.office.live.com/browse.aspx/.Public/Programming%20Methods%20Course

Since I use Skydrive once in a blue moon I hope it is accessible.

At the moment the folder contains the primary file “Programming Methods Course” and 5 files of references.  I will slowly expand both as I find more references and get more ideas.  Most of the references are not my writing.  I have tried to give credit to the authors when posted.

Programming education for teachers

June 16, 2010

One reason I started this blog was to provoke myself into thinking more and thereby, hopefully, doing more.  One of my favorite thinking topics is the status of programming education for K – 12 educators.  Notice I said “programming”, not “Computer Science”.  “What is Computer Science?” gets a little bit out there for my tastes and time.  Programming sort of narrows things down a little.  Some really cool languages are being put out there to teach programming to kids.  The list includes Kodu and Small Basic from Microsoft, Alice and Scratch from MIT, Greenfoot from the Univ of Kent, variations of old school Logo, Python and probably others I do not know about or have forgotten, all touted as teaching languages for kids.  Then there are the languages that are used as teaching languages but are also mainstream programming languages; Java, VB, C#, C, etc.  There are always the discussions as to which is best programming language to teach kids with.  In one of my previous blogs, My First Programming Reviews, I discuss and review the languages I am most familiar with.  What seems to be missing in all this is how to teach programming with these various languages.  There are tutorials on how to write programs in all of these but a tutorial does not show a teacher methods to present the concepts to the student.  I also teach math.  If I am introducing a new math concept I have several different methods of teaching a concept.  I usually have several different problems of different types to reinforce the concept.  Many, many years ago when I just a pup in college learning how to be a math teacher I took a required course for prospective math teachers from the Education Department called Methods of Teaching Secondary Mathematics.  The course gave new math teachers a starting point on how to teach math.  The course did not teach math, it taught how to teach math.  In one of my more idle moments I started looking at the Education Departments of Montana colleges.  One college offered a CS minor in Education but had not quite figured out that business applications is not computer science.  A couple offered a CS minor for Education but they were just straight CS minors with no “how to teach CS” involved.  My own alma mater, the University of Montana, offers nothing for education majors.  How has Computer Science/Programming missed the teacher education boat so completely?  Or is it the fact that it is Montana that makes it look so bad?  I did look at a couple of bigger universities in the northwest with the same results.   So in a moment of absolute stupidity I convinced myself that I could write an outline for such a course.  This outline will cover the topics I wish I had known before I started teaching Programming.  As stated before this course is not intended to teach Programming, but is intended to give CS majors or computer literate Education majors a starting point to begin teaching with.  To those of you that read this blog and are familiar with teaching high school Programming, please give suggestions as I build this thing.  Perhaps I can convince UofM to actually teach the course.  If nothing else, writing this will get some interesting dialog going.  So stand by for irregular posts as I build this thing through the summer.

How should we teach programming?

June 2, 2010

Alfred Thompson’s Computer Science blog is on my daily read list.  It is always packed with useful discussions and great links.  Since I use Small Basic with my Programming I classes I was real excited to see a link to a couple of teachers that had written some material called Small Basic Recipes.  I was a bit stunned by what I found.  The two teachers had built a series of templates made of Small Basic program comments.  The students take these templates and build the code to fill in the comments.  The objective is to guide the students in the direction needed to write the code for a series of simple projects.  This comment template is so counter to everything I attempt to teach that the fact someone would go to the large amount of work required for this project totally shocked me.  Maybe the fact I am seeing this project out of the overall curriculum context makes it look like such a poor idea to me.  The templates are great, if all you want to do is teach kids how to write Small Basic code.  I, on the other hand, think writing the comments is the very basis of teaching and learning to program.  If you can write the comments correctly and clearly then the code should be a trivial exercise done by unimaginative people.  The comments are the key to teaching programming, not the code.  Given well written documentation and comments a programmer should be able to construct the code in their language of preference.  The first reading assignment I give my Programming I students is The Art of Code Documentation by Drew Sikora.  The article discusses the importance of documenting and commenting the code.  If I had the time I would love to design a semester around the concepts in this article.  I think a semester of writing documentation, comments and pseudo-code would the perfect way to start learning programming.  (I also think it would be as exciting as watching paint dry.  Banging out code and getting something to happen is just plain fun at times.)  I could care less if my programming students can generate code by the mega-line.  I want them to be able to take a project, break it down into manageable parts, visualize what needs to be done, and then write a series of comments that gives that visualization a foundation or framework.  In my opinion, programming is not typing code; it is designing something that can be adapted to code.  I do think there are some possibilities in the Small Basic Recipes as examples of the comments-to-code step and perhaps that is the intent when placed with-in the overall concept of their curriculum.  But as a stand-alone project I simply believe it is the absolute worst way to teach kids to program.

My comments here and the approach that Small Basic Recipes uses does bring up the question inquiring minds want to know – what are good pedagogies for teaching programming and what are bad ones?  Since there seems to be a major shortage of methods course for teaching programming in university Education departments (at least that I can find) it is a wonder we have any programming teachers with any consistent methods.  But that is a subject for a whole new blog.