By Mehran Sahami
Professor and Associate Chair for Education in the Computer Science Department, Stanford University, and Co-chair of ACM's Education Board
Computer science educators were ecstatic when, in January of this year, President Barack Obama announced the CS for All initiative in his State of the Union address. This initiative calls for over $4 billion in funding to greatly expand access to K-12 CS education, including funds for teacher training and curriculum development. The initiative represents a watershed event resulting from the efforts of many organizations and individuals working to broaden access and participation in computing.
The announcement of such a significant initiative was not without trepidation, as some questioned whether CS should be taught to all students and even if such an undertaking was possible. Indeed, the goal of making CS education available to all K-12 students is no mean feat and will require significant, ongoing commitments from government, academia, and industry. But the reason for taking on such a great challenge is that it presents such a tremendous opportunity for future generations.
To begin, let's dispense with the notion that the "opportunity" in teaching CS is simply to train an army of programmers. While there is no question that there is a huge need for information technology workers--estimates often place this figure at over 500,000 unfilled IT positions in the U.S. alone--computer science is far more than just programming and the end goal of a CS education is not just to produce software engineers. Indeed, schools don't teach students to read books and write essays analyzing them because we are trying to create a cadre of literary analysts. Similarly we don't teach physics because we have a desperate need to expand the search for dark matter. We teach these subjects in school because they provide students with frameworks to think critically about and better understand the world in which they live. Similarly, learning CS is not just about giving students the skills to build the next mobile phone app. Much more significantly, learning CS helps students develop systemic thinking skills for problem solving, practice logical deduction, and learn to express themselves with greater precision and clarity.
Moreover, as technology becomes increasingly ubiquitous in our lives, having a better sense of its promise and perils is essential for everyone. An education in computer science at the K-12 level allows students to better understand the capabilities and limitations that computing has to offer. This, in turn, facilitates more informed decision-making and an ability to more deeply consider questions like how vulnerable is the information someone shares online, what are the safety considerations in autonomous systems like self-driving cars, and how can information technology be harnessed to address issues of poverty and inequality. This is the reason we don't talk about teaching CS as just teaching "programming," but rather as a means for students to develop "computational thinking" skills.
Of course, it doesn't hurt that exposing students to computing early in their education may also inspire some of them to want to become software developers and fill the hundreds of thousands of jobs that desperately need their skills. It's a wonderful benefit that expanding computing education opportunities to all schools will help to overcome barriers that make CS classes only available in roughly half of current high schools, with only one in four schools currently offering an actual computer programming class. And it's delightful that having all students learn CS will help to broaden participation in computing, especially among women and underrepresented minorities, who research has shown have historically had less exposure to computing than their white, male counterparts by the time they get to college. In a survey at Stanford, for example, 64% of women who had taken at least one computer science class reported that they would have considered majoring in CS more strongly had they taken a computing class earlier in their academic career.
Each of these factors alone would be a great reason for CS to be taught to all K-12 students. Giving students the opportunity to develop their computational thinking skills will help them in a variety of careers, even if they don't become software developers. It will help the doctor, who needs to understand the privacy implications of maintaining electronic patient medical records, and the machinist, who works a programmable lathe.
Arthur C. Clarke mused that "any sufficiently advanced technology is indistinguishable from magic." Providing a CS education can potentially lead a child who wishes that magic really existed in the world to realize that maybe it does, and inspire them to use that magic for our common good.