Computational Thinking Presentation with The Global Physics Department

I had the opportunity to speak with the Global Physics Department yesterday regarding my work with Computational Thinking at Google. It was a wonderful opportunity to speak with Physics teachers I have known and respected for years and some who I am just now connecting with.

If you would like to see the conversation or learn a bit about what Computational Thinking is, you can watch the recording, and follow along with the Computational Thinking Presentation.

The gathering of innovative educators is so exciting and refreshing. If you are looking to connect, continue your learning, and deepen your pedagogy then you owe it to yourself to meet with these educators at the meetings or connect with them through Twitter and Google+.

If you have any questions about the presentation, please feel free to contact me directly through the contact information found in the presentation. I would also encourage you to connect through the Computational Thinking Forum, a place where this growing community can meet and discuss ways of implementing Computational Thinking into their curriculum and to share ways that they already are. If you or your colleagues would be interested in hearing more about Computational Thinking, please feel free to connect with me and we can set something up.

I am grateful to the community of educators that creates and innovates, I learn so much from you everyday and I am so glad I am able to call you my colleagues and friends.

Connect with BrokenAirplane and stay up to date with the best resources in education.

Follow my microblogging on Google+

Paradigm Shifts Make My Brain Hurt

Paradigm Shifts Make My Brain Hurt

 But this is a good thing.

My students know that I equate math and learning in general to working out at the gym. Like lifting weights you will never get the results you want if you don’t challenge yourself and do it often. For reasons I am sure have a strong evolutionary advantage, our brains form these strong bonds to ideas family, worldview, foods you will never try even though you have no idea what they taste like, etc. Well every so often, if you are lucky, your paradigm is challenged. This serves to either strengthen it or force you into what the philosophers call a “crisis”. Either way a lot of thinking and reflection occurs. This is a story about both math and paradigms.

 One day I was working at my desk when a visitor sat down next to me at the adjacent desk. As we started talking I realized that this was someone I knew from online! What a small world. It turned out to be Emmanuel from the Bootstrap project which teaches algebra and game design through programming. He was there to train engineers to become mentors of middle and high school students.

Bootstrap is unique in a couple of ways. The materials are extremely detailed completed with step by step scripts of what to say and do in the classroom. This is useful to mentors who have never taught before but I was equally surprised to see how succinctly Emmanuel was able to capture good pedagogy and convey that in short training sessions and through the materials.

 The other way in which Bootstrap is unique (and why my head hurts) is its use of functional programming instead of imperative programming. You might be saying to yourself, “I thought there was only one type of programming and just different languages.” Like human languages, programming languages can be broken down into families which share certain qualities and approaches to problem solving.

Imperative languages (C, Python, Ruby, Java, etc.) allow the user to write instructions for how the computer should be manipulated. Imperative languages run by changing the state of values (saving variables, updating variables, iteration). If you have programmed it was likely in a imperative language.

Functional languages trace their roots all the way back to the Lambda Calculus, a formal system developed to explore various mathematical principles. Functional languages allow you to abstract concepts as you would in math. Some like my mentor become filled with joy when programming in a functional paradigm, I am still getting used to it but I definitely see its merits. You may find this approach freeing or frustrating, depending on your own background!

 For example in an imperative style you might calculate factorial like this:
 def factorial(n): 
    f = 1 
    while (n > 0): 
        f = f * n 
        n = n - 1 
   return f 

Here we’re keeping track of two values as the program runs:
  • n is our counter, which starts at n and shrinks to zero
  • f is our accumulator, which is multiplied by n at each trip through the loop 
In this code in order to get it to work, we need  for loops and temporary variables, which track the machine’s behavior as it works through the process of calculating the answer. This is analogous to the way a student would calculate the answer on paper, keeping track of f and n on scrap paper as they go. In our imperative solution, each line of code is telling the machine to store answers and change values, such that the value returned is the answer we want.

In a functional language, you might right something like this:
def factorial(n): 
    if n == 0: 
        return 1 
        return factorial(n-1) * n

Notice that in this code one there are no temporary variables or reassignment! In this case, the code makes no reference to the machine, or how to calculate the answer. Instead, it is declaring that factorial(0)=1 and that factorial(n) is n*factorial(n-1). The premise is that you are building math out of functions instead of manipulating variables.

Another well known example is Euclid's Algorithm for the greatest common factor (GCF) of two numbers.
def gcf(a,b):
    if b==0: 
        return a
        return gcf(b,a%b)

 In my experience students often get lost in the variables and tracing out how they change. It’s too much cognitive load to ask them to keep track of (how many teachers can relate to off-by-one errors with for loops, or confusion surrounding variable scope?). But there’s something even deeper going on here, beyond “simplicity” -- suppose you wanted students to really understand factorial. As a math teacher, which approach would you choose? The list of steps and scrap paper necessary to calculate the answer, or the formula for factorial itself?

Compare the two solutions to this formula, and you’ll see that the functional approach is actually identical to the formal definition while the imperative approach has little to do with it. For students to connect the imperative solution to the math, they need to do a lot of work to see why those steps will wind up giving back the right answer. Moreover, this approach uses things like while loops and assignment, which do not even exist in algebra!

Meanwhile, the essence of factorial is declared explicitly in the functional solution (it literally reads exactly like the algebra).

This is not to say that the imperative version is incorrect. (It works just fine on my own computer here!) However, the imperative solution introduces students to assignments and while-loops: concepts that have no business in a math classroom. The imperative model for variables is completely out of place in the context of mathematics, and will only serve to make things harder for students who have to un-learn it.

As Emmanuel points out, we know that there is no such thing as the “One True Language”. Instead, you pick the language based on the job. If your job happens to be teaching math, why not use an approach that’s actually mathematical? While I am extremely new to the topic, I am working of translating my own curriculum to use the paradigm. This is not to say, one is better than the other. Each way has its strengths and weaknesses but I think I am finally ready to take up my mentor’s call to use functional programming with my students.

I would highly suggest you take a look at Bootstrap. The resources are free and as I said, extremely helpful in supporting you and the student every step of the way. This is an excellent program for students. They love creating games as they learn algebra and some best practices in programming. This in turn helps them become better at solving problems and writing code.

Connect with BrokenAirplane and stay up to date with the best resources in education.

Follow my microblogging on Google+

Dangerous Things You Should Let Your Kids Do

I can not believe that I have never written about the Dangerous Things You Should Let Your Kids Do. You may or may not have heard of Gever Tulley so I have included his TED talk at the bottom of this post.

Our world has become too safe. In our effort to keep our children alive, we have let fear get the best of us and took all of the fun out of childhood. Our anti-bacterial everything are growing super strains of infection, the playgrounds are timid and yawn-inspring, and our Chemistry sets no longer ship with radioactive material (ok maybe that is a good thing). Don't even get me started on the supposed learning toys with one button and no challenge.

I heard about Tulley and his Tinkering School a few years ago at Maker Faire and swore that when my kids were old enough we would do this stuff. I didn't want my children to feel like they lacked the basic skills to create or if needed, survive. Plus, I have said numerous times that my most formative experiences have been learning side-by-side with my parents or under a mentor.

So a week ago, my two year old son could not stop talking about how much he loves my keyless entry badge for work. From what I can tell, he enjoys pulling the badge and watching it snap back on the reel, looking at the picture of his Dad, and saying the word Google with the same playfulness that must have inspired Mr. Kasner.

I have always joked (it wasn't a joke) with my wife that when he was old enough, I would teach him soldering, programming, welding, etc. Well, now was as good a time as any. After a quick trip to Radio Shack we were ready to go. Now a two year old's attention is a funny thing, sometimes he wanted to help too much, and other times he wanted to go play with his toys and take a nap. Nonetheless, when I handed him his badge his eyes lit up with more intensity than the LED we put in it.

This was not the joy of a new toy, this was the joy that comes from being a part of the creation of something cool. My disclaimer is this is not my best work, but I hope that each year he and I can get progressively more challenging with these projects to the point where he is teaching me. With the cost of parts so low and the abundant learning resources I can't even predict what will happen over the next 10 years. Oh and don't think my soon to be born daughter is exempt, making is a family affair!

Before you say anything, don't worry I am not pushing for my children to be anything in particular, but our education system makes us masters of nothing and I want to make sure my children are equipped to follow any path they choose.

Watch the video below, and then please, please, please let your kids do something dangerous!

Subscribe and Connect to BrokenAirplane and stay up to date with the best resources in education.

Technology is Not Magic

Perhaps you read the story this week from the New York times about how technology in the classroom is not showing an improvement in test scores. It may surprise you (unless you know me) to find that I could have wrote that article years ago. Except I would have called it, "New Technology + Old Ways of Educating Lead to Lower Test Scores and Empty District Budgets."

Every day I hear about a new panacea for all that is wrong with education. Often this magic comes from a piece of software, website, or hardware. To hear the marketing departments of these companies talk, you would think you just put ________ into your classroom and everything will right itself.

If this were an infomercial we would all laugh at the hyperbole, but unfortunately thousands of districts flock to these vendors and fork over money like a gambler spending his family's food money. Early in my career, I was given a pink slip in order to shore up budgets. In that same year, millions of dollars were spent on adding interactive whiteboards, clickers, microphones, cameras, etc. I have seen or heard this too many times to feel like my situation was an anomaly.

These technologies are incredibly cool and powerful so why are we not seeing a bump in scores? My first reason that I will only mention briefly as I have spoken on it in the past is the growing disconnect between test scores and learning. There are so many issues and errors with the "system" used to assess learning that I would question every statement that begins or ends with "test scores show" or "led to an increase/decrease in test scores".

The oft cited Tony Wagner refers to the skills needed to close the global achievement gap (video).  If you don't have the time to read them, I can quickly summarize them by saying that they are not skills that can be tested by today's assessments.

Technology can be used for good and evil, it can give us superpowers or add convenience. This is one of the reasons why the Flintstones/Jetsons cartoons are so funny. In the Flintstons you see Fred in his foot pedaled car when he could far more easily walk or run. In the Jetsons, modern society remains exactly the same as it is but with technology (e.g. George walking the dog on a treadmill because for some reason they live in the sky). This is what we have done with technology, spent all of our money on shiny toys only to do things the exact same way as we did before.

Here are a few conversations I have had or overheard over the years:
  • Why should students learn to program, they already have calculators?
    • Problem solving/creative thinking
  • If you give students access to the Internet, all they will do is copy-and-paste.
    • Perhaps your assignment could be updated to require thought.
  • We have to block all social networking and chat on the school networks or students will spend all of their time talking to each other.
    •  Do teachers spend all of their time working alone without collaboration (oh wait, sadly many do).
  • You (Phil) can do all of these cool things you do because you had XYZ technology or laptops.
    • Hahahahahahahahahahhahaha. Have you ever tried to do a boring assignment on a laptop? The lesson is still boring.
  • We can't have cell phones in school. (Never really heard the justification)
    • My dream is to have school in an open field or apprenticing at a lab/workshop. Cell phones could make that possible and they cost far less than the tech we are filling our rooms with.
Here are the marketing companies: Look we took all of your old lessons and assignments and made them flashy and gave the students buttons to push. 

Here is my challenge to our community: Help the students do things that were never possible before.

If your test scores are not going up, don't look to adding some new piece of entertainment, give the students a challenge to create, apply, engineer. If that involves technology, great! If it doesn't then that is probably better.

Subscribe and Connect to BrokenAirplane and stay up to date with the best resources for your classroom.

Updated Python: How to Think Like a Computer Scientist

I hold a special place in my heart for the How to Think Like a Computer Scientist tutorial. When my former teacher and then colleague Michel Paul told me about this great language Python I went home and checked out a few tutorials.

Jeff Elkner's How to Think... was not only the easiest introduction to the syntax of the language, I still use it as one of my references as well as for my students. The tutorial started out as a series of explanations and tutorials but recently has evolved into a much more interactive experience. For many students it is difficult to get software installed on their home computers and sadly it can be difficult for teachers to have it on their school network. Brad Miller has released an updated version of How to Think Like a Computer Scientist with interpreters built into the lesson so students can learn right from the browser.

The ability to program from within the browser is making a huge impact on one's ability to learn right away. Some great examples of this beyond How to Think... are: W3 School (HTML, CSS, Javascript, etc), SAGE (Math), and CodeAcademy (lots of great potential here).

You will need a Google account (free) and an up to date browser (Chrome, Firefox, IE). In addition to the interactivity, video tutorials and an administrative back end is being tested and will be opened up at the end of the semester for use with your students. Brad Miller, continues to refine this project and is committed to making it useful and open to as many as possible. New tutorials have been added to take you from Hello World to full blown Object Oriented Programming (trust me it's awesome).

I can personally testify to the quality of these lessons. If you are motivated you could go through these in a weekend or so and be off and running to the great possibilities in using programming with your students. As I have said before, it will provide opportunities for students to try ideas they never could have before. I think of all my students and I have been able to accomplish with Python and it all started with the How to Think Like a Computer Scientist tutorial. I can only imagine what could happen if every teacher who read this blog gave it a shot and passed it on to their students.

Subscribe and Connect to BrokenAirplane and stay up to date with the best resources for your classroom.