The Computer Science Teachers Association invites us to comment on the New CS Curriculum Standards (Draft for Public Comment), which is a draft of computer science education standards for K–12. I was hoping to find a clear, well-reasoned document that clearly set out what children should be learning about computer science—something I could point teachers and administrators to and say “that’s what you should be doing.” I also wanted something that parents could read and see whether or not their children were learning the right stuff.
I was disappointed.
The draft is 68 pages long, and the people who wrote obviously don’t know how to use computers, since the Table of Contents has “?” for all the page numbers. That made me immediately doubt the care they had put into preparing this draft, since even the crudest of word-processing programs is capable of getting that right. What were they thinking, to put such sloppy work out for comment?
They divide their recommendations like Gaul into 3 parts: K–6, 6–9, and 9–12, with the 9–12 level further subdivided into three courses.They also split their recommendations into 5 strands: computational thinking; collaboration; computing practice; computers and communication devices; and community, global and ethical impacts. [page 14]
The lowest level can be summarized as “use technology and have fun”. Not much harm there but not much content either. Actually, the Computational Thinking standards for 3–6 are not bad, other than these two
- Participate in a simulation to act out the solution to a local issue.
- Understand the connections between other fields and computer science. [page 18]
Participating in a simulation around a local issue has nothing to do with computer science. It may be a fine pedagogic technique, but it is not a standard. Understanding the connections between other fields and computer science is asking a lot of 6th graders, since even most computer science professionals will be hard pressed to come up with more than a few trivial ones.
The second level seems to stress “community-relevant issues”, which seems to me to be more a matter of how teachers motivate the learning than a proper standard for a computer science standards document.This is a recurring problem throughout the document: the authors seem to be throwing many different (and perhaps incompatible) “desirable things” into the document, paying no attention to whether the things are computer science standards, pedagogic techniques, social engineering, or examples. A standards document should provide lists of facts or skills that students should learn, and it should be straightforward to verify that the facts or skills have been learned. It should not dictate teaching or learning styles. Examples should only be provided to clarify the meaning of standards, not offered as standards themselves.
The third level has 3 courses: 3A for everyone, 3B the Computer Science Principles course, and 3C topics in computer science (for which the AP computer science course is offered as a possible model). The notion of lower-level entry to computer science than the current mainly-Java-syntax AP course is good, but the standards are again not well thought out. Why does everyone have to be able to convert binary, decimal, octal, and hexadecimal? That is a useful skill for a computer engineer who has to pack and unpack bits to communicate with hardware, but who else really needs it? And this is a skill to be required of all students???
Things like “Describe the concept of synchronization as a strategy to solve large problems” [page 23] really irk me—synchronization is an important concept in parallel processing and hardware design, but it is not “a strategy to solve large problems,” nor would a student describing it as such give me any confidence in their ability to use apply the concept when it is important. Perhaps the authors meant parallel processing, rather than synchronization?
Similarly, “Describe how computation shares features with art and music by translating human intention into an artifact” [page 23] does not deserve mention as “computational thinking” and is certainly not the same class of concept as “Use modeling and simulation to represent and understand natural phenomena,” [page 23] which is one of their better standards.
I also object to their reduction of computer science to just large programing projects. I don’t believe that it is true that “Significant progress is rarely made in computer science by one person working alone.” [page 15] Many of the great breakthroughs in computer science came from one person’s insight. It is true that large programming projects now often involve big teams, but a lot of very important software including most programming languages in use today started as a one-person effort, not as a huge team. I’ve moaned on this blog before about the overuse and misuse of group work in K–12 education, and it saddens me to see pedagogical styles enshrined as curricular standards. This is not just an accidental intrusion of pedagogic style into the standards—the authors feel strongly about the matter, referring to
other unfortunate perceptions of computer science as a solitary pursuit, disconnected from the rest of the world and of little relevance to the interests and concerns of students.
We address these concerns by distinguishing five complementary and essential strands throughout all three levels in these standards. These strands are: computational thinking; collaboration; computing practice; computers and communication devices; and community, global and ethical impacts. These strands not only demonstrate the richness of computer science but also help organize the subject matter for students so that they can begin to perceive of computer science as more engaging, relevant, and more than a solitary pursuit. [page 14]
Very social people will undoubtedly applaud this change—there is a meme in education nowadays that treats introversion as if it were perversion, and solitary pursuits as not just different, but evil. This sort of prejudice, common as it is, does not belong in a standards document.
I even have trouble with the definition of “computational thinking” that they adopt (borrowing in turn from Barr and Stephenson:
“CT is an approach to solving problems in a way that can be implemented with a computer. Students become not merely tool users but tool builders. They use a set of concepts, such as abstraction, recursion, and iteration, to process and analyze data, and to create real and virtual artifacts. CT is a problem solving methodology that can be automated and transferred and applied across subjects. The power of computational thinking is that it applies to every other type of reasoning. It enables all kinds of things to get done: quantum physics, advanced biology, human-computer systems, development of useful computational tools.” [page 15]
The first part of this is excellent, and if they’d stopped after “artifacts” I would have been happy with the definition, but “thinking” is not a “methodology” nor can thinking be easily automated. They ruin their good beginning by wandering off into fuzzy statements and irrelevant examples (quantum physics may need computational thinking, but it is hardly going to inspire legions of students to want to do that thinking).
The inclusion of ethics and responsible use and dissemination of information is a good subject for schools. Their discussion on this strand seems eminently reasonable, though likely to get perverted into arbitrary, authoritarian rules when actually implemented at many schools. Of course, good standards in other fields often get badly implemented, so I can’t fault them for that. The ethics and social impact standards seem the best thought-out of the ones in the document.
Their “Computing Practice” strand seems weak. Detailed career guidance defining the currently fashionable buzzwords used by human resources departments does not seem to me to be a core standard.
K–12 students must also be introduced to the variety of careers that exist in computing, from IT Specialist to Systems Analyst, Programmer, CIO, Computer Engineer, Software Engineer, and so forth. By the time they reach high school and are selecting career or educational paths, students should be well informed about their options to make intelligent decisions. [page 16]
I doubt that one in 10 of those currently employed in the computer industry could make consistent distinctions between the job titles, many of which have mutated in different companies as some titles got arbitrarily compensated differently from others. What about other titles I’ve seen like “happiness engineer” (used by Automattic) or “genius” (used by Apple)?
I’m also not convinced that the skills listed in the computing practice strand are enduring durable skills:
Computing practice at the K–12 level must therefore include the ability to create and organize Web pages, explore the use of programming in solving problems, select appropriate file and database formats for a particular computational problem, and use appropriate Application Program Interfaces (APIs), software tools, and libraries to help solve algorithmic and computational problems. [page 16]
The particular skills listed here, while undoubtedly useful skills, seem arbitrarily chosen from among a much larger set of skills. (Why web pages and not PDF documents or blogs? Why APIs and not other interfaces?) The core concept, exploring the use of programming in solving problems, is very important, but burying it in a list of much more minor concepts seems wrong.
Some of the detailed standards seem to me inappropriate (all the collaboration standards, for example) or not appropriate for the age groups, like expecting all 3–6 graders to use cell phones to access remote information, or to identify different computing careers, or “be able to evaluate the accuracy, relevance, appropriateness, comprehensiveness, and biases that occur in electronic information sources.” [page 19] Certainly they should be taught about those things, but few college-educated adults are capable of doing what the standards call for 3rd graders to do.
The report itself is full of educator jargon: “The learning experiences created from these standards should be relevant to the students and should promote their perceptions of themselves as proactive and empowered problem solvers.” [page 13]
A standards document is not the place for random musing about how you would teach (a blog is a fine place for such rambling). A standards document should focus only on what must be taught (or, more properly, what must be learned). Lists should be properly parallel, not mixing tiny examples (like converting octal numbers) with major concepts (like modeling and simulation).
Quite frankly, if a student had turned in this draft of a standards document, I’d cover it with markup for about a third of the document, then get so irritated that I’d send it back to them telling them to cut out the bullshit and turn in a document a fifth the size. I’m depressed that this is what passes for professional thinking by computer science educators. It reads like it was written by a committee (9 authors, no wonder!), where any random thought was included and no one individual was willing to take the responsibility to cut out the gratuitous examples and off-topic points and make sure that the writing was clean and to the point.
Perhaps it is just as well that these people were writing computer-science education standards, since there is essentially zero chance that such standards will ever be adopted, so the damage they can cause with the crappy thinking and writing is limited. Of course, it is possible that they could have done much better, but didn’t want to waste the effort on a document that was destined to be filed and forgotten.
If you have a strong stomach, it might be worth your time to send them detailed critiques, but I have already spent far too much of my life correcting low-quality student writing, and I don’t have the patience or altruism needed to do it for free.