Archive for July, 2020

What Programming Language Should I Teach Beginners?

July 25, 2020

Those of us that have taught programming for a few years have seen this before.  I have been teaching programming for about thirty years and have seen the question asked for all of those thirty years.  And, believe it or not, the answer is always the same, no one can answer convincingly.  Everyone is an advocate of the language they are the best at and at the level they teach at.  I have seen everything advocated; C, C++, Java, Scratch, Python, HTML, and at least ten others.  I, on the other hand, have the answer.  I have known the answer for years and have been teaching the perfect beginner programming language for all those years with no change.  I consistently teach, without fail and without deviation, the language I am most comfortable teaching.  (OK, I deviated once and taught Java for a couple of semesters.  Bad, very bad.)  So what language am I most comfortable with you may ask (or you may not. Whatever.)  That most comfortable language has changed through years and is not consistently one language.  I know, that makes no sense.  How can my most comfortable language to teach be more than one language?  Simple.  What I am comfortable teaching rookie freshmen is totally different than what I am comfortable teaching non-rookie juniors.  Totally different.

Now let me get to the real topic of this post, teaching beginning programming remotely.  Does that change what I am comfortable with teaching?  Remote teaching requires I not only be comfortable with the language, but the language must have really good resources that are easy to find and easy to understand. In face-to-face programming classes I am there as an instant resource to help troubleshoot problems.  This does not work too well in a remote world.  Zoom does have limitations.  So using languages with good, clear resources is much more critical.  Resources that someone learning the language can actually understand.  

I encountered an example of this last year.  I teach a game making course with Unity.  It is primarily an software course with a little C# programming thrown in.  So last year I figured to give the kids a broader spectrum on game engines we would look at Unreal Engine.  Unity has many tutorials on their website and on YouTube designed for the total beginner.  Unreal Engine has nothing for true beginners on their website and a few on YouTube and those few, at least the ones I could find,  are not up to the quality of what was available for Unity.  Throwing Unreal Engine at a student unfamiliar with a fundamental feel for how game engines work would not be good.  Teaching Unreal Engine remotely would be a disaster.  

So where does that put me in the way of beginner languages?  My big three have been Scratch, Small Basic and Python.  I do throw some odds and ends like Visual Basic and Alice in but for the most part I do those three.  First semester Scratch and Small Basic, then second semester, depending on the students, is either more Small Basic, some Alice and some VB or a dual-credit Python course.  I have some kids that just want to have some more fun with easy programming and have no interest beyond that, I have no problem offering them another simple programming course.  Some of those kids get the bug and hang around for a third and fourth semester.  I have other kids looking at directions where the more intense Python course is the way to go.

Python and Small Basic should be easy to teach remotely.  Lots of high quality resources and texts.  Scratch on the other hand makes me nervous.  It may seem a bit odd that the simplest language may have me thinking the most in regards to remote teaching.  It is the language I teach the least, another teacher had been teaching the Programming I course for many years.  The drag-and-drop format is much harder for me to follow for debugging purposes.  Things get scattered all over the window and I cannot see a lot of the code at once.  I think I have built a comfort zone that includes line-code languages only.  I typically have not used a lot of resources with Scratch when I did teach it so I have to go find some stuff.  There is undoubtedly a massive amount of stuff out there, this is a language designed for beginners after all.  A new challenge.

The remote thing has thrown up a whole new set of challenges to teaching I have never dealt with; Zoom, recording lectures, writing on a screen, students having a laptop/webcam available (Tried to buy a webcam lately?  Good luck.), having quality resources for the student they can and will read on their own (Students read their math book or any textbook?  Another “good luck”.) and being able to present over Zoom in such a way that the kids do not tune out more than they would in a face-to-face classroom.  Any comfort zone teachers have built over the years is toast.  Oh well, keeps the brain young.