Computer science for everyone!

Really? For everyone?

I think I agree with the idea of teaching computer science in every Utah school as presented in a recent Silicon Slopes post; however, I wasn’t sure what that means.

What would universal computer science education opportunities for K-12 students in Utah include? Afterall, computer science is a broad discipline which can cover topics as:

Algorithms and Computational Geometry
Architecture and VLSI
Data, Databases and Information Management
Formal Methods and Verification
Graphics and Animation
Image Analysis
Human-Computer Interaction
Machine Learning and Natural Language Processing
Networking, Embedded Systems, and Operating Systems
Parallel Computing
Programming Languages and Compilers
Scientific Computing

Which of these topics are appropriate for K—12? (I compiled the list above from the University of Utah’s department of computer science website.)

I would assert that, currently, only a small fraction of K—12 students participate in Computer Science as defined by the topics above. Robotics is the most obvious example where we see activity, but because of student interest and not part of a broader curriculum. Robotics is an interesting example because it encompasses multiple aspects of computer science (as defined above) including human-computer interaction, programming, networking, and embedded systems. The depth of knowledge needed for each of these will depend on the project; however, it is an example where teachers can integrate multiple projects into the K—12 curriculum.

But would an area like robotics be helpful to all students?

Perhaps a better idea is to add a “computer science” learning objective to the current core curriculum. What would be possible in science courses today?

Biology, Chemistry, Physics, could all incorporate areas such as data visualization and basic scientific computing (i.e., using computers to solve problems), but working with programming languages, compilers, parallel computing, formal verification?

Before jumping on the computer science bandwagon, we need to ask a straightforward question: What knowledge do want students to demonstrate upon graduation from high school?

My observation is that students receive very little formal training on what we would probably claim as necessary computer skills: writing using a word processor, working with spreadsheets and databases, etc. How much of the Microsoft Office (or LibreOffice or GoogleDocs or “insert your favorite, regular computer tasks here”) should students know when they leave high school? These skills are not computer science, but they are useful tools to have in one’s toolbelt.

Do schools offer “typing?” During my first university teaching position, I asked students to type their reports. One student told me directly that she went to a private school and didn’t “type.” (In a voice indicating that she believed typing was below her—this statement was made the late 90s, so computers were not ubiquitous as they are today.) To this day, I am happy I took typing in high school; it has made work using a keyboard easier. Would this be considered an essential skill needed for computer science? Typing, as taught before typewriters became extinct, was targeted towards vocational workers; has it risen in status? I think the proper term today is “keyboarding;” however, is it still treated as a vocational course? Probably so.

If we advocate teaching computer science in K-12 classrooms, we need to define what skills we want students to master accurately. These skills are not going to be determined by the computer science departments; they’re going to be set by the disciplines who have adopted technology as part of their work. In math, students should have the opportunity to explore mathematical equations by defining the function, ranges, etc., as they explore new concepts, but only after understanding how to work through the problems manually. Biology, chemistry, and physics can all implement data analysis, scientific computing, visualization, and other topics into the classroom, but it can’t be at the expense of building a basic understanding of the underlying principles. Building a solid foundation is critical before jumping into complex problems that need the tools of computer science.

I hope someone is carefully thinking this through.