The Computer Science Teachers Association recently had a blog post about a recent development in high school CS teaching, Why Counting CS as a Foreign Language Credit is a Bad Idea.
When these policy makers look at schools, they see that computer science is not part of the “common core” of prescribed learning for students. And then they hear that Texas has just passed legislation to enable students to count a computer science course as a foreign language credit and it seems like a great idea.
But all we have to do is to look at Texas to see how this idea could, at the implementation level, turn out to be an unfortunate choice for computer science education. Here are the unintended consequences
- If a course counts as a foreign language course, it will be suggested that a new course must be created.
- If a new course is created, chances are that it won’t fit well into any of the already existing course pathways for college-prep or CTE.
- This new course will be added to the current confusing array of “computing” courses which students and their parents already find difficult to navigate.
- There will be pressure brought to ensure that that course focuses somehow on a “language”. For the last ten years we have been trying to help people understand that computer science is more than programming. Programming/coding is to computer science as the multiplication table is to mathematics, a critical tool but certainly not the entire discipline.
- If this new course is going to be a “language” course, we have to pick a language (just one). And so the programming language wars begin.
I agree that computer science should count as a math or science credit, not a foreign language credit. CS and foreign language use different mental skills. For one thing, the “grammar” taught in programming languages is deliberately very much simpler than natural language grammars—so much so that there is little transference between learning on and learning the other. Also, foreign language courses include a lot of memory work (particularly vocabulary, but also conjugation and declension patterns in many languages), while beginning computer science courses are more about learning how to design and debug—that is, to develop problem-solving skills, not memory skills.
Foreign language instruction is also very important, and replacing it with computer science would not be helpful for the cultural understanding and ease of relations between different countries that is an important reason for teaching foreign languages. Decreasing foreign language to make room for computer science is short-sighted.
The most sensible classification for CS (if it needs to be classified in the narrow categories that guide secondary school administrators) is with math. The reasons for learning CS are much the same as the reasons for learning algebra, both in terms of the underlying set of mental skills that one hopes would transfer to other fields (but usually don’t) and the usefulness as a base for future study in STEM fields.
I think that the claim “Programming/coding is to computer science as the multiplication table is to mathematics” is a bad analogy. Closer would be “Programming/coding is to computer science as algebra is to mathematics”. Programming is a much larger and more complicated skill than multiplication, and it underlies most of the rest of computer science. Multiplication is primarily a memory skill (multiplication tables and a simple algorithm), while programming is primarily a problem-solving skill.
I also agree with the concern that making CS a “foreign language” skill will put even more pressure on high schools to adopt a common programming language. The College Board AP test has already blessed Java, which I think is a poor choice for a first teaching language (though I know that many computer science professors like it as a first language, for many of the same reasons I dislike it). I prefer Scratch followed by Python, as I’ve explained before on this blog.
Standardizing the way computer science is taught would be a moderately bad thing, as there is no “one true path” that produces great programmers and computer scientists. I see value in having a variety of different pedagogical approaches to teaching programming (and computer science), as the first few programming languages one learns tends to color the way one things about programs for several years. I believe that a diversity of different approaches to programming is important to the health of the computer science both as an academic pursuit and as an industry—and different initial programming experiences is as important to that diversity as different people are.
Note: I tried to post a comment on the original post, but I kept getting
The server encountered an internal error and was unable to complete your request.
Premature end of script headers: mt-comments.cgi
If you think this is a server error, please contact the webmaster.
You’d think that the Association for Computing Machinery could keep a blog running, but I guess their disdain for mere “programming” extends to the programmers who set up their website.