To do so we have founded a K-12/university partnership, which is working on changes at multiple levels:
- Technical (curriculum, professional development, counselor education);
- Belief systems (stereotypes about what type of student can do computer science, low expectations);
- Political (policy changes that must occur to institutionalize computer science learning at the high school level, especially in schools with high numbers of students of color).
While recognizing the importance of computer science knowledge for economic and educational opportunity in the 21st century, we also believe that the inequities in computer science are an indicator of what Jonathan Kozol (1992) refers to as the “savage inequalities” in our larger educational system. The mechanisms and beliefs that channel students of color away from computer science learning opportunities do the very same thing throughout the entire college-preparatory educational system. The end result is that students of color in low resourced schools are commonly denied a wide range of occupational or educational futures. Therefore, in the end, it can be fairly stated that our work is about computer science education, but also about addressing the larger inequities in our current educational system.
HERE A FEW EXAMPLES OF CLASS UNITS THE STUDENTS WILL GET TO EXPLORE
- Human Computer Interaction Students are introduced to the major components of the computer, including: input, output, memory, storage, processing, software, and the operating system. Students consider how Internet elements (e.g. email, chat, WWW) are organized, engage in effective searching, and focus on productive use of email. Fundamental notions of Human Computer Interaction (HCI) and ergonomics are introduced. Students learn that “intelligent” machine behavior is not “magic” but is based on algorithms applied to useful representations of information. Students learn the characteristics that make certain tasks easy or difficult for computers, and how these differ from those that humans characteristically find easy or difficult. Students gain an appreciation for the many ways (types of use) in which computers have had an impact across the range of human activity, as well as for the many different fields in which they are used. Examples illustrate the broad, interdisciplinary utility of computers and algorithmic problem solving in the modern world.
- Problem Solving This unit covers the basic steps in algorithmic problem-solving, including the problem statement and exploration, examination of sample instances, design, program coding, testing, and verification. Tools for expressing design are used. This unit also includes selected topics in discrete mathematics including (but not limited to) Boolean logic, functions, sets, and graphs. Students are introduced to the binary number system. Students construct complex expressions based on fundamental Boolean operations and learn how to relate the mathematical notion of functions to its counterparts in computer programming. They learn basic set theory and its application in computer science. Students are introduced to graphs using puzzles. Suitable exercises are presented that illustrate the value of mathematical abstraction in solving programming problems.
- Web Design This section prepares students to take the role of a developer by expanding their knowledge of programming and Web page design and applying it to the creation of Web pages, programs, and documentation for users and equipment. Students learn to create user-friendly manuals, Web sites, and program interfaces. Students apply fundamental notions of Human Computer Interaction (HCI) and ergonomics. Code documentation and hardware and software limitations are also explored. The notions of hierarchy and abstraction are central to computing. They are crucial to the translation between machine code and a user-friendly interface, to creating reusable code, and to the design of software that is broadly applicable rather than solving only a narrowly defined problem. This unit makes these abstract ideas concrete by focusing first on real-life (non-computing) examples, and then on the specific uses of hierarchy and abstraction in computer science.
- Programming Students are introduced to some basic issues associated with program design and development. Students design algorithms and programming solutions to a variety of computational problems, using Scratch. Programming problems should include control structures, functions, parameters, objects and classes, structured programming and event-driven programming techniques. This unit introduces data structures, including arrays, vectors, stacks, and queues, and their associated components, operations, and uses. Benefits and limitations of different data structures are presented. The concept that analysis and understanding of data structures can be used as a fundamental organizing principle in the design of solutions is explored.
- Computing and Data Analysis In this unit students explore how computing has facilitated new methods of managing and interpreting data. Students will use computers to translate, process and visualize data in order to find patterns and test hypotheses. Students will work with a variety of large data sets that illustrate how widespread access to data and information facilitates identification of problems. Students will collect and generate their own data related to local community issues and discuss appropriate methods for data collection and aggregation of data necessary to support making a case or facilitating a discovery.
- Robotics Students apply previously learned topics to the study of robotics and work in small groups to build and program a robot to perform a required task. Students make use of a programming language to control the behavior of these robots in dynamic environments. As a class (or a district) they will test out their robots under a specific set of circumstances in a robotics competition.