Middle School Computing with Robots: 2009
Overview of the Middle School Experience
This past semester two groups of middle school students, ages 11-14, participated in a study wherein they were taught computing. The aim of the study was to attempt to elicit why people, particularly women, do not gravitate to computing, and attempt to change their attitudes towards computing in general. We used robots throughout the course in order to achieve this goal. The course met once a week for an hour and a half and met over the course of 8 weeks. One group was unable to finish the curriculum due to scheduling problems and only finished 6 weeks of the curriculum.
The following is a copy of each week's curriculum, the goals of the course, notes about each piece of curriculum, and conclusions about how the course ran.
Pre-Course and Other Logistical Notes
Total students: 12 (5 Girls, 7 Boys)
Age Range: 11-15, 6th through 9th grade
Originally, only students from one school, a girl’s school, were supposed to take part in the course. However, there was not much participation; only 6 students signed up, 2 of whom were in the 9th grade. The head of the school determined that students playing sports, which had already started, could not take the course despite there being no regular conflict between the two activities. This resulted in low participation. Though this implies that students would rather play sports than learn computing, we cannot make this assumption, however obvious it may seem. The commitment to sports had to be made earlier than the commitment to computing, which may have affected their decision. Because of low participation, we looked to another school to boost our numbers. 7 students from this school participated, all of whom were male and from the 6th grade. Though this number seems low, it is actually not: this school only has students through the 6th grade, and the class size of the 6th grade is 16 students, making the number of students in the class nearly 50% of the total class. In addition to this, it seemed that all the girls in the 6th grade played field hockey (a prior commitment), practice for which occurred on the same day of the class. The only male that did not participate in the class also had a prior commitment. In the middle of the course, the school scheduled a field trip to Bryn Mawr to do some computing with the whole class. The trip was a huge success, many of the girls, and the boy that could not participate, requested that the course be moved to a different day. Data on how many students would actually be interested in taking the class will be acquired very shortly.
3 students dropped the course, all of whom were female. 1 dropped the course stating that it was not what she expected. She only attended 1 class. Another 2 students dropped the course due to a new theater conflict 6 weeks into the course. This commitment was a larger commitment than computing, meeting everyday after school. One student was an actress, the other working on costumes.
The boys class started later than the girls class.
Originally, the girls group was forced to walk to Bryn Mawr because their school could not provide transportation. This cut 1/3rd, at times more, out of each class. After watching several classes, the school decided that they should provide transportation. It is not clear whether they had realized that it was absolutely necessary in maintaining the integrity of the course, or if it was really unavailable up until that date. Throughout the course, lateness was a problem with the girl's group.
Goals and Methods
Though teaching computing was the overarching theme of the course, the main goal of the course was to stimulate young people's interest in computing, and inspire them to go further in the field. That being said, one of the largest goals of the project was to make computing both an educational and but a fun experience
Academically speaking, the course focused far more on general problem solving and computing at a higher level than on things like syntax or mastery of the python programming language. For example, the course frequently claimed that having a correct and strong algorithm is the most important part of solving a problem. Additionally, the course attempted to have students master three areas of general computing: sequential reasoning (e.g. putting instructions in the right order), understanding of loops, and understanding of conditionals.
The class generally had the same format each time consisting of equal parts lecture (though participation was extremely encouraged), group activity, and an individual programming project. The individual portion ensured that students would have time one on one with a teacher. We found that having two teachers in the room was necessary to ensure that everyone got individual time. The group activities were very active and often kinesthetic. Activities were meant to stimulate the students, and keep them engaged and enjoying themselves. Each individual project was chosen because of their natural appeal, as well as the students ability to finish them within the session. The lectures were meant to address both visual and audio students. A print out, filled with pictures, of the lecture notes was distributed to students each day. Additionally, the lecture provided time for questions, to go through interactive examples, and let students share their thoughts with the class.
Strong Areas: Students really enjoyed having open discussions about what robotics and computing are, and what AI is. Some of them even had a grasp on what programming might be like and could express, in plain English, simple AI algorithms (such as solving a maze).
The students really enjoyed and often would not stop driving their robots around the room and doing the maze
Weak Areas: Because of the shortened time not all the students had a full go at driving their robots through the maze into the pyramid of doom.
Strong Areas: Like the girls group, the boys really enjoyed the open discussion questions provided for them and made very astute comments about programming and artificial intelligence and robots.
Weak Areas: Also similar to the girls group, the boys did not have time for everyone to go through the full maze, though most stayed a few minutes late to finish.
Strong Areas: The students had no problem understanding the concept that "robots only do as they're told" and formulating algorithms to draw shapes. Many of them made the observation that all of their code repeated, and asked if this could be avoided, almost predicting our next class. Many of them were also able to draw multiple shapes.
A particularly insightful moment occurred while watching a student alter code from a function we used to draw a triangle. She was attempting to draw a square. She added an extra two lines of code to do this, but did not change the values of the robot's turns, and thus, the robot would turn at the angles required for a triangle. She asked me why it did not work. It only took a simple gesture to enlighten her; as soon as I made an "angle" shape using my hands, she determined the problem, and even figured how to alter her turns to solve the problem. Another insightful moment occurred while debugging another student's code. The student had accidentally used a period, rather than a comma, in one of her forward() functions. The result created a strange, rectangular shape rather than a square. I asked her to reenact her code, pretending to be the robot. When she took on this role, it reminded her to read the code very closely (robots only do what they are told), and she found the error.
Weak Areas: Time was the largest issue, however, the girls were also frustrated by the inconsistencies of the robots (due to low battery or friction).
Strong Areas: Like the girls group, the boys caught onto the main concepts very quickly, some of them even had time to draw multiple shapes.
Weak Areas: Inconsistency of robots was a complaint, but more interesting was the attention span of the boys. Often times they got distracted and would rather watch their peer's successful program runs than finish their own.
Strong Areas: The girls did not have much trouble digesting the concept of loops, at least generally speaking, and greatly enjoyed writing their dances. I think that they were excited to have an open ended, more creative type of assignment. Time was no longer an issue because the school acquired transportation for the girls.
Weak Areas: It was at this week in the curriculum that weaknesses in the girl's basic syntax knowledge began to show. They couldn't remember basic things like "def funcName()" or where to put colons. Indentation was automatic, but they often did not know what to do in order to stop writing code that would be part of a loop and start writing code that wouldn't be part of a loop. Additionally, the explanations of the range() function in the Syllabus were much too complicated for this point in the course and I recommend removing them. I did so for the boys class.
Strong Areas: The boys were very, very excited to work on this project, more so than I expected, as dance is often construed as a "girl activity". They took to the concept of loops very easily. They were also very pleased to have to use youtube for this assignment.
Weak Areas: The boys, like the girls, also had very similar troubles with syntax. Focus was again another issue with the boys, however, in this class it took on the form of youtube. Some boys went through upwards of 10 songs before they began programming. I found that imposing a limit upon them helped to solve this, it might also be helpful to give them a selection of songs to choose from.
Strong Areas: The girls greatly enjoyed the madlibs activities, asking to do it several times over. They digested very easily the idea of setting a variable and referencing variables (save one concept). They also had no problem understanding how to pass variables as parameters to functions e.g. foward(x,y). The Braitenberg vehicles activity was fun for the girls, but not quite as exciting as other topics.
Weak Areas: The students had a lot of trouble understanding statements in which variables referenced themselves (e.g. x = x + 5). This even baffled the older students. This problem was solved with one student whom I met with for tutoring on a weekly basis (non-robot tutoring). We did a kinesthetic activity acting out code, using boxes as variables, and batteries, the only item which I had in abundance at the moment, as the "value" of the variable. If a box had 5 batteries in it, then it had a value of 5. This seemed to help very much and I would recommend it, if one were to use this part of the curriculum.
Strong Areas: The boys, like the girls, loved the madlibs activity. Interestingly, within this activity, every boy chose "the race" as their madlib of choice as opposed to "little red riding hood", whereas with the girls there was an equal spread between the two. The boys seemed to enjoy the Braitenberg vehicles more than the girls. They wanted to create their own Braitenberg vehicles other than the one I described to them, and we had a long discussion at the end of class about different ones we could think of. One student came up with a particularly interesting example of a "nocturnal" vehicle, that was stimulated by darkness and slowed down by lightness.
Weak Areas: Like the girls, the boys had a lot of trouble with self-referential variables. They attempted to solve the problems like they would in math class, and were almost unwilling to stop. It might be good to avoid this topic in the future as it is not particularly relevant to anything we do in the course, perhaps above their age level, and only a source of frustration.
Strong Areas: This seemed to be the class that the girls were waiting for since they had first heard about it on the first day of class. Needless to say they were very excited to get started. The girls took to conditionals relatively well, particularly the older girls. Most easy for them to understand was if, purely on its on, or if statements followed by else statements. When the girls finished their maze solving programs, and ran them through, they applauded each other, and generally had a very good time. Additionally, the girls enjoyed the "choose your own adventure project" very much and made full use of the space around them and concepts they had learned.
Weak Areas: Though the girls seemed to understand if, at least on its own, they had a lot of trouble understanding if versus elif, and when to use one versus another. I don't think I would include elif if I were to teach this course again as it seemed to be beyond their level of reasoning.
Originally for the maze project I used the getStall() function as opposed to the getObstacle("center") function. Little did I know that the getStall() function is actually quite useless and does not work. In order to get the girls get through the maze, I would have to come over and grab their robots wheels when they hit walls. Despite this, many of them still finished the maze and had a blast doing so.
Strong Areas: I adjusted the syllabus so that it would no longer use getStall(), this was a huge improvement. Like the girls, the boys were extremely excited by this project, and understood if and else. However, they seemed to be way more excited by the "Choose your own adventure" project than the girls. The boys were very eager to finish their maze programs not only to see them finish, but to make improvements upon them.
Weak Areas: Focus was one of the key issues in this class, as the maze-running robots even distracted me. Also like the girls, it was very difficult for the students to grasp if versus elif and when to use them. Only one student seemed to fully understand the difference between them, but even he was not able to articulate why one might want to use elif versus just two if statements.
Strong Areas: The girls were eager to improve upon their algorithms having noticed some obvious deficiencies in the algorithm from the previous class. There was some particularly beautiful insights that were achieved in this class aside from all of the students finishing their maze solving code. It was not obvious to the students how to program your robot to "turn around fully" when both of its IR sensors detected an obstacle. I told them about AND in python and how they could use this to test output from both getIR("left") and getIR("right") at once. I explained that you could get both values from just doing getIR(), which returns a list of both values, but you could not test for them using any information we had already learned. One girl asked if there was a built in function called sum. I explained that there was. She asked if we could use the result of sum(getIR()), explaining that if the sum was 0 then there was an obstacle in front of both of them. Needless to say I was a bit blown away!
Later in the class, we were discussing how to get the robots to stop once they'd finished the maze (which was a bonus question in the activity). I expected the students to simply check the light values in the loop to do so. One student, however, asked if we could put this evaluation into the while statement, something I had not yet taught them. Once again, I was blown away.
Weak Areas: There were no weaknesses in this class that were not highlighted in other class summaries, however, issues involving if versus elif and issues involving syntax were again stressed.
Strong Areas: The boys were very eager to have their robots finish the maze, many of them had their programs run for upwards of 3 minutes in order to do so. Many of them attempted to solve the bonus problem of stopping the robots when they've finished the maze (though not in the while statement), though only 2 or 3 succeeded. They all accomplished the maze solving algorithm in general. This was the last class for the boys and many of them asked to continue next semester, though data on how many will actually continue will be obtained. They all seemed to have a very fulfilling and fun semester.
Weak Areas: There were no weaknesses in this class that were not highlighted in other class summaries, however, issues involving if versus elif and issues involving syntax were again stressed.
Strong Areas: The girls enjoyed the "We Are A List Of Pixels" activity very much and seemed very excited to be working with images. They gained a full understanding about pictures (that they are pixels), and pixel coloration and location.
Weak Areas: The girls did not seem very excited to do the Obamicon activity. I am not sure as to why, though I suspect it might be their parent's political affiliation. I made a mistake in making a slight alteration to the syllabus and let them do a slightly different activity, however, I DO NOT recommend doing this, as it is hard to come up with flawless code, however, simple, on the fly. Consequently we did not finish the assignment. The assignment was changing a picture to black and white for all pixels except pink pixels. The girls had a lot of problems with the idea of iterating through a list (be it a list of pixels or otherwise), and I believe that this might be beyond the scope of a once a week class. However, beyond this, they seemed to fully grasp the algorithm, and they understood that changes need to be applied to every pixel, and they knew how to test for when to make such changes and how to make such changes.
Strong Areas: The girls, at first very hesitant, genuinely enjoyed the ability to choose their own project for the last class and had a lot of fun with it. I think they felt accomplished in what they had learned, and many of them attempted to incorporate everything they had learned. Many of them were overly ambitious in their project choice, one student asked if she could write a program to take pictures of the room and identify the objects with in it, another asked if she could do a robot play, dance, and image processing program all in one (she came close to doing so, too!). The former question was very interesting. The girl knew she would have to distinguish objects from one another based on color alone (because that is all she had learned), showing a very impressive knowledge of her tool set, and a good understanding as to how to approach a problem. This same girl ended up choosing to distinguish between two very uniquely colored objects in the room (stating which was in the photo). She noticed that the only difference between the two colors was the level of green thye had, and made the jump that she need only test for green as opposed to other colors (which I hadn't yet caught).
Weak Areas: Though they enjoyed picking their own problems to solve, their hesitation lead to a lot of wasted time, and I felt as if the class was a bit anticlimactic without the time to show each other what they had accomplished. Additionally, they may have felt better and more with some more concrete guidelines about what they could do, as opposed to "suggested projects".
General Class Strengths and Weaknesses
Strong Areas: Most projects were easily finished in the time given and were very exciting and fulfilling to the students. The kinesthetic activities were also very successful. Though the results of the survey taken by the students are not in, it seemed that all of the students had a very good time and learned a lot. The robots were the most obvious strength of the course. The course probably would not have been populated at all without them.
I believe that, of all the projects, the dance project, the drawing project, and the maze projects were most successful. Of all the activities conducted, I believe that the choose your own adventure activity and madlibs were the most successful. There will be data on what the students thought shortly. In short, I believe I accomplished my goal of having fun in this course.
As far as learning general problem solving skills and general algorithmic thinking, I was very impressed with the student's algorithms and code. They had very interesting insights, and were all able to complete most of the projects (if a student could not, he or she often had a correct algorithm, but was unable to fully implement it) I believe the code they wrote can attest to this. A strong summary of the benefits of this course is inherent in this letter from a parent:
"We can't begin to tell you how pleased we have been with ________'s experience with the after school robotics program through Bryn Mawr. It has been very heartening to see her interest and imagination "sparked" by this experience. In fact, _______ has enjoyed the program so much she spontaneously has been trying to explore opportunity for further independent study in robotics."
forward(1,1) turnRight(.1,1) forward(1,1) turnRight(.1,1) forward(1,1) turnRight(.1,1) forward(1,1)
forward(1, .25) turnLeft(1, .25) forward(1, .25) turnLeft(1, .25) forward(1, .25) turnLeft(1, .25) forward(1, .25) turnLeft(1, .25)
forward(1, 1) turnLeft(.55, .4) forward(1, 1) turnLeft(.55, .4) forward(1, 1) turnLeft(.55, .4) forward(1, 1)
for i in range(5): forward(2,1) turnRight(1,1) backward(2,1) turnLeft(1,1) wait(1) for i in range(5): turnRight(2,1) wait(.5) turnLeft(3,1) speak("Everybody Dance Now!!") for i in range(2): turnLeft(7,.5) turnRight(4,.25) speak("Come on people!! Dance! Dance! Dance!") forward(3,.5) turnRight(9,.5) speak("Am I the only one who can dance?")
def dance(): for i in range (5): forward(1,.5) backward(1,.5) turnLeft(1,.2) turnRight(1,.2) for i in range (5): beep() forward(1,1) backward(1,1) for i in range (10): beep() speak("yes, wonder wall!") for i in range (3): forward(1,.5) backward(1,.5) turnLeft(1,.2) turnRight(1,.2) speak("I love this song!") speak("yes, wonder wall! I love oasis!") for i in range (3): beep() forward(1,1) backward(1,1) speak("go go go!") wait(1) for i in range (5): forward(1,.5) backward(1,.5) turnLeft(1,.2) turnRight(1,.2) for i in range (5): beep() forward(1,1) backward(1,1) for i in range (10): beep() speak("yes, wonder wall!") for i in range (3): forward(1,.5) backward(1,.5) turnLeft(1,.2) turnRight(1,.2) speak("I love this song!") speak("yes, wonder wall! I love oasis!") for i in range (3): beep() forward(1,1) backward(1,1) speak("go go go!")
for i in range(8): forward(1,3) backward(1,3) turnLeft(1,2) turnRight(1,2)
forward (1,.6) backward (1,.6) speak("Thriller!") turnLeft(1,.4) forward (1,.6) turnRight (1,.4) forward (1,.6) for i in range(15): turnLeft (1,.1) beep() beep() beep() forward (1,.6) backward (1,.6)
while timeRemaining(30): if getIR("right")==0: turnLeft(1,.5) if getIR("left")==0: turnRight(1,.5) elif getIR("right")==0 and getIR("left")==0: backward(1,.8) turnLeft(1,.4) else: forward(1,1) turnLeft(1,.4) forward(1,.7)
while timeRemaining(60): if getIR("left") == 0: turnRight(1,.5) if getIR("right") == 0: turnLeft(1,.5) else: forward(1,1)
def maze(): while timeRemaining(60):
if getIR("left")==0: turnRight(1,.25) if getIR("right")==0: turnLeft(1,.25) else: forward(1,.25)
def ninja ():
while timeRemaining(200): if getIR("left") == 0: turnRight(1,.50) if getIR("right") == 0 : turnleft(1,.50) else: forward(1,.50) if getLight("center") > 3000: stop()
while getLight("center")<4000: if getIR("left")==1 and getIR("right")==1: forward(1,1) elif getIR("left")==1: turnRight(1,.25) elif getIR("right")==1: turnLeft(1,.25) speak("YAY! I AM IN THE PYRAMID!")
def scribbler ():
while getLight ("center")<4000: if getIR("left") and getIR("right")==1: forward(1,1) elif getIR("left") and getIR("right") == 0: turnRight(1,1.25)
A Robot Play
wait(4) forward(1,3) speak("I am Eloise, the sister of Bob! Fear my robotness even more!!") for i in range(5): forward(2,1) turnRight(1,1) backward(2,1) turnLeft(1,1) wait(1) for i in range(5): turnRight(2,1) wait(.5) turnLeft(3,1) speak("Everybody Dance Now!!") for i in range(2): turnLeft(7,.5) turnRight(4,.25) speak("Come on people!! Dance! Dance! Dance!") forward(3,.5) turnRight(9,.5) speak("Am I the only one who can dance?")
def TheGreatRobotPlay1 ():
forward(1,3) speak("Hello Humans! I am Bob, the amazing robot! Fear my robotness!!!") wait(9) speak("We are going to show you that Robots deserve to rule the world!! Let the show begin!") backward(1,3) for i in range(5): forward(2,1) turnRight(1,1) backward(2,1) turnLeft(1,1) wait(1) for i in range(4): turnRight(2,1) wait(.5) turnLeft(3,1) speak("Everybody Dance Now!!") for i in range(2): turnLeft(7,.5) turnRight(4,.25) speak("Come on people!! Dance! Dance! Dance!") forward(3,.5) turnRight(9,.5) speak("Am I the only one who can dance?") forward(1,3) pic = takePicture() show(pic) speak("Ha ha ha ha we just took a picture of your minds!! We can now burn these minds into smithereens!!!! Mwah ha ha ha ha ha!!!! The end of this world is near!! Fear our World Domination!!!!!")
Weak Areas: On a hardware level, there were many problems. Broken usb sticks, batteries, computers that would not start up python, slow computers, computers that would not connect with the robots etc. These problems wasted massive amounts of class time, and if you have the time, it is beneficial to check each computer before the class begins, however, this is isn't always possible.
Syntax was perhaps one of the biggest sources of frustration for the students, or at least what they most frequently got hung up on. It is simply not possible to teach everything about python in addition to what we are already teaching in the time span of this course. In my opinion, memorization of syntax was least important. Although it was a weakness, I wouldn't say that it would be worth spending a lecture on (as it is also not particularly interesting for an 11 year old to learn about programming language grammars).
Though elif and self referential variables were difficult for the students to grasp, they may have been able to do so given more time, however, there were other areas of the curriculum that were simply too hard. I might eliminate the image processing project all together, or at least implement some library functions that make the process easier for them. It is simply not possible to teach them list operations and iterating through a list in the time this course is given. It may also just be simply beyond them at this point in their development.
Whether it be the school they attend or the gender of the students or just a coincidence, I noticed many stark differences between the two groups. The girls group was far more interested in writing code than anything else. They had incredible focus, and was able to channel their energy into writing code. The group of boys were very exploratory. They wanted to try new things constantly. I often found them testing things out in IDLE just for fun. They also had a lot of questions about the types of software I write and ask questions like "when will I be able to write my own programming language".
Both of these skill sets had their strengths and weaknesses and I attempted to bring the spirit of each group to the other, I found that each could benefit from this greatly.
Surveys and Data
Currently the data from the students is not available, but will be posted by mid-January. The surveys are available here:
Data will also be collected from those who did not take the course. Please come by soon to see the results and the analysis of the results.