Friday, February 17, 2017

You’re Teaching the Wrong Programming Language

No, really you are. If someone hasn’t told you this yet it’s probably because too few people know what programming language you are teaching. Of course someone probably thinks you are teaching the right language. After all you’re a smart person and you chose it. Asking what programming language should be taught first is probably the best way to start an argument a discussion among computer science educators.

Should it be a block programming language? Of course it should because the cognitive load of traditional programming languages is too great. Of course not because those languages are too limited.

Should it be Visual Basic? Of course because it is friendly and easy to create nice GUI applications. Of course not because BASIC == BAD.

How about C++? Great as it lets you get right to basics. Of course not – have you seen the pointer errors?

Scheme/Racket Of course because functional languages are more in tune with how we teach mathematics. Of course not because they are impractical and not real world.

Java? No, too much cognitive load. Of course, great preparation for AP CS.

Assembly language? If I had a dime for every time I read that suggestion on a site like reddit or slash dot or the like I could buy a pretty good meal. But talk about cognitive load!

Need I go on? Probably not. You get the idea. There are good reasons to use and good reasons not to use most programming languages. Mike Zamansky took both sides on several languages recently. Starting with scheme and Selecting a starting language - why not Javascript Yesterday in conversation I heard some good arguments for Python which seems to be gathering steam in a lot of schools. Aman Yadav, and Steve Cooper talk about block programming languages in a recent CACM article. Fostering Creativity though Computing

Everyone is an expert. What’s a teacher to do? I’m pretty convinced that a good teacher can do a good job teaching students using almost any programming language if they know it well and teach it well. I worry about less experienced teachers though. Frankly I am not sure even the best programming language, assuming one believes such exists, will work as well with an inexperienced teacher as a difficult language will work with an experienced teacher.

My big worry is not so much about the right language or the right curriculum or the right text book as it is good preparation for the teacher. We’re really rushing a lot of people into teaching CS who don’t have a deep understanding of computer science and software development. How much can they really learn in a 5 day or even several week long professional development session?

I’ve been working with some people to come up with licensing requirements for CS teachers in my home state. I like what we are coming up with but I really wonder how we’re going find or how we’re going to develop teachers who meet all of the expectations we are setting.


Garth said...

Referencing your second to last paragraph - yup. (Some day when I decide to finish that EdD degree I want to use that word in my dissertation.) I am in the middle of that discussion here in Montana. For some weird reason the university folk think a practicing teacher is going to drop everything to come back to school to get a CS certification by doing a complete CS minor. So the discussion is what is the absolute minimum an in-service teacher needs to be able to teach a viable beginning CS program. We have agreed we are not even close to agreement. I say a good CS methods course and a willingness to put in the hours to fill in the rest. The university folk are saying 45 credits of CS in face-to-face classes. My suggestion will get teachers teaching CS and is affordable to teachers. Theirs is just plain stupid. Most Montana schools offer 1 or 2 classes on CS/programming. It is simply not worth a pre-service or in-service teacher's time or money to get the certification if it is a pain. I admit my plan is just a bit sketchy but if we start with a good methods course then build on-line programs that can be done by the teacher during the school year we might be able to build a pretty good core of CS teachers able to teach that 1 or 2 courses. Nothing fancy but enough to get things moving, enough to get a teacher started where they can then build their own knowledge base.

Mike Zamansky said...

I figure on doing at least one more post - on NetLogo. I probably won't do one on Python as it seems like there are plenty of other places with Python for intro is pretty well documented (although I will chime in that it is one of my go to languages and I do like it for intro courses in many cases).

I'm not specifically super concerned about curriculum but I am concerned about general learning and using resources - with the resources, a good, well prepared teacher can make a good class while even the best curriculum won't save a bad or unprepared teacher.

Anonymous said...

These teacher prep conversations are always interesting. That definition of "prepared" to me is very slippery. Montana has about 180 high schools. 132 of those schools have less than 200 students. What is a "well prepared" CS teacher in those schools? Getting a teacher with a CS major or minor is out of the question. They do not exist in any real numbers, especially ones in education. Almost every teacher in a school that size has to be dual major in primary fields. So to me a "well prepared" CS teacher is one that knows what sequence, conditionals and loops are, is willing to teach a CS/programming course, is willing to improve their skills over the years and willing to build a CS program. A larger school with a well establish CS program on the other hand will have a completely different concept of "well prepared". That concept of "well prepared" has to be super flexible.

Garth said...

Opps, I forgot to put my name on that last comment. I hate Anonymous.

Alfred C Thompson II said...

Even without the name I was pretty sure that comment was from you Garth. I'm starting to recognize how you think. :-) And I appreciate your comments.

Garth said...