Tag Archives: programming

Sheer Joy

There is no greater reward for a teacher than when a class of students is enthusiastically engaged in learning and expresses delight in what they are doing. When it comes in the last class on Friday, it’s even sweeter!

This is awesome!

It’s so cool!

I want to do this all day long!

These were the comments from my students at the end of the day and week as they reluctantly packed up their laptops and headed out of the door towards home. They had been thoroughly engaged, both mentally and emotionally, and the energy in the room was amazing.

The Computer Programming class at ICS has grown over the years from around 6 students to now 23 students learning the basics of programming. We’ve used various tools and techniques to teach programming, but we’ve settled on using Processing as an introduction to Java and object-oriented programming (and hence a good introduction to the IB Diploma Computer Science course) …but it is also engaging and appealing to a broad range of students.

In Friday’s class, students were building their first program. They had explored Processing and seen what kinds of things could be built. They’d looked at the code – a mess of {s and ;s and weird words like void and println. Now it was time to dig in and get started.

It was a wild ride. I wish I’d had the time or presence of mind to take photos and videos, but I was too busy bouncing between presenting programming basics to the whole class (what on Earth are those { } for??), helping individuals trouble-shoot, high-fiving kids who were eager to show what they’d done, etc. Every single student had a huge smile on their face and were eagerly sharing with their tablemates what they were doing & asking what the others were doing.

It is that kind of experience which teachers live for.

processingI’m lucky that I teach a practical, engaging course like computer programming. Students are creating new things and actively engaged in learning. They get to immediately practice and implement what they are taught and get immediate feedback when it works (or doesn’t). Sure, there’s a fun element to it (and Processing makes programming fun from the start), but the main thing is the success. They write some code, click “run” and immediately the computer does what they tell it. Their code creates an image on the screen as they imagined. Or it doesn’t, and they have to figure out what they need to do to make it work they way they want. Click “run” again – instant feedback.

My favourite times were when students would ask me, “what would happen if I did ______ instead?” I got to smile broadly and say, “Don’t wait for me to tell you. Try it out!” The students were experimenting and trying things out – a real inquiry activity. I had to give them enough information to make sure they got working programs, but they could alter the data and order of commands to make different programs. As I said to them, “The worst thing that will happen is you’ll get an error message and you’ll need to either fix it or change it to something else.”

If only teaching was like this every day. The reality is that this kind of energetic and energizing lesson is a rare treat. Teaching is one of the most demanding, emotionally draining and stressful jobs around. It’s seriously hard work. (And deadly serious work!)

But when a lesson goes like this, a teacher is on top of the world.

The problem is NOT the computer

We were checking in to board the plane, and the woman at the check-in desk told me our seat assignments. “That’s not right!” I said. “We’re a family of three, traveling with a child. You cannot give us three separate seats.” The woman apologized, but said that the plane was full and she could not give us three seats – or even two seats – together. I argued and became insistent that we be given seats together, and she brought in her manager. The manager was able to do some rearranging and gave us two seats together for one parent and the child, and another seat nearby. I thanked her for accommodating us and said that the airline policy should be that families – especially with children – should always be seated together. That’s when she said it:

“The computer assigns the seats. That’s the problem.”

Before steam started coming out of my ears, I swallowed hard, counted to 10 (in binary) and then calmly and patiently explained to the woman that the problem was not the computer.

Perhaps nothing reveals the great need for Computer Science to be taught to every student in school than this very common misunderstanding. People in every job and every walk of life use computers every day. And many of them fail to understand fundamentally how computers work.

Computers do not do things magically, and they don’t operate on their own (yet). Computers do exactly what they are told by human beings, and how they accomplish those tasks is also controlled by human beings. That is called programming.

In this case, the airline (or their programmers) instructed the computer (their servers) to assign seats to passengers once they book a ticket (or when they check in or whenever). Seemingly, those instructions (program) prioritized business travelers, frequent flyers, people who checked-in early, etc. There seemed to be no provisions within the program for families or children.

The solution to the problem is very simple: adjust the program to ensure that children traveling with families are always given seats next to their parents (or at least one parent). Sure, this might interfere with frequent flyers choosing their ideal seats, but the program can be written to maximize the choices for prioritized customers without sacrificing at least two adjacent seats for every child traveling with family.

The problem does not come from the computer. The computer is only doing what it has been told to do by the airline’s programmers. The problem comes from the programmers not being told to prioritize children by the airline.

Too often people blame “the computer” when things do not go well. It’s more than just “blaming the messenger” – it shows that people really do not properly understand how computers work. It’s a mystery to them, so they can blame computers for mistakes .(And also presumably to praise computers for serendipitous good fortune – “Congratulations! The computer has selected you to be upgraded!”) If people truly understood that computers were programmed by human beings to produce the results they come up with, then they would not only be better able to explain problems but also feel empowered to fix those problems. Imagine the manager’s response if she had really understood the way computers work: “I’m sorry for the trouble. The computer system has obviously been programmed poorly to not take into account children traveling with their families. I will make a recommendation to my superiors that the program be revised so this problem doesn’t happen again.”

Aside: I know I’m whining a bit about my own situation. However, I’ve been on airplanes where air hostesses were scrambling to rearrange passengers after boarding to try to unite families who had been separated by “the computer.” It’s a problem that affects many airline customers as well as many airline employees. I could write about the dismissive treatment of passengers by airlines, but I’ll have to wait until I can do so calmly!

 

photo credit: andreas160578 from Pixabay (CC0/public domain)

Children of Support Staff learn programming

africa-code-week-tagline-date-urlFor part of our Africa Code Week participation, we wanted to provide some opportunities for children other than our students to learn some programming skills. ICS students have many opportunities to learn programming skills: in classes, in after-school activities, on our robotics team and in various events we run through the year. Students in local schools don’t get the same kinds of opportunities.

Leulseged Assefa, our MS Computer Science teacher, decided to host a session on a Saturday morning for children of our school’s support staff. It was hugely popular: the session filled quickly and staff who missed the cut-off asked for additional sessions to be held! We had nearly 30 children, from ages 11 to 17, spend several hours on a Saturday morning learning to build games and animations using Scratch. A few ICS students helped out, answering questions and making suggestions.

The children were all excited to be learning new skills and using new tools, and many asked if they could come back the next Saturday! We’re working on plans to make this a regular outreach for the children of our support staff. We’d love to see Ethiopia’s answer to Bill Gates or Mark Zuckerberg come out of this group of enthusiastic children!

Cross-posted from my school blog.

ICS students participate in Africa Code Week

This year the first ever Africa Code Week was conducted across the continent, aiming to get children started with computational thinking, programming, and using computers as devices to build software, not just use it. Thousands of children in over a dozen countries had the opportunity to start programming. ICS joined in this activity to help encourage our students to do the same, and we reached out to other children here in Addis Ababa to get them working with code. One week or one session will not make a programmer out of a child, but it can start the process. We’re planning to keep this initiative going through the year, not just within classes, but in fun, engaging activities outside school hours.

 

Cross-posted from my school blog.

Africa Code Week & the value of learning programming

africa-code-week-tagline-date-urlThe first week in October has been designated Africa Code Week, with a push in several countries across the continent to get children building their own programs. There are a few initiatives in Ethiopia, and ICS is joining in. We’re sponsoring a few events next Saturday (10 October) to get our students and some other children learning how to make programs that do what they want, rather than simply using apps that others have built.

There’s been a big push worldwide to get people programming. “Everyone can code,” proclaim advertisements, government officials, teachers and students. It’s a simplistic message which provokes pushback as well as support. People argue that not everyone needs to become a programmer, and that saying that everyone can and should learn to code is ridiculous.

The truth is that everyone uses a computer in their daily lives not only for work but also for leisure. For many, they are mysterious machines that work magic. People who learn some programming skills get that magic demystified and explained: for them, computers are comprehensible machines that work in understandable and predictable ways.

The art of programming also builds in students a logical way of thinking that supports problem-solving. Computational thinking is a way of analyzing a problem or situation in ways that break it down into processes that a machine can perform. This is the skill that all programmers develop, and it helps people better understand complex problems as well as get machines to solve those problems.

JpegFinally, learning to program is a way to gain mastery over computers and hence one of the driving forces of our economy and society. Being a programmer is a lucrative and highly sought-out skill, not only in high-tech businesses but increasingly in other fields. Economists write programs to analyze data. Architects write programs to model building stresses. Geographers write programs to simulate geological processes.

ICS is committed to getting our students to be inquisitive and creative, using computers not only to communicate and collaborate but also to analyze and problem-solve. Learning to program is a part of that, and we aim to have all of our students develop some skills in computational thinking and computer programming. Our goal is that those students who wish to pursue that as a career can do so, and that others will have a better understanding of how computers actually work.

Cross-posted from my school blog.

Robotics: making, programming, competing

You can see it in their faces: the broad grins, the light shining in their eyes. You can hear it in their voices:

“This is so cool!”

These are the signs of students who have successfully done something that they’ve never done before. They’ve made something themselves, and got it working by themselves. This is the joy of the “maker” movement, the appeal of robotics, the push to teach programming in all schools.

I see it regularly in computing and robotics classrooms at ICS, and here it is in our High School robotics after-school activity. This small group of students are learning to build and program robots. It’s a small start for them: they got the robot to move in a straight line and then spin around in a circle. But those small steps start the students on a long and exciting journey.

robotThis is the process of building and making things for themselves. Many of us are content to read other people’s content on the web, watch other people’s videos, play other people’s games, etc. Some – the movers and shakers of today – are driven to actually create these things. They make new websites, create new games, build new tools. Robotics is part of that: the process of assembling a robot is an act of making and tinkering, which helps not only to lead to work in engineering and other fields but also to success in problem-solving. Then, once the robot is built, the students have to write a program to get the robot to do what they want. It’s a precise task, and one that requires the students to think through a task in logical steps, write out the code and then check it for errors.

I’ve written about programming before, and its value in modern society. Perhaps Douglas Rushkoff sums it up best by saying that people who can program are the true literates of the modern age: the writers who create new things compared to the majority of us who are simply users. These students are on the journey to being the leaders of the world: the ones who can build the tools and systems that the rest of us use.

It’s exciting to see the students start down that road …and see the glee in their faces when they get the machine to do what they want. There’s an extra bonus incentive for them: competition. ICS is part of ISSEA (International Schools of Southern and Eastern Africa), which primarily sponsors sports tournaments. (Our upcoming track & field event is an ISSEA tournament.) However, the group has branched out into Arts events and – starting last year – a STEM competition in which students are challenged to solve mathematical and scientific problems, including building and programming robots. Last year, our students traveled to Harare to compete, where the robotics team won the KISS award despite problems knocking them out of the competition. This coming April our students will head to Lusaka, and they hope to do better!

We’ve started on our journey. It’s exciting to think about where it might lead…

Cross-posted from my school blog.

Anuther kase four programing

Can you see the error in this code?
Can you spot the error in this code?

As I go from student to student, helping them debug their program, it strikes me that there’s a very simple reason why teaching programming is a help for all students. So many of them have simple typographic errors: three n’s in “running,” leaving out the n in “column,” etc. I give them some hints (often simply saying “spelling error!” suffices) and they stare at the screen intensely until, with a smile, they find the mistake. That’s when I tell them: they’re going to be so good at proofreading their work in all their classes!

There’s probably a good research question there: do students who learn to successfully program apply their proofreading and error checking skills in English and other classes? It’s something I’m going to track with my current students …meanwhile, I’ll just continue to help them develop careful spell-checking and proofreading skills.

Programming FTW

trophyThis is a cross-post from my personal blog, Constant Safari.

“Victory is mine! I drink from the keg of glory. Bring me the finest muffins and bagels in all the land.”
(Josh Lyman/Aaron Sorkin)

It was a simple request. An administrator wanted to analyze all the assessments teachers had entered into the assessment calendar over the year. He wanted to look for trends, get some statistics, etc. His assistant wanted to look at the submission dates and see when people were posting things.

No problem. Our system exports calendar data. Click, click, click. Here you go, sir.

<crickets>

Calendar programs export calendar files. ical files. (.ics, to be exact.) They’re intended to be read by other calendars. Not spreadsheets.

This is what an appointment looks like in an ical file:

event

This is not pretty stuff. But it is analyzable. I showed the admin where the data was that he wanted. He’s a savvy guy and not afraid of getting his hands dirty with back-end computing, but the look he gave me was grim. There were thousands of events in this calendar. And he was going to do this every year.

No problem. I said. I’ll clean it up with Python.

About an hour (most of it QA & me looking commands up in a reference book) and 34 lines of code later, I was able to offer him the same data. Only this time it looked like this:

cleanedup

And, I told him, we could now do the same data cleanup any time he wanted to look at information in a matter of seconds.

Programming is not just for software developers!

Please note: I am not a developer. I do not consider myself a “real” programmer. I dabble. I teach high school students to program. I know my way around a program. I’ve coded various things but nothing terribly serious.

The program I wrote is not highly technical coding.  One of my high school students could have done it. (I showed it to them the next day. They all got it. One student suggested an tweak.)

ANYBODY can learn to do this. And it can be very practical. Al Sweigart has written a new book about how non-developers can write simple Python programs to automate boring real-life tasks. (Read about it here.)

EVERYBODY should know how to do this. (At least some of it.) Computers are here and they’re not going away. Learning to program them in this age is like learning to read was in centuries past. Christan Genco makes the case (far better than I could) in this TEDx talk:

If you’re ready to try, start out with Dr. Chuck (Charles Severance)’s Programming for Everybody course. He’s a great teacher and will get you going with Python.

Thank you. I’m going off now to slay a dragon.

Programming FTW

trophy“Victory is mine! I drink from the keg of glory. Bring me the finest muffins and bagels in all the land.”
(Josh Lyman/Aaron Sorkin)

It was a simple request. An administrator wanted to analyze all the assessments teachers had entered into the assessment calendar over the year. He wanted to look for trends, get some statistics, etc. His assistant wanted to look at the submission dates and see when people were posting things.

No problem. Our system exports calendar data. Click, click, click. Here you go, sir.

<crickets>

Calendar programs export calendar files. ical files. (.ics, to be exact.) They’re intended to be read by other calendars. Not spreadsheets.

This is what an appointment looks like in an ical file:

event

This is not pretty stuff. But it is analyzable. I showed the admin where the data was that he wanted. He’s a savvy guy and not afraid of getting his hands dirty with back-end computing, but the look he gave me was grim. There were thousands of events in this calendar. And he was going to do this every year.

No problem. I said. I’ll clean it up with Python.

About an hour (most of it QA & me looking commands up in a reference book) and 34 lines of code later, I was able to offer him the same data. Only this time it looked like this:

cleanedup

And, I told him, we could now do the same data cleanup any time he wanted to look at information in a matter of seconds.

Programming is not just for software developers!

Please note: I am not a developer. I do not consider myself a “real” programmer. I dabble. I teach high school students to program. I know my way around a program. I’ve coded various things but nothing terribly serious.

The program I wrote is not highly technical coding.  One of my high school students could have done it. (I showed it to them the next day. They all got it. One student suggested an tweak.)

ANYBODY can learn to do this. And it can be very practical. Al Sweigart has written a new book about how non-developers can write simple Python programs to automate boring real-life tasks. (Read about it here.)

EVERYBODY should know how to do this. (At least some of it.) Computers are here and they’re not going away. Learning to program them in this age is like learning to read was in centuries past. Christan Genco makes the case (far better than I could) in this TEDx talk:

If you’re ready to try, start out with Dr. Chuck (Charles Severance)’s Programming for Everybody course. He’s a great teacher and will get you going with Python.

Thank you. I’m going off now to slay a dragon.

Global Codeathon

JpegClick. Click. Click.

“Look what I made!” “Oh, that’s COOL!”

Click. Click. Click.

“Hey, how did you do that??” “Here, let me show you!”

The buzz in the room was tremendous. Students were excitedly working on projects individually, working together to solve problems and enthusiastically checking out each other’s work. For us adults in the room, it was a busy and fun time: helping students, giving out praise and suggestions, asking questions, pointing out other students’ success.

This past Saturday, ICS participated in the Global Codeathon, an international competition/collaborative project. Students in grades 3-6 from international schools all around the world assembled in their respective schools to build games, simulations and other programs using Scratch, a free online coding platform built by MIT to help children learn computer programming.

JpegICS students came to the ES computer lab and dove right in. They got help from Middle Schooler, Abheek, as well as from Ms Alex and Ms Heran (and myself!) but the ideas, as well as the execution, was all theirs. They added “sprites” to their programs, gave them commands to move, make noises, change their appearance, and more. They had to act in one way when clicked on by the mouse, another way when keys were pressed on the keyboard. They had to think through how they could get the computer to move and animate things the way they wanted. It was hard, but it was fun!

Meanwhile, students in schools all around the world were doing the same. We had some technical difficulties, including a complete internet outage for the first 45 minutes, which stopped us from video chatting with them, but our students chatted with them on the “backchannel” chat line, and also got to share their work in two Scratch “galleries.” They enjoyed getting comments on their games from students in other countries, and had fun trying out other students’ projects.

At the end, Ms Alex and Ms Heran brought out pizzas and juice boxes for the tired but still enthusiastic programmers. You can’t code without fuel! All agreed it was a fun day …and we’re looking forward to an even better time (with a better connection!) next year!

Jpeg