The essence of abstraction consists in singling out one feature, which, in contrast to other properties, is considered to be particularly important.

Sparks of Genius, p. 72

Looking past the obvious is hard to do, especially when you’re up against a deadline. Our quick-to-consume culture has conditioned us to see the world in snippets…short bursts of stimuli. It’s marketed as “consumable” or “digestible,” but it’s a cheapened experience.

Root-Berenstein (2013) characterizes Werner Heisenberg, Picasso, and others, finding the root of abstraction in “finding the minimal visual stimulus that can be put on paper or canvas and still evoke recognition.” Consistently, the simple concept defined through an abstraction can be applied to the bigger picture.

This is hard because it takes time. There is significant effort in abstracting seemingly simple ideas, objects, or actions. With photography, it is difficult to capture an abstract idea because the camera lens gathers so much information with the flick of a mirror.

Identifying main themes in any abstraction will help with breaking down complex ideas. What patterns exist? How can those patterns be grouped together? What other patterns emerge as you break things down? Often times, in the process of identifying a theme or themes, you can combine ideas into simpler, more generalized themes. Repetition is key in this process because you can look for common threads. This also means that our first attempt can usually be thrown away. Abstraction, in its truest form, is the result of a process, not creation through obscurity.


Root-Bernstein, R., & Root-Bernstein, .M. (1999). Abstracting. In Sparks of Genius. Boston: Houghton Mifflin.

If You’re Not Going to Use Attribution, I’ll Just Do It For You

It’s important to use attribution online. When you pull a picture, make sure you tell other people where it’s from. Some sites make it easy for you to do that, others…not so much. Flickr used to be great at making attribution easy, but their latest redesigns have made it harder to accomplish. Alan Levine has a great CC attribution gizmo which makes it super easy to both give credit to and share a photo from Flickr. I use it all. the. time.

WordPress is great – I use it for this blog and my class websites. I even ran my own multi-site for my students one year using WordPress because my administrators at the time didn’t want blogs out in the wild. So, I did it for them. Anyways, WordPress doesn’t have the best method for featured images. You can’t use an image source URL to share it…you need to download the image and then reupload it to your site. It’s really easy to “forget” to post attribution.

I’ve been playing with another open source CMS called Anchor. It’s very bare bones right now, but it’s super flexible in terms of what you can do. Because I didn’t have enough going on (read sarcasm there…) I decided I wanted to create my own custom theme for an Anchor blog. I’ve got a demo site up right now (which will be changing soon…updates are coming!) and one thing I had to include was featured images from a URL.

The next step was to get attribution in there…not just a link back, but an actual box of text with the post title at the very least. Flickr has a powerful set of APIs which can be used to get all sorts of data which you can then bend to your will.

For those too wary for code, here’s the tl;dr – this new blog theme in Anchor will automagically attribute featured images you include. All Flickr images are coming soon.

The problem – In order to use the Flickr API, you need – at the very least – a photo ID. Because I’m attaching the photo using CSS, I have the source URL of the image. Here’s an example:

I needed a way to get that snippet of the URL into the API call. Unfortunately, there is no one step that can do this. So, I went and gave myself a crash course in regular expression to get that information into a usable form.

Of course, there’s another issue in my way. The CSS holding the URL for the image has characters in the syntax which I can’t use:

The solution: use another regular expression snippet to pull it out.

If you’re following along, if you put console.log(bg) into your editor, it’ll return a clean URL.

Now that we have the URL, it’s time to extract the photo ID only because that can be used in the Flickr API to build the attribution URL.

Like I said earlier, I gave myself a very crash course in regular expression, so this very…very ugly expression1 strips everything except for the photo ID and stores it in a variable for later.

OK, we got the URL, then we got the photo ID. Now, it’s time to build the URL to request information from Flickr about this picture.

This is the URL that we use in the final step of the process to get information from Flickr and then build one more URL, which becomes the attribution link.

This last asks for JSON information from Flickr and then we use jQuery to apply it to a div created in the HTML to hold the information. Flickr URLs all have the same structure, so building a link back to the owner’s page is easy. I just pulled out their user ID number and reattached the photo ID we grabbed earlier.

If you want to play with it yourself – changing the photo and everything – you can do that in this CodePen demo I set up during testing.

This is a lot of work to automate the link backwards, but hopefully, it’ll make it easier to add attribution back with every picture, not just ones you remember to grab information for. Again, this only work with Flickr at the moment, and only for featured images at that. I’m planning on expanding this to any image in a post pulled from Flickr as soon as I have time. Or, you could do it. Just share it back when you do.

1. no one said code had to be pretty to work

A Second Look is Often More Revealing

Sometimes the simple challenge to think concretely about abstract concepts can be effective.

Sparks of Genius, p. 64

Perception is how our mind interprets data. Those interpretations are influenced by our surroundings, experiences, and biases. Root-Berenstein (1999, p.43) point out that “objective observation is not possible” because of the own influence our mind has on our senses and how they interpret information from observations.

I started this exercise by thinking about how we make observations in the biology classroom. Much of high school biology is focused on micro-scale systems – cells, molecules, etc. Observation of these systems often take specialized equipment which allows us to diagram, document, and otherwise describe what we see. I had a hard time reimagining how we experience those systems in meaningful ways, so I shifted my thoughts to macro-scale observations which relate to structure and function.

creative commons licensed ( BY-NC-ND ) flickr photo shared by gingerbeardman

A car’s structure helps it function effectively as a mode of transportation. We can look at diagrams and plans for different cars’ structures and what their likely function is (eg. comparing a minivan to a drag racer). But a car is so much more than functional. A car can provoke emotional reactions – gut feelings about it’s carness.

Perceiving is much more than just observation. The smell, feel, and sounds in addition to visual information help us form an entire picture. The car example I described is something we can all relate to. The feeling of acceleration, the smell of the gasoline…each adds to how we experience a car. The same can be true in the classroom.

Biology is a collision of abstract and concrete. If our metabolic processes were to shut down – an abstract idea to students – we would die in very concrete terms. Unfortunately, in many classrooms – mine included – the reality of concrete biology is lost due to the hyper-focus on abstract ideas. Students only see life as described through a textbook. Michael Doyle is a biology teacher in New Jersey who often writes, “stuff is stuff…nothing can change that.” Even though that stuff is very small, it’s still there, and our students need to experience it in new ways.

Diagrams and models are important, but there’s a lot more to things that what we see at first glance.


We cannot focus our attention unless we know what to look at and how to look at it.

Sparks of Genius, p. 42

There’s a concept in biology which says that structure and function are inextricably linked. In fact, you can boil down any part of the study of life into looking at the structures of plants, animals, insects, cells…even molecules – and analyzing what they do in their environment. For instance, the structure of DNA – repeating nucleotides in specific sequences – makes it uniquely adept at storing information. Structure and function.

Much of biology is done with our eyes. We have to look at a structure or observe a behavior in order to find the links. Analytical tools and measurements are a key components of studying living systems. Smell and hearing also play a major role. If you talk to an ornithologist, most of the identification they do in the field is based on the bird’s song because seeing them through dense foliage is difficult.

Rather than discussing biology, let’s use a more accessible model: a car.

creative commons licensed ( BY-NC-ND ) flickr photo shared by gingerbeardman

Cars are described all the time with terms like “horsepower, “average MPG,” and “torque.” You can look up specs, schematics, and plans online for the newest models. Top Gear, a top-rated British television series specializes in reviewing luxury and performance cars each week (among other things).

Let’s get visceral.

Perception is more than seeing what’s in front of you.

Loops, Algorithms, and Headaches


When I got into coding, loops were one of the more difficult tasks for me to get the hang of – especially iterating through conditions. Part of my struggle is that I made my loops too complicated…I tried addressing symptoms, not the overall desired behavior.

When I jumped into the Noughts and Crosses game, my algorithm was seven or eight steps long…I tried to account for each potential play as a ladder. Needless to say, I lost a lot of games. So, I simplified. I cut some steps. And lost again.

In college, a friend of mine was programming his own tic tac toe game as part of his CS master’s program. He explained the tree his program would use to make the best possible move. In it’s final state, it would always win or draw…never lose. To make it more interesting, he added a line to create a mistake at a random interval. It at least gave the human player a chance to win.

I came across an article explaining the Minimax algorithm. In short, it looks at a game state and finds the path which leads to a win or a draw. At the same time, it assumes that the other player wants to make us lose. It sounds confusing, and it certainly is, but the article linked did a great job explaining the principles. Ultimately, computers can be good at Tic Tac Toe because it can quickly build a move tree and execute the path to the best result.


I went back to Naughts and Crosses and took another stab. What was my desired goal? It wasn’t to win…I couldn’t win for two reasons: the game’s AI was probably using the minimax algorithm, and 2) I play second. It’s a significant disadvantage because I only get four board spaces while the opponent gets five. If I can’t win, I can try to force draw. I was able to make a simple program:

  1. Always make sure I don’t lose. Block the opponent’s three-in-a-row first.
  2. If they aren’t going to win, can I? Go for three in a row.
  3. If I don’t need to block, and I can’t win, just pick a free space.

Changing my approach was immensely helpful, because I didn’t have to worry about “what if?” moments. It finally clicked in my head – establish a general choice and iterate down the list to match your case. The algorithm I picked wasn’t perfect – I still lose about 30% of the time, but it’s much better than my earlier attempts.


I like to tell myself that I enjoy thought problems. They get in my head and I have a hard time focusing on things. I’ve also learned (as explained above) that I need to keep it simple.

The Suitcases took me a while. Rather than writing it out, here’s a diagram of my solution:

I found the Pancake puzzle to be easier, probably because my daughter plays with stacking cups and blocks. I was able to get them ordered from largest to smallest in five flips.

The hard part of this task wasn’t finding a solution…it was to find a solution in the most efficient way possible. It’s easy to come up with an answer or a method, but that doesn’t mean it’s the best way to accomplish the task. To be totally honest, I wish the prompts hadn’t given as much information as they did. Once I knew what path to head down, I felt like I was stuck in one mindset. With students, we always face the danger of leading with too much information and boxing in their methods. Problem solving needs to have an ebb and flow of success and failure. The challenge is supporting students through the process of failure rather than labeling their work as a failure. There’s a major mindset difference, and it links back to Computational Thinking as the process of problem solving.

Prototypes and Constructing Models

Each year teaching chemistry, I made it a point to my students that everything they learn over the course of the year is based on observation and best guesses. Up until 2009, we hadn’t actually seen a molecule or an atom…they’re just too small. What we can see is how they behave and change when stressed by an environmental factor (temperature, pressure, etc). By observing how substances change and looking for patterns, we can make pretty good guesses about the physical properties of very small pieces of matter.

A staple of any chemistry class is modeling molecular structures with the old wooden ball-and-stick model sets. Students look at molecular formulae and converting them into a structural formula on paper and a physical model. One year, I had a class turn it into a race to see which team could assemble the series of structures the fastest. The level of abstraction was high as students learned about bond formation, stability, and proper orientation of atoms. There was also a good deal of debugging with each submission because something was wrong, but I didn’t say what was wrong.

I enjoyed the rapid-pace building of models…students had fun and it broke up the monotony of class in the middle of the semester. The problem was that students didn’t internalize the ideas. The rapid prototyping was without structure and haphazard rather than thoughtful and methodical. I decided to shift the idea to the lab.

Limit the input in order to maximize the output.

I wish I’d run all of my labs this way.

Students had a simple task: find the mass of copper you produce. There were no handouts, there were no demonstrations. I wanted to see how groups would handle having very little information. What I saw was well thought out problem solving strategies. Each group walked through the problem step by step, coming up with solutions at each roadblock. Our class was only an hour long, so they had to work quickly to find a usable procedure. I was thrilled to see students trying their ideas in small scale before rushing to a larger, quantifiable sample. Filtration methods were tested. Heating was explored (to speed up the reaction). When they found something that worked, they started from the beginning, following their outlined procedure.

Groups who heated their reaction compared data with groups who didn’t. We then took those differences, plotted them on a graph, and talked about kinetics. There were graphs shown and best-fit lines plotted. I couldn’t have segued it better had I planned it out from the start.

My students and I had stumbled on computational thinking strategies before we knew what they were. Science is a process, and the problem solving techniques practiced in the lab are the same techniques used in programming, art, music, investigative reporting, storytelling…the list goes on. Grover & Pea (2013) talk about providing working in a “low floor, high ceiling” environment in order to promote problem solving. Students approached the problem easily and were able to reach much higher areas of thought as their solutions panned out.

Students need opportunities to problem solve in order to learn how to solve problems. By limiting the information available as well as leaving room for experimentation, my classes had a chance to look at a task from many different perspectives.

Game Theory and Computational Thinking

Game Theory

Games and learning go hand in hand. Children learn social interaction, communication, and even motor skills through playing. Remember, Piaget and early learning theorists broke learning down into formal and informal actions. Play is very much in the informal category, with school in the formal setting. Lately, the gamification movement has pushed to make formal instruction more like a game; emulating game mechanics in learning can have positive effects on overall understanding, engagement with, and recall of information.

I have to admit, I’ve been apprehensive of gamification due to poor implementation and a shallow approach focused on rote instruction disguised as games. Chris Hesselbein of IGNITEducation pointed me to an article by Joey Lee and Jessica Hammer (2011) in which they define “gamification” as “the use of game mechanics, dynamics, and frameworks to promote desired behaviors.” Thin slices – like badging – have made their way from business (FourSquare, etc) into the classroom (ClassBadges, Class Dojo). Specifically, Lee and Hammer note that gamers “recognize the value in extended practice,” develop persistence, and hone problem-solving techniques. However, they argue that “intuition” has brought basic game mechanics into schools, but a deeper look is necessary.

By harnessing the innate power of games, you can certainly begin to introduce the concepts of CT in a safe, supportive environment. In particular, Cognitive games ask players to “explore through active experimentation and discovery,” (Lee & Hammer 2011). In essence, experiment until you get it right. This approach – as in LightBot – is very effective for pushing students through the computational steps.

Gaming and Computational Thinking

I’m not going to dive deep into each of the ideas within Computational Thinking, but rather look at the game LightBot and how it relates to each component.

Symbols and Abstraction – All games involve abstraction. in LightBot, you give commands through simple glyphs. Your mind has to consider each command and visualize what the robot will do before making decisions. Barr & Stephensen (2011) note that “students are not tool users, but tool builders,” and LightBot gives students the tools necessary to build a working solution from nothing.

Decomposition – When I played the game through, I found that breaking each board down into straight runs helped me find a working solution. Corners were where I made mistakes, so working up to each corner helped me solve chunks in order to find a solution for the whole. Grover & Pea (2013) point out that a core idea of CT is “thinking like a computer scientist” to solve a problem. Thinking through dependencies before you can move in another direction is an invaluable skill in coding and something that computer scientists (or even hobbyists) learn very quickly to solve problems.

Efficiency – Segueing in from decomposition, efficient code is the goal. Physical limitations – like storage space or RAM – are present, but there is a sense of pride when you not only solve a problem, but when you solve it well. I read StackOverflow regularly for coding help, and it never ceases to amaze me at how tenacious some discussions get when users are debating the most elegant way to solve a problem. This also hints back to two main questions: “What can humans do better than computers? What can computers do better than humans?” (Wing 2006). By thinking through efficient and elegant solutions, my program will be that much better at doing its job.

Debugging – Depending on your personality, this is every programmer’s favorite or most loathed word. Debugging can be as complex as a restructure of code or as simple as finding a missing semicolon. Iteration and close reading are key in this process. It also requires that we think through what the program should be doing and test it against what it is doing to find clues. In fact, debugging alone combines all other aspects of CT as a capstone to any project. Grover & Pea (2013) note that there has been some research exploration into the idea of debugging as assessment because of the myriad cognitive tasks taking place parallel to one another.


Barr, V., & Stephenson, C. (2011). Bringing Computational Thinking to K-12: What is Involved and What is the Role of the Computer Science Education Community? ACM Inroads, 2(1), 48-54.

Grover, S., & Pea, R. (2013). Computational Thinking in K–12 A Review of the State of the Field. Educational Researcher, 42(1), 38-43.

Lee, J. J. & Hammer, J. (2011). Gamification in Education: What, How, Why Bother? Academic Exchange Quarterly, 15(2).

Wing, J. (2006). Computational thinking. Communications of the ACM, 49(3), 33-35.

Veja Du

Trying to represent a familiar object in abstract ways is harder than you’d think. The goal of this particular assignment was to take three photos of an everyday “thing” and see if someone could figure out what it is. Rather than just posting a gallery, I wanted to have some more fun. As you scroll to each box (go slowly!) a picture will be revealed one at a time. Can you guess the object in one? Two? Or will you need all three?

the first one
the second one. have an inkling?
this is your last chance.

How many clues did it take you?

Computational Thinking, Revisited

This is a follow up to my first post on Computational Thinking. For a background, go check it out before reading further.

I’m often victim to my own ignorance, and I think to be good thinkers, we need to fall prey to preconceived notions and half-formed thoughts. They give a lens through which we can analyze and consider areas of growth. To me, Computational Thinking (CT) was simply working in ones and zeros. Papert’s exploration of CT in Mindstorms has helped me connect philosophical ideas with actions which can be applied in the classroom.

Admittedly, my education psychology is a bit rusty. Of course, Piaget and the usual suspects (Skinner, Bloom, Gardner, Maslow, etc.) are familiar names, but the nuances of their ideas have faded. In particular, Piaget’s theory of learning as a formal process and the challenge that arises when we look at patterns of learning in children fascinated me. Papert makes a compelling connection between CT (programming, in particular) with learning a language.

Children learn based on the metaphors and cultural symbols surrounding them, which is why language is one of the first things to emerge. They are surrounded by speech and text. Words represent objects and become more abstract as they begin to understand the complexities and interactions between those symbols. “Learning languages is one of the things children do best,” (Papert, 1993, p. 6), and initially, without formal instruction. Applying the same ideas to math (which is the basis of the metaphor), children should be able to learn those abstract ideas at a very young age. Computers allow for that immersion to take place.

As for programming, Papert notes that building a computer function is analogous to things we do every day without thinking twice. The process we use to sort objects is the same thing a computer does as it runs through a loop. If that relationship can be experienced by students, they will begin to see programming as not a skill, but a culture, and something which will feed into all areas of their lives.

Computational Thinking should also inform instruction and feedback as well as fundamentally change the way students “think about thinking and learn about learning” (Papert, 1993, p. 23). In some ways, our educational system has taught students a rudimentary version of programming: it’s “right” or “wrong.” When computational thinking is introduced, the right/wrong dichotomy is replaced with “can it be fixed?” Learning is a process, and not one that the current educational system teaches very well. When students can learn through metacognition and reflection, we don’t have to wait for systemic change to enact reforms.

Finally, Papert recognizes that thinking “like a machine” is dangerous and should be avoided. While the concern is legitimate, it is often reductionist and misses the points of different methods of thinking. Papert says:

There are situations where [a step-by-step, literal mechanical fashion] is appropriate and useful…By deliberately learning to imitate mechanical thinking, the learner becomes able to articulate what mechanical thinking is and what it is not. The exercise can lead to greater confidence about the ability to choose a cognitive style that suits the problem (1993, p. 27).

In other words, we need to be teaching students different ways to analyze thinking, and one way to do that is through immersion with computers and problem solving in their language. Learning is multi-modal, and given the availability of computing devices and ease-of-entry for learning these languages, the implications for today’s educational system – 21 years later – are monumental and ripe for implementation.


Papert, S. (1993). Mindstorms: Children, computers, and powerful ideas. New York, NY: Basic Books, Inc.