The Des Moines Register reports that the state of Iowa is contemplating requiring computer science coursework as part of its core high school curriculum. The team of science, technology, engineering, and mathematics experts who is recommending this to the state claim that requiring computer science coursework in Iowa high schools is a “very bold recommendation”.
The article quotes various people making statements about what this computer science coursework would tentatively include, suggesting that their rough plan is to convey to students
- how computer systems work
- how to write computer programs
- computer science topics that reflect current industry needs
The first two points have been making appearances in K-12 education at least since the 1980s, in the form of Seymour Papert’s methodologies using Logo and Turtle programming, and more recently through the MIT Media Lab’s Scratch programming initiative. [I myself was introduced to computer programming at least in part in an elementary school Logo/Turtle programming class circa 1990.]
The third point sounds delightful, but, if formalized into published curricula, might be impractical. Core computer science knowledge like data structures, algorithms, and automata theory are always in style, but keeping up with the cool, hip programming languages and tools is evidently a challenge for textbook authors and for the teachers who adopt their books. This has been true in college-level computer science academia, and I imagine it would be at least as true at the high school level. It might be easier to pick some reasonably current set of technologies, like maybe Python (24 years old), Subversion (14 years old), and GNU Emacs (30 years old), and assume that the ideas behind those technologies will still be relevant when the students graduate.
[How do college computer science graduates cope with having not been taught the most current languages and tools of the trade? Despite new things coming out at a frenzied pace, programming languages that actually see much real-world use are still catching up with the core ideas of languages like Lisp (57 years old) and ML (42 years old), while typically retaining a great deal of syntax in common with C (43 years old). Learning those three languages, or some other set of similar languages, gives abstract knowledge more than sufficient to pick up any language the software development industry is likely to throw at its practitioners for the foreseeable future. For that matter, you could probably still spend a fifty-year-long career writing code in nothing but C, if you tried!]
An understanding of computer systems ought to permeate much serious decision-making in society; while some of these students may indeed discover their vocational calling in a high school computer science class, even non-programmers should wield enough computer science knowledge to make sound decisions on election day, if nothing else. So cheers to all of the state education departments who are requiring the next generation to learn a bit of computer science! But at the same time, I wonder, after all of the K-12 computer science education groundwork that was laid in the 1980’s… why did this take so long?