Somewhere over the last few decades a basic form of learning and intuition building called tinkering (e.g., inquiry based learning) was lost then rediscovered (Brown, 2007; Foster, 2002). Digital technology has played a critical role in reopening to the world a behavior that was once more fundamental. Slowly the creators of the tinkering forms of learning are enticing children and educators to re-activate this basic form of learning and intuition building that we also call play and doing so through computer programming. Computer programming is the paintbrush that has composed every other form of "digital paint", our editors for everything from video to robots to games to highly interactive social media, which in turn makes everything seen and experienced online. It is the foundational language of cyberspace and the digital age. For example, the "turtle" drawing on the left was created by tinkering or playing with Logo programming language geometry which can be learned in minutes and then the created image was inserted into this page. These thoughts will introduce some of the fundamentals of programming, including information that will have you completing and running a Turtle Graphics computer program in a very short period of time. Other good starter programming languages such as Scratch, Python, Javascript, Lego WeDo and Lego NXT Mindstorms and other resources will be discussed briefly.
The process focused nature of computer programming has enabled it to integrate with all content areas. The explorative nature of such work is increasingly used to support and attract learners of science and mathematics (Papert, 1980/1993), and programming has broad application in language arts and social studies.
The Partnership for 21st Century Skills has noted the importance of teaching the foundational grammar of 21st century thinking (Brown). Programming is unfortunately one of those most neglected of cyberspace skills in the general school curriculum and tinkering is all but invisible during the school day. However, there are many fun web sites, serious toys and downloadable programming applications that teachers can use to show students something new to them yet so basic to the 21st century, and to encourage and support inquisitive learners in this area. Such activity can have direct relevance not just to STEM topics in math and science but to any other content area. Computer science and programming skills play an increasingly important role in 21st century problem solving.
The award winning media and society critic, Douglas Rushkoff, takes a more defensive position, arguing that computer technology has become so central to world culture that there are just two options, options that are the title of one of his books, "Program or be Programmed". Do we direct technology, or do we let the technology masters direct us? "Choose the former and you gain access to the control panel of civilization. Choose the latter, and it could be the last real choice you get to make" (Rushkoff, 2011).
Rushkoff's narrow decision tree must be taken with a "grain of salt", a bit of skepticism, as his book does not consider nor answer an important question. What percentage of problems, scaling from simple to really important, are computable problems and which are not? Put another way, should I find a computer program to solve or help with this problem, write the program myself or find programmers who can write such a program? This is the first decision that every problem solver must consider now that computer technology is so widely available. The class of uncomputable problems is much bigger than many might believe (Houghton, 1989). In short, the field of computer programming and computer science has an important place in our culture, but it cannot solve all problems. Yet applying the logic of computer science thinking more widely to the problems that can be addressed would still provide significant improvement to our lives and culture.
What is quite obvious for those who take the time to become aware is that there are many good and fun options for teaching computer programming to any age of learner. There are also many ways to show its relevance to all content areas. If you pull together a collection of sensors, mechanical devices, and programming languages you generate many high interest topics for students, from understanding cyberspace to basic electronics to robotics. Programming is also an important part of using sensors whether part of a robot or not. You also create new reasons to learn to read and write better. These topics lead to important career skills for many and important scientific and intellectual knowledge for the rest.
Programming can be done with written text and images as software and it can be done with hardware. To engineers, hardware is a kind of frozen software. To an electronics engineer, software is just a slow kind of hardware. That is, wires, solder, sensors and computer chips are continually designed by electronics engineers to carry out a variety of computer programs. Programming is also an important part of using sensors whether part of a robot or not.
Today,
our country is short some several hundred thousand people with computer
science training to work in this career area. Projections of need have run to
over a million positions in the next few years around the world. Children
and adolescents could greatly benefit with earlier and more exposure to
a variety of by-products of computer science that incorporate
elements of programming. We are seeing the beginnings of countries requiring programming instruction to begin in first grade in Estonia (Olson, 2012) and efforts that swing back and forth from active to inactive to active in American education (Papert 1980/1993; Hertz, 2012).
Because most adults and students have had so little to exposure to actually programming a computer, the first step in showing its relevance is to demonstrate how easy and fun it can be to learn a few simple programming commands which can do interesting things visually.
Click this link to explore Bill Kendrick's Web Turtle web site using the directions below.
Use the Web Turtle site to create and test simple programming ideas to see the relationship between numbers, patterns, geometry, direction following and programming skills. Its features include a random number generator and an input button on the home page. Just this one simple web site and the geometry of its Logo programming language can be used to teach a wide range of math concepts that must be taught in grades K-8.
When you visit this site, follow the directions there to get the programming screen active. Note the 2 column table which has directions in English, then in the programming language. This is a classic model of good programming practice, and good language arts practice in actually writing directions.
It is easier to follow the directions on the first screen by printing it or if you have a big enough screen to put the windows for the directions side by side with the Web site. Then under the table with the examples is a direction to "Start a New Drawing." Click this link, then type in the Web turtle directions from the print of that previous screen (or you can copy and paste). Tinker. How can you make the image bigger or smaller?
Having finished that activity, it is time tinker, that is to experiment, to learn from what happens.
There are many examples at this site of different programs and programming features to try and to modify. Explore the "Play with an Example" link and the "Available Commands" link.
The next activity that should be carried out at the Web Turtle site is to learn to create a subroutine, a named procedure that can be used over and over again. Think of it as another programming paragraph. Below you'll see two "paragraphs", a main routine and subroutine.
; Example 2 - Make A Square using a Subroutine
REPEAT 4
GO SIDES
NEXT
END
# SIDES
REPEAT 4
DRAW 100
RIGHT 90
NEXT
RETURN
Note that the resulting image should be the same as before. The # SIDES section is teaching the concept of a subroutine. The set of code above it down to the END statement is the main routine. Do you understand the purpose of the symbols ; and #? Can the computer teach you? What happens if you leave them out? Tinker.
With these few skills and short vocabulary (commands) much more complex images become simple to make. Next, return to the first Web Turtle page and visit the Examples page. See the second example, called Squares. This set of directions is a procedure that can be given a name, such as square as seen is the Web Turtle page's example. The computer can remember this and later simply giving the command "square" will cause the steps to be recalled and completed where ever the turtle is located. That is, in these simple examples, several major programming concepts have been introduced. The image to the right was made by using this composition model of the Squares to instead create a triangle and rotate the triangle until the rotation completes the shape. Can you tinker (experiment) to make the shape smaller and larger? Have the subroutine make different shapes? Change the angle of the turn in the main routine.
So what? Thes examples are important because they demonstrate a fundamental idea in problem solving. Break the problem down and solve one small part of the problem, then go back and tackle the next step. The capacity to create a named special set of directions is similar to the capacity to create a lego brick or any other unit, item or activity that needs to be used repeatedly yet in creative ways to solve a problem. This intellectual skill is critical in solving many problems, whether completing a design or saving the world. Other commands extend this capacity in powerful ways.
The concept of branches introduces another key concept, "what if?" Branches use command sets that begin with IF and set the value for some condition. For example, when the loop has been completed five times, drop out of the loop and move on to the next command. To see a programming example of a branching command that can be typed in, click the Available Commands button on the opening page of the Web Turtle site. There you will see the IF command format.
If you are interested in an extra credit programming challenge, here is one:
The IF command is also where a sensor's input would be used. There are many possible examples to think about that a wide range of students can understand. Here are some examples. IF the sensor reports that the robot has stopped at a wall, turn the robot's wheels 90 degrees and try to move again. IF the sensor detects smoke particles, direct the buzzer to sound the alarm. IF the sensor reports a temperature that has climbed over 103 degrees, call the doctor.
Here's one last thinking/programming concept, arrays. Arrays are containers for holding a large set of variables. As an example, a spreadsheet is a two-dimensional array in which each cell name is a variable name that can hold some value, whether number, formula or text. Arrays could be one dimensional, two, three or more. Arrays are not covered in the directions at the Web Turtle site. However, arrays can still be demonstrated. There could be an array written down on a piece of paper that were entered using the Input command options.
The analytical thinking required for effective programming is also very close to the types of thinking required for effective teaching. Programmers carry out plans of actions in a process that would seem very familiar to anyone who has every planned instruction for a class or an individual. Programmers break a problem down into sets of procedures (analysis), much as a teacher breaks an instructional event down into a six point lesson plan or an IEP (Individualized Educational Prescription), that they can understand, and then give more detailed information and directions to a class.
In a similar fashion, programmers plan in their native language whose plans can easily be shared with other planners then the programmer type up the steps for the computer to follow using a more detailed language that the computer can understand (synthesis). Teachers type up or talk out the steps for students to follow using language that they can understand. Programmers watch the computers operation to see where the computer fails to do what was intended and then they continue to change its directions until the computer can meet their goals. Teachers do something very similar.
Programmers have the advantage in that computers do not have independent minds or wills of their own. Computers will follow the directions that they are given precisely and promptly with very little error checking; this is not so with those human beings that we teach. Educators have additional challenges that involve leadership and motivation skills. With proper motivation and skills, human beings that run into problems will invent new commands for themselves that enable them to work around bad directions and keep going.
Look at the Common Core State Standards, the NC Course of Study math competencies or art or science competencies and figure out a way to teach one or more of those competencies using this Web Turtle site.
In a word processing file, enter the grade level and content area competency and your explanation of how Web Turtle programming could be used in teaching that competency. Upload this file into Blackboard in the Web Turtle Programming assignment found on the Course Content page.
Logo
There are free and commercial versions of Seymour Papert's superb work. Some resources include:
- rLogo is an easy to learn programming language also designed for the World Wide Web
- Computer Science Logo Style 2/e - Vol. 2
- StarLogo (specialized for teaching modeling, simulation, complex systems, decentralized systems) See also Adventures in Modeling by V. S. Colella et al. (book/CD ROM).
- Logo Programming for Kids - The "Kids and Computers" Web Site
Different sites keep track of the locations of many different downloadable versions
- http://www.cs.berkeley.edu/~bh/other-logos.html
- http://www.mathcats.com/gallery/logodownloadinfo.html
Scratch
http://scratch.mit.edu/ Scratch is free and this page provides the links to download versions for the Mac, Linux and Windows operating systems. It extends Logo from a text command driven system to a simple graphical interface in which multimedia elements and actions are assembled like snap-together Lego building blocks, blending animated images, sound and video. It is perhaps the best of class choice for primary grades through middle school for a free introduction to computer programming. The graphic novel Super Scratch Programming Adventure!: Learn to Program By Making Cool Games
by The LEAD Project is an excellent starting point for this learning which is available in both paper and Kindle editions (half the price and available on all platforms).It is a free downloadable programming application, created especially for those age 8 and older, that allows anyone to create their own animated stories, video games and interactive artworks. First made available on May 15, 2007, this "drag and click together" type of composition parallels the design of the programming composition model used by the Lego WeDo and NXT Mindstorms languages and incorporated into the Lego Robotics competition. Many examples of applications written by kids in Scratch can be found at Squeakland (http://www.squeakland.org/).
Python
Python, a free language to download, may be best used with middle grades and up, but younger students have been able to work with it as well, as the books below indicate.
A number of free and commercial books are available to support this learning. "Snake Wrangling for Kids: Learning to Program with Python" is a book for 8 year olds and older that is free to print or can be bought already printed and bound online (e.g., Amazon.com). http://briggs.net.nz/snake-wrangling-for-kids.html. See the Snake Wrangling book review by by Mark Frauenfelder. Other books include Python for Kids: A Playful Introduction to Programming by Jason R. Briggs and Hello World! Computer Programming for Kids and Other Beginners by Warren Sande and Carter Sande.
“Invent Your Own Computer Games with Python” is a also free (as in, open source) and a free eBook (as in, no cost to download), http://inventwithpython.com. "Each chapter gives you the complete source code for a new game, and then teaches the programming concepts from the example. “Invent with Python” was written to be understandable by kids as young as 10 to 12 years old, although it is great for anyone of any age who has never programmed before. The second edition has revised and expanded content, including a Pygame tutorial to make games with graphics, animation, and sound."
A list of many other Python resources is available:
http://teachcomputers.wordpress.com/category/programming/python/
Javascript and Seaside
At a slightly higher level of skills, many web page creators are inserting free javascript programs directly into their web pages or building highly interactive web applications with Seaside.
The ability to run javascript programming language is built in to most web browsers. Numerous sites are available for teaching the basics of javascript. Western Carolina University now teaches Javascript in its Computer Science 130 course. Javascript skills were essential in creating the thousands of online calculators at Martindale's site. For more, search the web and libraries for "javascript" and "javascript tutorial" to find further helpful information on the topic of javascript programming.
- About.com's http://javascript.about.com/
- Javascript Source "The JavaScript Source is an excellent JavaScript resource with tons of "cut and paste" JavaScript examples to insert in Web pages. All for free!" http://www.javascript.com/ with cut and paste scripts.
The best and most complete online learning environment for learning Javascript is found in Khan Academy's Computer Science tutorials. This programming can be learned and done totally online without downloading and installing any computer application.
Robotics
There are other good beginner programming resources as well, which are expensive compared to free, but excellent and within reach of many school budgets. Some involve significant community support and are widely used. Over ten-thousand teams from around the world participate in team competitions which use programming and robot systems to directly involve K-12 students in different age level divisions. There are primary grades, 4th-8th grades and high school divisions.
One of the most famous is FIRST League, for children ages 9-14. A new theme is created for the competition each year, which have included climate change, energy, oceans and many more. As seen in the picture on the right, the robotic playing field mat and Lego bricks are used to created a 4' by 8' creative play space to try out various programs designs for the robot. (Clicking the picture leads to a more detailed story.) This space is also used to compete in time trials to show how well their robot designs have been programmed to carry out a range of tasks. Teams must also research the topic and prepare a skit or presentation that describes a solution for the theme of the year, and demonstrate to judges their teamwork based problem solving skills.
A product from Lego aimed at primary age students and uses a simpler drag and drop programming language is WeDo Robotics. Where the Lego Robotics Kit builds a device that needs floor space to safely move, the WeDo device is tethered to a computer via a USB cable and stays on a student desk or table.
Some WeDo design examples from a child's perspective might be better explanation than text. Can you see correlations to standard curriculum topics?
Lego WeDo Venus Fly Trap (9 seconds)
Lego WeDo Robotics - Space Shuttle Launch (2 min)
Code
The Web site Code.org is a non-profit foundation dedicated to growing computer programming education. It is currently building a national database of programming coursework. It provides lists of resources for teaching programming across a wide range of ages and situations, a Twitter feed of ideas, a review of market/job potential and a rationale for the value of computer programming.
This Web page is just the first in a series of pages that will further explore concepts, sequences and means for exploring computer programming.
Bibliography