Computer programming, otherwise known as coding, is currently offered in a small fraction of US K-12 schools. There has been a push to change this recently, as evidenced by several White House initiatives, the heavily publicized Hour of Code program, and recent large scale adoptions of hands on STEM programs such as Project Lead the Way. Serious challenges remain. Many schools find themselves ill-equipped to set up coding for schools programs, citing reasons such as insufficient human capital, out-of-date equipment, and high speed internet issues. Setting up effective coding programs at schools can be challenging, and there as many issues to consider including curriculum selection, staffing, professional development, and funding.
One fundamental issue dogs nearly every program implementation. Trained engineers with coding backgrounds are needed to provide the level of rigor needed to support high quality computer programming courses. It is hard enough to find skilled engineers to handle private sector demand, and even more challenging to find those with in teaching. In this guide, we provide teachers and administrators with guidance on how to set up effective K-12 computer programming courses, whether they be comprehensive STEM curriculum implementations, daytime classes or after school clubs.
Why should my school or district offer coding?
There are a number of important reasons why schools and districts should consider adding computer programming as a core course offering or after-school option.
- First, by the year 2020 there will be an estimated 1 million unfilled computer programming positions in the United States due to an insufficient number of engineers to meet the demand. Second, technology related disciplines make up over 60% of projected new jobs in STEM (Science, Technology, Engineering, and Math).
- Third, computer engineering occupations rank among the highest-paying jobs for college graduates.
- Fourth, computer programming teaches skills that are immediately relevant in today’s job market.
- Fifth, computer programming builds proficiency in skills including math, science, logic, problem solving, teamwork, creativity, digital arts, and more.
- Sixth, technology innovation is currently impacting early every vocation from law to farming, from teaching to political science, from business to construction, and from marketing to medicine.
What age is appropriate for coding?
Coding can be taught to primary students as early as age 5.
With the youngest learners, one simple way to begin is to adopt visual programming languages with drag and drop block interfaces. Once students reach age 8 they are often ready to move on to using text based programming languages and real coding environments provided that the curricula is fun and engaging.
How can my school or district bring coding to the classroom?
Tip #1: Participate in Hour of Code and Computer Science Education Week
Hour of Code and CSEW arrive the week of December 5th to 11th, 2016 and this annual event is rapidly increasing in popularity. Both are programs designed to inspire K-12 students to take an interest in computer science, and there are some fantastic guides and tutorials available at Code.org that can help you get your program set up and ensure its success. Through Code.org, your school can utilize a variety of free coding programs from Khan Academy, Tynker, and more that are designed to be administered in a work workshop timeframe and involve the least amount of technical knowledge from teachers and proctors. Introducing coding this way to your school is an excellent way to begin raising awareness and gaining the support of school and district stakeholders.
Tip #2: Set up school or district funded after-school coding classes or clubs
- Option #1: Many schools are putting together their own after school coding classes and clubs through generous grants from Code.org and their Professional Learning Partner program. The program provides funding to bring trainers to work with your staff and to equip them to teach Code.org’s extensive K-12 coding curricula with the objective of creating self-sustaining programs within 3 years.
- Option #2: Many forward thinking schools and districts want to offer a higher level of coding education, which involves using real languages, professional tools, and experienced engineers to deliver the content. In some cities, schools can contract with local coding academies that will set up programs at your school. A less expensive option is to use online academies that provide self-paced online curricula, but that support the curricula with live engineers who can interact with school proctors and students via screenshare.
Tip #3: Set up Parent-Pay Enrichment Programs
Schools and districts that offer parent-pay after-school enrichment programs can look for local providers that offer coding, robotics, or other tech related courses. If none are available, you could consider setting up your own parent pay after-school program with resources like Code.org, Scratch, or on the higher end blended learning providers such as CodaKid.
General School-Based Coding Tips
Tip #1: Make it fun!
In our eyes, making coding fun is the number one rule in teaching computer science to kids. Children will often start out with a coding tutorial, but quickly lose interest when it becomes too academic and the projects are not interesting enough. Many coding platforms, in fact, still use the “Hello World” method in which students learn to print the words “Hello World” on a screen. While this approach may work with college students in a credit-conferring environment, it generally backfires spectacularly with K-8 populations. We recommend staying away from curricula that is too rigid and academic, and to focus instead on fun, project-based courses that match children’s interests. Kids like to build video games, apps, and Minecraft mods. Still others might want to build their own webpage or want to code the AI of a robot. At CodaKid, we prefer to teach coding by building video games and apps as they provide students with a fun and interactive way to learn coding concepts. Many youth coding clubs and academies are starting to move in this direction. Please let us know if you’ve found other good ones for us to review as we will be updating this guide with the latest products and services.
Tip #2: Pick one language and stay focused
Many school administrators that we interact with read up on the hottest, most popular programming languages, and want to expose their students to as many of these languages as possible in a short time period. In our experience, this is not the best way to approach CS instruction. We have found that it is a far better to study one programming language and to gain knowledge and proficiency rather than developing a shallow understanding of several languages. Once a student has mastered one language, it is easy to learn new the syntax of new languages. Introducing multiple languages in too short a time span can lead to confusion and force the student to concentrate more on syntax rather than computer programming concepts.
Tip #3: Be consistent
Many schools participate in Hour of Code and expose students to a short workshop once a year. While this is an easy way to introduce students to coding, this approach is not an effective way to build coding proficiency. In many ways, it is the equivalent of introducing a student to Mandarin Chinese for an hour once a year, and then not visiting the language again until the year after. We recommend instituting consistent CS programs that give students the opportunity to learn new concepts, build independent proficiency, and then learn more. The most effective coding programs meet at least one time per week, and several times is preferable.
There are a number of free and paid options that help your school establish a world class coding program.
MIT Media Labs Scratch is a fun, visual programming platform that teaches coding concepts while allowing students to build fun games through an easy and intuitive drag and drop interface. Google CS created some well-crafted lesson plans that families can use that include pacing guides. Best of all, other students’ Scratch projects and their “code” are freely available, and it is fun and educational to study how 2D games like Asteroids, Galaga, PacMan, and more were created. Scratch also allows students to add their own art, animations, sound effects, voice-over, and music, making it a dynamic and flexible educational tool. Scratch does not provide support from engineers at this time.
Code.org (Free and Paid)
Code.org is more modern and slick than Scratch and features a closed platform environment designed for ages 6 and up. It has been featured by Hour of Code and is used by many public schools to teach introductory computer science. Code Studio has age appropriate modules using drag and drop interfaces with the option to write text-based code if desired. Code.org has also partnered with Minecraft, Tynker, CodeBattle, and others to create engaging modules that simulate the experience of creating games and apps. The strength of Code.org (aside from the fantastic fact that it’s free) is that they feature gamification, they have partnered with high-interest franchises such as Minecraft and Star Wars, and they have a well thought out sequential approach to teaching code. The downside is that you never quite experience the feeling of building something from the ground up and you always feel confined to a pseudo environment which seems to encourage drag and drop blocks rather than text. Code.org does not provide support from engineers at this time.
Khan Academy (Free)
Osmo Coding (Paid)
An innovative entrant into computer science education, Osmo Coding combines Legos, coding, and video games. Osmo teaches children computational thinking by using tactile magnetic blocks which allow the user’s character to navigate a series of challenges and puzzles in an iPad game. While the manual specifies that the product is designed for students ages 5 to 12, we think that Osmo is much better suited to younger ages of 5 to 8. We love that Osmo introduces a physical, tactile approach to coding instruction and expect great things from this company in the K-2 space.
Sphero allows children to program toy robots using drag and drop, block based coding interfaces on your mobile device. Their Star Wars BB-8 robot as well as the original SPRK+ are sleek and modern, and are an excellent way to teach younger children computational thinking.
Visual Programming versus vs Text Based Programming Tools
Option 1: Drag and Drop
Drag and drop programming courses are the tricycles of coding. They are designed to be fun and easy, but are also designed to be tools that you outgrow. Platforms like Code.org, Scratch, Tynker, and others believe that typing should not become an impediment in computer science education, and that kids can learn many of the same coding concepts through a more visual, tactile approach.
Option 2: Closed Platform – Text Based
Some online coding courses such as Code.org and Khan Academy offer several text-based options in which students type code into their closed platform learning management systems. These courses will typically teach a coding language on a proprietary LMS to reduce the chances of student errors and to build a tightly-knit error messaging system that reduces the chance of bugs.
Option 3: Real text based Programming using Professional Tools
Some programs such as CodaKid use real programming languages and professional grade coding tools. The advantage of this approach is that it gives students the experience of working with professional text editors and real languages. By teaching students real coding languages and using the same text editors that the professionals use, students learn valuable, transferable skills. The best courses also provide online support and screenshare from live engineers who walk students through solutions to their bugs and other issues.
What computer do I need to teach computer science at school?
Many online coding courses such as Code.org and Khan Academy are web-based and only require a high speed internet connection. Web-based courses do not require computers with much processing power and will typically run with nearly any computer manufactured in the last 4-5 years, including options like Google Chromebooks.
Providers of courses with real coding tools require a Mac or PC computer with a recommended 4G of RAM and a high speed internet connection. The benefit is that children will learn how to code using the same professional grade tools and real coding languages used by major software companies around the world. At some point in children’s computer science journey you will likely reach a time when he or she has a strong desire to use real programming environments and cutting edge tools. Some families decide to do this from the start, while others use web-based tools to begin and then transition to professional grade tools at a later time.
What programming language should our school choose?
Here are some curricular pathways to consider:
- Code.org (Code Studio)
At CodaKid we focus on Java for our Minecraft coding classes, and we use helper files to reduce some of Java’s more difficult commands. We have found a highly effective way to teach Java as an introductory language, and kids’ natural passion for Minecraft provides them with the extra motivation to learn complex concepts like Booleans, conditional, loops, variables, and methods – all concepts that can be found in nearly every other programming language. Java also happens to be the current language of the Computer Science AP exam.
What are some examples of coding concepts that children learn in coding classes?
There are many coding concepts that are found in nearly every programming language with some minor differences in syntax. Below we have given you two common coding concepts that are found in nearly every language. For ease of illustration, we have written this in pseudo code.
Conditional statements allow a computer program to execute a certain section of code based on whether a condition is true or false. Java uses Boolean values to evaluate these conditions. One of two Boolean values (True or False) is returned when an expression is evaluated by the computer.
Here is a snippet of code that sets a daytime or nighttime texture depending upon the time of day in Minecraft:
In the above example, if it is daytime, the computer will use a texture to make the Minecraft world appear as though it is daytime (sun, visible clouds, shadows, etc). If it is not daytime (indicated by the “else” command), the computer will use nighttime assets.
Another common coding concept that can be learned through Minecraft coding is called a Loop. In this example, a “While Loop” continually performs a command while a particular condition is true, and discontinues the command when the condition is no longer true.
Here is an example of how a While Loop might appear in Minecraft coding:
In this loop, a player will be able to fire arrows as long as the number of arrows in her arsenal is greater than zero. Once the number of arrows becomes zero, the condition returns a false value (because the number of arrows is not greater than zero) and no arrows can be fired.
In response to the massive demand for engineering skills in the workforce, many schools are moving quickly to develop plans for computer science, either in the form of daytime courses or after school classes and clubs.
Setting up high quality computer science programs at schools has many challenges. It is hard enough for technology companies to find quality engineers, and most people with technical skills gravitate towards high paying jobs in the private sector rather than teaching positions positions.
Coding is not easy. Computer programming requires patience, persistence, and steadfast determination. If you implement a program incorrectly, kids can easily become frustrated and discouraged, and teachers can become exasperated and.
If your coding curriculum is implemented correctly, however, you can inspire students to build their skills and become budding young technologists.
We hope that you found our article helpful. We love conversing with school administrators and teachers. If you had any questions or wanted to share some best practices that worked for you, please email us at firstname.lastname@example.org.