At Foshay Learning Center in South Los Angeles, every student in the 10th grade enters an academy for the next three years of high shool: Finance, Technology or Health careers. I run the Technology Academy and have the luxury of teaching my students three years in a row. This way we can work together on a comprehensive curriculum that prepares my students for college and careers.
This year I am looking for a programming language that will allow my 11th graders to create digital games that they can then show off on their digital portfolios. This is the second course in a series of three, and is focused on Game Design and Production. Last year the junior class in the Foshay Tech Academy completed the Exploring Computer Science curriculum as 10th graders, where they followed the pillars of equity, inquiry, and computer science to build up their programming and problem solving skills. The final senior course requires that they build and market an original app idea.
My classroom models the problem solving process that is integral in computer science and programming, which is why I constantly review and revise my curriculum and approach. Here's how the process works:
1. UNDERSTAND THE PROBLEM: Computer Science and game design are growing fields and students need access to these courses. Code.org has made a national splash raising awareness about why it is important to teach students to code and to learn computer science. The expectation is that there will be a million more jobs than computer science students by the year 2020. Not enough of our student population is pursuing these careers, and the common sense behind that is this: if you are not exposed to people with the career in your home community and you are not exposed through school, then where would a person get the experience and establish the interest?
I also agree that programming is a fundamental skill, not only to breach the digital divide in careers, but also to emphasize problem solving, showcase multiple solutions to one problem, and build communication and troubleshooting skills.
2. MAKE A PLAN AND SOLVE THE PROBLEM: Over the course of running the Technology Academy and teaching the career classes I have moved through many programming languages with my students, to various degrees of success. Ultimately I want them to finish our unit in programming and understand the fundamental concepts and logic of writing, reading, and modifying code. It has been confirmed by my alumni who have told me that they had an easier time than most of their classmates in college with programming, based on the foundation they received in my class.
3. CARRY OUT THE PLAN: Two years ago I decided that my students should learn to make apps, and attempted to teach them App Inventor. Every professional who looked at the students' portfolio were so impressed with the live interactive apps the students were able to build and package to their phone and digital portfolios. However, the students did not feel the same level of success. They thought their apps were amateur and in the end they were not able to achieve the level of sophistication and complexity they desired.
Programming is a full time job and best done in pairs or teams; it is beyond expectation that high school students will achieve their goals if they only practice and work on it during the 4 hours a week that I see them. I realized that while most of the students could build the apps from the tutorials, they were missing the fundamental concepts of loops, conditionals, and variables that they need to build a solid programming foundation.
4. REVIEW and REVISE (repeat): Last year, my students experimented with new programming languages through the Hour of Code. The Code.org website offers some amazing tutorials and gives access to what programs are out there for people to learn on their own. The entire school participated and my students took on a leadership role. They assisted parents and middle school students with Lightbot and Angry Bird coding games designed for beginners. My students tried the more advanced options, and we discovered Python and Processing. Even though my juniors already had games they created through App Inventor, I needed something to teach them the key concepts and vocabulary of programming. I ended up registering all of my juniors to Grok Learning's international Python competition.
I thought the broken up challenges in the five week competition would engage and inspire the students. I was correct, for the first two weeks, during which the students were active and engaged learners. They challenged and assisted each other. The room was buzzing. But by the third week the challenges got much harder, and almost at once more than half the class was ready to give up. They thought the challenges should be conquered quickly and easily; they did not like that it required so many steps. They did not like that they had to think and work so hard.
I had to change the game in the classroom. They needed to learn that for developers programming is a full time job that requires attention to detail and patience, perseverance, and creativity. I had to find new tactics to get my students talking again. I made small groups that were led by a student who was further along, with the goal of letting them talk about the challenges that got them stuck, and working in teams to solve it. I had pairs of students go work through a problem in front of the class with the other students, offering up guidance and suggestions while they worked along from their computers. I made the students get into pairs and explain the code to each other line by line.
The realization was that online programs are amazing and helpful, but it is not enough to get an entire class focused and motivated. A teacher is still needed to facilitate and encourage. It is hard to learn anything without the communication piece, and an independent online course deceives the students into thinking that maybe they should be working alone.
In the workplace programmers are often given a partner to program with. They need to seek out solutions and advice. However, it is not a natural instinct. Time and again I see students stare at the ceiling when they are lost. They turn silent instead of investigative. They think it will just come to them (or not) and they would rather give up than risk exposing their questions.
I recently spoke with a creative software developer who told me that when he hires developers he always asks if they prefer to work alone or collaboratively. If they answer alone, then they are not hired - he said he would rather have multiple mediocre developers than a whiz who is not a team player.
Unfortunately, an online course is not the full proof solution. I can't just sit back and let them quietly work through the course. I have to facilitate to make sure they are engaged and moving forward. I have to keep track where they are and where they are struggling. It is hard not to step in and lecture. Instead I have other tactics: Every day we spend at least thirty minutes in paired programming and I will give them their partner for the day. The partnership is not lowest student with the highest student; in fact they are often close to the same spot. I tell them that the class activity is worth points based on how they communicate and work together for the day. Sometimes I tell the pair to go back to a certain lesson and take turns explaining the lines of code to each other. I know from experience that often they are just following directions rather than thinking through the program. It is amazing how engaged and articulate the students become when they are paired up and the greatest learning is when you explain your knowledge to someone else.
Teaching programming is important. However, it is challenging and takes a lot of revision and communication. Even if a life of programming is not in their future these troubleshooting and collaboration skills will follow them. Code.org is making programming more accessible to anyone who is interested. Some of the online courses offer certification upon completion. The Hour of Code is December 8 to 14, but it is always a good time to code.