Introducing Computational Thinking

For any life sciences student in 2016, we should be introducing computational thinking as a formative skill, like arithmetic and reading. In our current python programming course, we know what it looks like to teach ‘tools’ in the classroom. It’s easy to fall back to teaching programming from a very practical perspective. In the future, I’d like to ask students to take more responsibility outside of class for learning python syntax through an online environment so we can spend more time in the classroom coaching them in problem solving and computational thinking. So this week I’m thinking about “What does it look like to teach computational thinking in the classroom?” How will the class be different by taking much of the tool learning out of the teaching time? This can be done without programming, which makes this approach a good fit for beginning programmers to develop their problem solving skills. My explorations may or may not impact what I think we’ll take online, but will be important to shaping the portion of the course that remains in the classroom. I am looking for resources to share with students about this new approach and to reset their expectations for what they are going to learn during class time, and I’m also looking for how others have accomplished this shift in their course.

I looked for models of the types of material, resources, instruction to include in a course emphasizing computational thinking. Some of those resources are posted to by diigo library. Somehow at the beginning of this assignment, my googlefu advanced search happened upon a 2006 article by Jeanette Wing, who is the director of the Center for Computational Thinking at Carnegie Mellon University. Her article is an easy to read description of computational thinking, and is an example of the type of reading we should be sharing with students in the first few days of the course to re-orient their goals away from syntax and line spacing and towards learning a new set of ‘mental tools’ that reflect the computer science approach. We need to be talking to students less about programming, and more about process: abstraction, a moderate collection of computational concepts, and common computational practices (iterating, testing/debugging).

To develop a computational thinking mindset, we will need new class activities and materials that demonstrate each concept and provide students with an opportunity to practice the approach initially without using a computer. I am starting to identify concepts and the way we might approach them, sometimes with real world examples and then specific bioinformatics implementations. Just scratching some thoughts down here along with some resources that might be useful:

  • Converting a biology problem to a computational problem.
  • Identifying the goal and subgoals of a problem. I found Google for Education resources for exploring computational thinking. There is a lot to dig through here, much might be for a younger audience. ClustalW as an algorithm is an example that uses pairwise approach to progressively build a multiple sequence alignment. [Note: As I built this list, I saw some of this material may be more relevant to their next class, BNFO 301 Introduction to Bioinformatics, and this is a good example.]
  • Giving sequential instructions. Have the instructor ‘robot’ demonstrate a simple task like how to brush teeth based only on instructions from students. The example is for younger students, but could easily be modified for college and group work. Students will initially do this imprecisely and need to learn to give very clear instructions for the computer to complete the task they want. Subsequent examples will be bioinformatics-based.
  • Practice loops. I like this MIT video about iterative vs. recursive processes using eating a bowl of cereal to illustrate both techniques. Pipetting and PCR are great lab examples of iteration and recursion.
  • Explore parallelism. I can see timing the class to complete a real world or bioinformatics task on paper one at a time vs. all at once. Here is a neat video about creation of a sculpture that visualizes parallel computing made by collaboration between a computer scientist and an artist at Virginia Tech. Bioinformatics example – talking about genome analysis prior to implementing a program.
  • Conditional statements. The action elements. Explore how each are used to control workflow in programming.
    • Boolean and arithmetic operators/Transition to evaluating true/false of objects
    • This topic lead me to a great resource of python specific resources! This is “Interactive Python”, an open source, online resource that seems to include windows for practicing python as well as self-assessment of understanding. I’m really excited about seeing more of the material here.
  • Search for patterns. This video provides a great hands-on exercise students could use to ‘build’ their own pattern matching algorithm on brown paper. Students use many rich datasets in the class, and some background in the structure and content of the data is required for them to be able to approach a problem.

I still don’t know what teaching computational thinking will look like. This will take quite a while to work out, and presumably each of these would be developed into a module. Once students are working on programs, each class should feature the same set of steps to approach a problem- decomposition of the problem into manageable parts, pattern recognition, and then algorithmic design using a series of ordered steps. This is a habit of the mind that not only should help our students become better bioinformaticists, but is also transferrable across a wide variety of life experiences. Along the way I found a great video tutorial to use for my current class in phage discovery!

Comments are closed.