About This Course
Master the Beauty and Joy of Computing (BJC)
Introduction: Unlocking the Creative Power of Code
Welcome to the world of computing! This course, inspired by the internationally recognized “Beauty and Joy of Computing” (BJC) curriculum, will take you on a journey to discover that computer science is not just about ones and zeros, but a powerful medium for creativity, problem-solving, and personal expression. We believe that everyone, regardless of their background or future career path, can and should experience the “hard fun” of programming [1].
This comprehensive course will introduce you to the foundational concepts of computer science, challenging you to explore how computing and technology are transforming the world around us. We will delve into the seven “Big Ideas” of the AP Computer Science Principles framework, with a special focus on Programming, Abstraction, and the Global Impact of computing. You will learn to think like a computer scientist, developing skills in creating, abstracting, analyzing, and communicating that will serve you well in any field.
The BJC Philosophy: Programming as a Human-Centered Activity
The Beauty and Joy of Computing curriculum was developed at the University of California, Berkeley, with a clear and compelling mission: to democratize computer science and make it accessible to all students [1]. The creators of BJC believe that programming is one of the most satisfying of all human activities. It is a game of skill, like chess, but with the added benefit of producing useful and often beautiful results.
We will embrace this philosophy throughout our course. You will not be asked to memorize long strings of code or perform rote calculations. Instead, you will be encouraged to experiment, to play, and to build things that are meaningful to you. We will focus on the “why” behind the code, exploring the elegant and powerful ideas that make computer science such a fascinating and intellectually stimulating field.
Snap!: A Visual Introduction to Programming
To begin our journey, we will use Snap!, a visual, drag-and-drop programming language developed at UC Berkeley [2]. Snap! is based on Scratch, a language designed at the MIT Media Lab that is so intuitive, it is often learned by self-taught eight-year-olds. The visual nature of Snap! makes it easy to get started, but don’t be fooled by its simplicity. Snap! is a powerful language that will allow us to explore advanced computer science concepts like recursion, higher-order functions, and data abstraction.
With Snap!, you will learn to:
- Build your own blocks: Create your own custom commands to make your code more readable and reusable.
- Use recursion: Write elegant and concise programs that can solve complex problems by breaking them down into smaller, self-similar subproblems.
- Work with higher-order functions: Treat functions as data, allowing you to write more flexible and powerful programs.
- Create your own data types: Design and implement your own custom data structures to model real-world objects and phenomena.
The Seven Big Ideas of Computer Science
The AP Computer Science Principles framework is organized around seven “Big Ideas” that are essential for understanding the field. We will explore all of these ideas in depth, with a particular emphasis on Programming, Abstraction, and Global Impact.
| Big Idea | Description |
|---|---|
| Creativity | Computing is a creative activity. We will use programming to create a wide variety of artifacts, from games and animations to data visualizations and simulations. |
| Abstraction | Abstraction is the process of hiding the details of a system to make it easier to understand and use. We will learn to use abstraction to manage the complexity of our programs and to create reusable components. |
| Data and Information | Data is the raw material of computing. We will learn how to collect, store, process, and visualize data to gain insights and to solve problems. |
| Algorithms | An algorithm is a step-by-step procedure for solving a problem. We will learn how to design, analyze, and implement algorithms to solve a wide variety of problems. |
| Programming | Programming is the process of writing instructions for a computer to follow. We will learn the fundamentals of programming using the Snap! language. |
| The Internet | The Internet is a global network of computers that has transformed the way we live, work, and communicate. We will learn how the Internet works and how to use it to create and to share information. |
| Global Impact | Computing has had a profound impact on society. We will explore the social, ethical, and legal implications of computing and will learn how to use our skills to make a positive impact on the world. |
The Social Implications of Computing: Thinking Critically About Technology
In addition to learning the technical skills of computer science, we will also explore the social, ethical, and legal implications of computing. We will use the excellent textbook “Blown to Bits: Your Life, Liberty, and Happiness After the Digital Explosion” to guide our discussions [3].
We will examine a wide range of topics, including:
- Privacy and surveillance
- Intellectual property
- Cybersecurity
- The impact of social media
- The future of work
Our goal is not to preach, but to encourage you to think critically about the role of technology in our society. We want you to be an informed and engaged citizen who can make thoughtful decisions about how to use technology to create a better world.
Conclusion: Your Journey Begins Now
This course is more than just an introduction to computer science. It is an invitation to join a vibrant and creative community of thinkers, makers, and problem-solvers. It is an opportunity to develop new ways of thinking and to see the world in a new light. We are excited to have you on this journey with us. Let’s begin!
Diving Deeper into Snap!: Your Creative Toolkit
Snap! is more than just a programming language; it’s a creative environment designed to make powerful computer science ideas accessible and fun. Let’s explore some of its key features in more detail.
Getting Started with Snap!: A Hands-On Introduction
Getting started with Snap! is as easy as opening a web browser. The interface is designed to be intuitive, with a stage where your creations come to life and a palette of programming blocks organized by color and category. You’ll start by dragging and dropping blocks to create simple scripts, and you’ll be amazed at how quickly you can create your own animations, games, and interactive stories.
The Power of Abstraction: Building Your Own Blocks
One of the most powerful features of Snap! is the ability to create your own blocks. This is a form of control abstraction, which allows you to package a sequence of instructions into a single, reusable block. This not only makes your code more organized and easier to read, but it also allows you to build up a library of custom blocks that you can use in future projects. For example, you could create a block called draw a square that takes the size of the square as an input. Then, whenever you need to draw a square, you can simply use your custom block instead of having to write out all the individual steps each time.
Recursion: The Art of Self-Reference
Recursion is a powerful programming technique where a function calls itself. It’s a concept that can be a bit mind-bending at first, but it’s also one of the most beautiful and elegant ideas in computer science. With Snap!, you can visualize recursion in a way that makes it much easier to understand. We will explore how to use recursion to create intricate and beautiful fractal patterns, and to solve problems that would be very difficult to solve using other methods.
Higher-Order Functions: The Ultimate in Flexibility
Higher-order functions are functions that can take other functions as inputs or return them as outputs. This is a very advanced concept that is usually only taught in university-level computer science courses, but Snap! makes it accessible to beginners. We will learn how to use higher-order functions to write incredibly flexible and powerful programs. For example, we will create a map block that can apply any function to every item in a list, and a keep block that can filter a list based on any condition.
Exploring the Seven Big Ideas in Depth
Now, let’s take a closer look at the seven “Big Ideas” of computer science and how we will explore them in this course.
1. Creativity: From Idea to Artifact
Computing is a profoundly creative endeavor. In this course, you will be the creator. You will learn to take your ideas and turn them into tangible, interactive artifacts. Whether you want to build a game, create an animated story, or design a scientific simulation, you will learn the skills and concepts you need to bring your vision to life. We will have regular project-based assignments where you will have the freedom to explore your own interests and to create something that is uniquely yours.
2. Abstraction: Managing Complexity
Abstraction is the art of hiding complexity. It’s a skill that is essential for managing the complexity of large software systems, but it’s also a skill that is useful in many other areas of life. In this course, you will learn to use abstraction to create programs that are easier to understand, to debug, and to maintain. We will explore different forms of abstraction, including control abstraction (creating your own blocks) and data abstraction (creating your own data types).
3. Data and Information: The Fuel of the Digital World
Data is all around us. It’s in the music we listen to, the photos we take, and the websites we visit. In this course, you will learn how to work with data in a variety of forms. You will learn how to collect data from the real world, how to store it in a computer, and how to process it to find patterns and to gain insights. We will also explore the important distinction between data and information, and we will learn how to use data to tell compelling stories.
4. Algorithms: The Building Blocks of Computation
An algorithm is a sequence of steps for solving a problem. Algorithms are the heart of computer science, and they are what make it possible for computers to do all the amazing things they do. In this course, you will learn how to design, analyze, and implement algorithms for a variety of tasks. We will start with simple algorithms for things like sorting and searching, and we will work our way up to more complex algorithms for things like pathfinding and artificial intelligence.
5. Programming: The Language of Computers
Programming is the process of writing instructions that a computer can understand. It’s a skill that is in high demand in today’s job market, but it’s also a skill that can be a lot of fun to learn. In this course, you will learn the fundamentals of programming using the Snap! language. You will learn about variables, loops, conditionals, and functions, and you will learn how to use these building blocks to create your own programs.
6. The Internet: Connecting the World
The Internet has changed the world in countless ways. It has transformed how we communicate, how we learn, and how we do business. In this course, you will learn how the Internet works. You will learn about the client-server model, about protocols like HTTP and TCP/IP, and about the domain name system (DNS). You will also learn how to create your own web pages and how to publish them on the Internet for the world to see.
7. Global Impact: Computing and Society
Computing has a profound impact on our society, for better and for worse. In this course, we will explore the social, ethical, and legal implications of computing in depth. We will discuss topics like privacy, security, intellectual property, and the digital divide. We will also consider the role of computer scientists in shaping the future of our society. Our goal is to help you become a responsible and ethical computer scientist who can use your skills to make a positive impact on the world.
Computational Thinking Practices: Thinking Like a Computer Scientist
Beyond the foundational “Big Ideas,” the AP Computer Science Principles framework emphasizes six “Computational Thinking Practices.” These are not just skills, but habits of mind that will empower you to think like a computer scientist and to approach problems in a structured and creative way.
Creating: From Consumer to Producer
In today’s digital world, it’s easy to be a passive consumer of technology. This course will empower you to become a creator. You will learn to design and to implement your own computational artifacts, from simple animations to complex data visualizations. The practice of creating is not just about writing code; it’s about the entire process of design, development, and testing. You will learn to manage projects, to debug your own code, and to iterate on your ideas until you have created something that you are proud of.
Abstracting: The Power of Simplification
Abstraction is one of the most powerful ideas in computer science. It’s the process of simplifying complex systems by hiding unnecessary details. You use abstraction every day without even realizing it. When you drive a car, you don’t need to know how the engine works; you just need to know how to use the steering wheel, the pedals, and the gearshift. In this course, you will learn to apply the same principle to your own programs. You will learn to create your own blocks in Snap! to encapsulate complex logic, and you will learn to design your own data types to represent real-world objects in a simplified way.
Analyzing: Deconstructing and Understanding
To be an effective creator, you also need to be a skilled analyst. You need to be able to look at a complex system and to understand how it works. You need to be able to identify patterns, to debug problems, and to predict how a system will behave in different situations. In this course, you will learn to analyze a variety of computational artifacts, including your own programs and the programs of others. You will learn to use a variety of tools and techniques to help you understand how programs work, and you will learn to think critically about the design and the implementation of software systems.
Communicating: Sharing Your Ideas with the World
Computer science is not a solitary activity. It’s a collaborative endeavor that requires clear and effective communication. You need to be able to explain your ideas to others, to document your work, and to provide constructive feedback on the work of your peers. In this course, you will have many opportunities to practice your communication skills. You will work in pairs and in small groups, you will give presentations, and you will participate in online discussions. You will learn to communicate your ideas clearly and concisely, both in writing and in person.
Collaborating: The Power of Teamwork
Some of the most impressive achievements in computer science have been the result of large-scale collaborations. The Internet, the World Wide Web, and the open-source software movement are all examples of what can be achieved when people work together. In this course, you will learn to collaborate effectively with others. You will learn to divide a project into smaller tasks, to coordinate your work with your teammates, and to resolve conflicts in a constructive way. You will learn that by working together, you can achieve more than you ever could on your own.
References
[1] The Beauty and Joy of Computing. (n.d.). Retrieved from https://bjc.berkeley.edu/
[2] The BJC Curriculum. (n.d.). Retrieved from https://bjc.berkeley.edu/curriculum/
[3] Abelson, H., Ledeen, K., & Lewis, H. (2008). Blown to Bits: Your Life, Liberty, and Happiness After the Digital Explosion. Addison-Wesley Professional.
Learning Objectives
Material Includes
- Comprehensive video lessons
- Practice exercises and quizzes
- Downloadable study materials
- Certificate of completion
Requirements
- a:2:{i:0;s:39:"Basic understanding of the subject area";i:1;s:33:"Willingness to learn and practice";}