It's no secret that a career in software engineering is enviable. In fact, the US News & World Report recently ranked software development as one of the best jobs in America in 2022, based on qualities that job seekers desire most: High salaries, low stress levels, employment growth, and job prospects. And unlike most of the other jobs in that list, software development does not require an advanced degree (or necessarily any degree at all).
However, computer science (CS) can still feel like a difficult field to break into. According to the latest annual State of CS report from code.org, only 51% of high schools in the US offer a foundational computer science course to their students. Only 4.7% of high school students enroll in these foundational courses each year. These statistics may seem daunting to any parent who is hopeful that their child may choose a career in computer science, especially for those who do not have any background in software development themselves.
Luckily, access to the curriculum and tools used in many of these high school-level foundational computer science courses is entirely free and open source. Whether you're a parent who hopes to introduce your child to foundational computer science principles, or you're hoping to learn those principles yourself, this article introduces you to the tools you need to work through this curriculum from the comfort of your own home.
The Beauty and Joy of Computing
The "Beauty and Joy of Computing" (BJC) curriculum is a collaborative effort between the University of California, Berkeley, the Education Development Center, and various other institutions. The National Science Foundation funds it, and it has been in development since 2008. They originally used the curriculum in an introductory computer science course offered at UC Berkeley (The Beauty and Joy of Computing). They adapted it specifically to address the curriculum framework and exam for the College Board's relatively new AP Computer Science Principles (AP CSP) course. This version of the course, targeted at high school students, was first offered with the AP exam during the 2016-17 school year. The College Board has recognized the BJC curriculum as an endorsed provider both of curriculum (for students who take AP CSP) and professional development (for teachers who want to teach AP CSP). That means this curriculum is perfect for either the teenage or adult learner interested in mastering the basic foundations of computer science. Furthermore, they license the curriculum under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. This license means anyone can openly copy and redistribute in any medium or format and that it is freely available for public use.
The curriculum includes eight increasing difficulty units that introduce coding concepts ranging from simple loops to recursive functions. Each unit contains several labs that build complexity and understanding throughout the unit, and each lab includes specific instructions (with screenshots!) on how to complete the lab. Labs also contain optional activities (such as exporting a game students programmed to their phones) that provide students with extra challenges and ways to connect their learning to their own worlds. Units also offer additional, optional projects (such as simulating the Etch A Sketch toy) that reinforce what they learned and review resources to help students self-check their understanding after each unit.
Overall, the BJC curriculum presents students with learning activities that are fun and engaging while also inviting students to think deeply about each concept and to learn through troubleshooting and investigation. One of the best qualities of the BJC curriculum is its accessibility: Students learn about a variety of computer science principles without the need to download special software or learn a high-level programming language whatsoever. BJC achieves this by using a tool built specifically for use in conjunction with the curriculum.
Snap! programming language
Snap! is a tool developed as a collaborative effort between UC, Berkeley, SAP, and various other institutions and used as the primary learning tool for students and adults using the BJC curriculum to learn the foundations of computer science. The Snap! source code is fully open source and licensed under the GNU Affero General Public License v3.0. Snap! is a visual, drag-and-drop programming language that is fully browser-based and features the ability to work with first-class data types (such as integers, variables, arguments, and arrays), procedures, and continuations. This enables Snap! to be powerful enough for a serious introduction to computer science while also allowing for high accessibility through its visual, drag-and-drop nature. Since Snap! is browser-based, learners can access it from any computer, phone, or tablet without purchasing or installing additional or specialized software.
In Snap!, blocks of code are put together like a puzzle, using pre-built pieces for the platform or pieces that students create themselves. These pieces work exactly like real pieces of code, teaching learners how to think about programmatic concepts like loops, functions, and order without worrying about syntax or compiling errors. Here is an example of a block of code in Snap!:
The combination of the Beauty and Joy of Computing curriculum and the Snap! programming language empowers both teenage and adult learners to master foundational computer science principles for free, at their own pace, and from the comfort of their own homes. The high quality of the curriculum, in conjunction with the ease of accessibility of the Snap! programming language makes this open source tool one of the best ways to learn the basics of computer science.
Scratch and ScratchJr programming language for young learners
While the BJC curriculum and the Snap! programming language target teenage and adult learners, several tools also exist for students as young as 5. Open source tools similar to Snap! are available. In fact, Snap! is an extended reimplementation of Scratch, a visual, drag-and-drop programming language for children ages 8-16. And for children ages 5-7, ScratchJr is a popular option. While Scratch and ScratchJr don't have fully developed curriculums that aid in the learning process, they include guides and suggested activities to help engage younger learners—teaching them various skills enabling their future success with foundational computer science courses like BJC.
[ Read also: Code your first algorithm in Scratch ]
Computer science is for everyone
While computer science is a field that most parents would be happy for their children to go into, the low availability of computer science courses offered below the post-secondary level, as well as the low percentage of students who enroll in those courses, may make parents and students alike feel unsure of what resources are available to introduce young learners to basic computer science principles. However, a multitude of free and open source options exist to enable both parents and students to grasp these principles, including ScratchJr for children ages 5-7, Scratch for children ages 8-16, and Snap! and the Beauty and Joy of Computing curriculum for teenage and adult learners. The ease of accessibility and use of these tools, combined with the research and development, empowers learners of all ages to gain the foundational knowledge and skills necessary to create a career in computer science.