Saturday, February 25, 2017

Kids, Keyboarding, and Coding



We’ve all seen kids struggling to find letters on a tablet or keyboard. They wave one hand back and forth across the keyboard looking for a particular letter, then poke at that letter, and then begin the hand wave again. It is painful to watch and yet, because there are no keyboarding or typing classes, there is frequently no option but for students to hunt and poke.



I’ve seen students pick up their tablets and try to use the talk-to-text feature for some of their work but then slam the tablet in frustration when they are not understood, and for a variety of reasons.



We want our kids to use technology but we don’t want the technology to be the point of frustration for them so there is value in spending time in a technology class to learn how to use a keyboard. It’s probably worthwhile figuring how to make that part of students’ learning experience. And if there’s no time before or during school, offer an after-school class that helps them learn how to type and then rewards them for being a fast and accurate typist. Unfortunately, we seem to be all about external incentives and rewards and I can’t imagine kids taking part in this without some sort of incentive.



As for coding, well, coding is a bit of a different story but kids can’t do a lot of things effectively on a tablet or laptop without keyboarding skills.



Why should we introduce coding at all? In May 2016, Joni Nguyen wrote:

For years, students around the world took typing classes, first with typewriters then with computer keyboards. This class was designed to help students develop the real world skills they needed to thrive after graduation. However, now knowing home row is less important than understanding HTML, and an employer will be much more excited to see “Java” on a resume than “types 120 words per minute.

Okay, maybe, but I think the value of kids learning anything about coding has more to do with computational and design thinking than the actual coding itself. Nguyen notes “Computational thinking is a method of thought that is used in computer sciences, but experts argue that it can also influence the way students solve any problem. Teaching coding may help improve the way students think about nearly everything.”

Years ago I taught computer programming. My students learned how to write code in old, OLD languages like Pascal, FORTRAN, and even Assembler. (Mmmm, assembler!) Some of them wrote elegant and efficient code. Others, well, not so much.

While most of them ended up in related fields, what programming also helped them learn about making choices to solve a problem efficiently and effectively.

So what’s this thing about computational thinking? Most automatically think it has to do with computer science and math. Computational thinking is, at its most fundamental, “taking apart a problem and figuring out how to attack it.” Now Diane Main, interviewed in this video, goes on to say that not only does it have to do with taking a problem apart and figuring out how to attack it, but also “using what we know about computation.” The video goes on to address the four components of computational thinking:
  • Decomposition: Breaking down data, processes, or problems into smaller, manageable part 
  • Pattern Recognition: Observing patterns, trends, and regularities in data 
  • Abstraction: Identifying the general principles that generate these patterns
  • Algorithm Design: Developing the step by step instructions for solving this and similar problems

It’s easy to see the computational elements, but I’d assert that some of these are systems thinking, design thinking, and/or logic.

Design thinking has five components: empathy, define, ideate, prototype, and test. Back, back, back in my coding days we didn’t call that first phase “empathy.” We called it “functional design” or “functional requirements.” A little colder, perhaps, but the purpose was the same. We were learning about the audience for the project, what the customer really wanted and needed, why. The more we learned, the clearer and more targeted our questions became as we helped the customer figure out what he or she really wanted or needed, and why.

Our design phase meant we started to draft how the project would develop. We weren’t writing any code yet, but we were figuring out what resources and pieces and parts we needed because we broke down the whole project into more manageable parts and focused on those parts individually. So yes, we took it apart and gradually put it back together again. That meant we often had to revisit the customer with additional questions or with recommendations because our functional design process helped us identify problem areas, or dead ends.

Eventually we would get to the prototype which would help everyone see whether or not the functional requirements and design processes met expectations. If not, well, that’s why this is a recursive process.

There are some who believe coding should be mandatory or should be accepted as a foreign language. For example, Tim Bajarin (Jun 2014) wrote he believed basic coding should be mandatory in junior high. He said,

While most people will never get under the hood to try and change the code of an appliance or device they use, by learning the fundamentals of creating the software code that runs our devices, a person will gain a greater understanding of how their devices work, and would be more inclined to go beyond their devices' basic functionality.

A coding class would also help them gain a greater understanding of how technology is designed and how software serves as the medium for triggering all of a device’s capabilities. This type of knowledge could be important in a future working environment where they're called upon to use technology as part of their overall job.

It goes without saying, but understanding how technology works makes it much easier for a person to get the most out of it.


I understand but I disagree. I don’t need to know how my microwave works to get what I need from it. I don’t really need to know how my tablet works to get what I need from it. I have no clue how much of my car works and I’m fine with that. I think most people go beyond a device’s basic functionality when someone or something else compels them, or curiosity simply gets the better of them.



Gottfried Sehringer (Feb 2015), vice president of marketing for Mendix, wrote that he didn’t believe we needed to teach everyone how to code. He went on to say, “Teach them how to identify and understand needs, as well as how to visually express logic. Teach them how technology works, so they can understand the realm of possibility and then envision game-changing innovations.”



There are ways to teach people how components of technology work without teaching them coding because, in my opinion, it depends on what we want and need them to learn. I think his first sentence is far more important: that we teach students how to express logic.



I was working with some second graders. One of the students wanted to help the student I was coaching. He said with some impatience, “Those numbers are five.” I looked up at him. “Yes, they are. How do you know?”



He gave me such a look. A cross between confusion and concern that maybe I didn’t know that 3+1+1 equals 5. So I asked him again and he explained to me, with great patience, how I could add the two ones and then add those to the three or how I could add one of the ones to the three and get four, and then add the other one to get five. He looked at me with some concern to be sure I understood and then smiled with relief when I said, “That’s absolutely right. Well done!”



My point is that he was able to express the logic, the process, of getting from 3+1+1 to 5. He knows it works that way because he knows what he’s been taught about the value of each of those numbers.



Computational thinking and design thinking introduce students to what it means to take a task apart, to figure out its components, to determine the requirements of each of those components, and then to begin to design a solution that meets the requirements of the components and the whole once the components are put back together again. This requires patience and perseverance, two qualities that can be hard to find in classrooms.



I’ve worked with some kindergarten teachers who use Bee-Bot in their classrooms. They’ve designed activities so students can practice their numbers as well as basic addition and subtraction. There are plenty of activities for students to learn and practice more by coding Bee-Bot. They have to figure out how many times to make it move in which direction. They are doing a lot of computational thinking without articulating specific steps. In an addition problem, they have to figure out the answer to the problem and then how to “program” Bee-Bot so he goes to the right number. When faced with an array of sight words, they have to figure out how to “program” Bee-Bot so he goes from the starting point to the sight word.



Focusing on coding inflates the importance of finding the “right” method to solve a problem rather than the importance of understanding the problem.



Basel Farag (May 2016) shares a story about a friend of his who won an international collegiate programming contest. Farag notes that the greatest thing he learned from his friend is the importance of understanding the problem to be solved. He writes:



This friend told me that even in the elite schools, students read the prompt to the coding problem only once then immediately code.


The year my friend won the championship he learned something: even those from elite schools dove headfirst into complicated problems, with code as their only weapon.


Meanwhile, my friend wrote his code only after thoroughly understanding the problem. He used almost all the allotted time to think about the problem. He did not write code until minutes before the deadline.


He became a champion.


He knew that banging out code would not solve the problem, but cool, collected problem solving would.



It’s not the coding that’s the magic. It’s thinking design thinking, the computational thinking, the basic skills of problem solving. That’s what our kids need to learn. As they learn that and realize that discoveries can come from good, old-fashioned problem-solving, they may begin to learn patience and perseverance.