Sunday, April 3

CS for All...

I commented on https://computinged.wordpress.com/2016/04/01/we-need-to-better-justify-cs-for-all/ and on reflection, I am not all that happy with the response I posted there.

There's some significant work needed to flesh out what we mean by "Computer Science for All", and I feel I could have done much better.

One issue, of course, for the computing education blog is: what does the curriculum look like? And there's just so much to cover.

But let's consider English literacy, and how we teach that: we do not cover the "great works" when teaching the language. We do not even cover more than a tiny fraction of the dictionary. Instead, we try and cover the "basics", and we keep going over those, layer upon layer.

Meanwhile, some significant number of students drop out. Students in inner city schools tend to wind up with a significantly different understanding of the language than students in farm schools or students in prep schools. And a part of this has to do with their social life and their relations with the other students. And another aspect has to do with the student's interests and the problems they see needing to be addressed in their life outside the school. And these obviously vary considerably.

So... back to "CS for All".  What are the basics?

As the first few passes, I'd say:
  • binary number system (perhaps also octal and hexadecimal)
  • ASCII character system (perhaps also getting slightly into Unicode).
  • Sequences (of numbers, of characters, of sequences).
  • Searching (needs sequences)
  • Sorting (needs sequences)
  • Files and Directories
  • Programs and Processes
  • Touch Typing  (qwerty)
  • The basics of the internet protocol - enough to understand machine addresses and network delays.
  • pixels and images
  • basic audio (d2a, a2d, wav file format, oscilloscopes)
This is obviously very rough, and leaves out the wondrous complexities of html, online gaming, email, office software, and so on. And at first blush you might even think that I'm leaving out programming or cramming that all into "Programs". But, I'm not. I think programming comes in to some degree as a part of the treatment of these topics.

Also, this would not be all taught in one class, but would be the desired end point after years of elementary school and high school instruction. And a part of the emphasis should be on "learning by doing" because trying to get students to absorb all of this on a purely theoretical basis is just asking for problems.

More specifically, when we place an emphasis on programming as an isolated concept we lose all the motivation for why someone would want to learn such a thing. But, also, I think that some amount of programming should be brought in when teaching the above. And, perhaps, some actual formal programming instruction (syntax, for example) should be included.

And obviously there's room for improvement here, as well as room for making this all boring and superficial. 

Still, when I think about computer literacy, the above topics are - roughly speaking - the topics I assume a literate person would understand.

Of course, that leaves us with a huge problem: most of our teachers do not have the background for this. So, how do we get from here to there?

It seems to me that this will require teachers adopt a different role. Instead of being subject matter experts, they should be instruction experts. It seems to me that the job of the teacher should become teaching study skills to the student, and that we need curriculum designed to walk the student through the specifics of what they will be learning. We should stop demanding that teachers must be masters of everything and let them instead focus on what they do best: education as a specialty. (It is quite true that some subject matter expertise can help in relating the subject to the student, but it's also quite true that the instructors will pick this up some of this as they go along. This will be especially true for pre-requisite subjects which are covered frequently.)

This does leave us still with some problems, one of which is designing curriculum that satisfies these needs. But we have plenty of subject matter experts - we just need to put some effort into closing the loop (and some care in dealing with the problems which of course always arise when dealing with large numbers of people).