We have had an exciting start to our school year in LPS. Computer Science courses and enrollment continue to grow across the district, as does our partnership with Code.org. At the elementary level, we transitioned to the Computer Science Fundamentals Courses A-F from Code.org as the foundational curriculum for our K-5 students. We supplement Code.org with a variety of robotics, Scratch, BitsBox, physical computing, and other CS resources. All elementary students in LPS get their CS instruction as part of the specials rotation, along with other classes like music, art, P.E., and library.
Our middle school courses also made a shift this year, now using Computer Science Discoveries from Code.org in grades 6-8. Currently, we have CS courses at four of our twelve middle schools, with plans to phase in CS courses in the remaining schools over the next two school years. Our middle school teachers (along with some high school teachers) attended a week-long intensive "TeacherCon" hosted by Code.org this summer to prepare for their new curriculum. Middle school students also work with a variety of physical computing and robotics. We are also piloting Apple's Swift Playgrounds and Zulama Game Maker at two middle schools.
For the first time ever, Computer Science is now available at all six of our high schools! We are thrilled to begin to offer AP Computer Science Principles at East and Southwest, with more schools to come next year. We also teach Intro and Advanced Python, and Creative Coding through Games and Apps (which uses Microsoft's Touch Develop). We anticipate that we'll have a growing demand from students over time as our K-8 students are gaining the foundational skills now that our current high school students did not learn at that age.
In LPS, we are working hard to bring CS to all students and to increase the diversity of our CS classes. We have tracked our gender enrollment for two years and are pleased to see an increase this year in the number of girls in our CS classrooms - see here - We still have a long way to go in that area, especially at the high school level. With encouragement from parents, teachers, counselors and support from groups like Lincoln Girls Who Code and Lincoln Coding Women, we can work together to increase the number of girls who want to study CS. It is also our hope that our K-8 courses will inspire students to see that CS is something that all students can do, and is something that will benefit them in the future, no matter what career path they may choose.
What is computational thinking? Jeannette Wing’s article in a 2006 issue of the Communications of the ACM has a definition. AP Computer Science Principles has one. ACM/CSTA K-12 CS Standards has one. Google’s Exploring Computational Thinking site has one. I see computational thinking as a way of thinking for logically and methodically solving problems that is purposeful, describable, and replicable. It encompasses skills or abilities such as problem decomposition, pattern recognition, abstraction, generalization, algorithmic design, and evaluation.
Is computational thinking then something to do with computer science? Yes. But is it exclusive to computer science? I argue no. I see computational thinking underlying many (if not all) disciplines.
We break down a complex problem into smaller subproblems to better solve the problem.
When we decide which checkout lines to pick, we look at the customers waiting in line and their grocery baskets or carts. That’s pattern recognition.
A recipe is an algorithm. An instructional manual on how to assemble a cabinet is an algorithm. A set of directions going from A to B is also an algorithm. Following a recipe or an instructional manual or directions correctly means executing an algorithm. We do that often. (And sometimes we improvise and skip steps—or even forgo reading them—and find ourselves with a not-so-desirable outcome.)
We evaluate the quality (including correctness) of a recipe by, say, tasting the dish we generate from the recipe, and then make changes to the recipe accordingly.
Based on successes, failures, and lessons learned that we observe, we generalize our solutions to (sometimes very) different problems.
How about abstraction? Visualize that you are in a grocery store or a supermarket. There are aisles and aisles of products. Now, imagine this. What if the sign at each aisle lists every product that is available in that aisle? Would you be able to find the items that you want from the sign of the aisle? Yes, likely. However, how many products would there be on each sign? Spaghetti, thin spaghetti, angel hair pasta, linguine, penne, fettuccine, etc. Each sign would be so big that probably no one would read them. Instead, what you commonly see on these signs are just categorical terms, such as “pasta” for all the types of paste, “spices” for all the types of spices, etc. Why? For the sake of efficiency and practicality, and even sanity! And what is the process that produces these categorical terms? Yes, it is abstraction.
Now, how exactly is computational thinking then related to computer science? I see that CS as a discipline that allows us to practice computational thinking more effectively, more efficiently, more reliably. Computational thinking manifests in CS largely due to CS’s emphasis in algorithms and their properties, such as complexity and extensibility. Also, in CS, practicing or applying computational thinking often involves considering digital artifacts—numbers, texts, sounds, videos, pictures, etc.—and producing information that leads to knowledge or decisions, or other digital artifacts.