A few thoughts on being an ally

Alfred Thompson writes an awesome blog about CS education in K-12. You should read it, if you don’t already. Recently, he posted “Teachers and Role Models in CS Education.” I wanted to reply to the post with kudos for being an awesome ally and some thoughts about my own experiences on how impactful role models are in CS for me as a queer woman… But my comment turned into a novel, so I’m posting here! Note, it’s still a “comment” written to Alfred, but I think it may be interesting to others in CS education.

Hey Alfred! Thanks for posting this. I’ve been thinking a lot lately about how impactful it is for me to have 2 really amazing female role models for my job at Google. It’s the first time that I’ve ever seen 2 strong, competent, educated, highly-involved, motivated women working on the same project (at manager level). The best part? They don’t always agree. I realized that I don’t think I’ve ever had the chance in CS to see 2 women disagree on a topic. In CS, we so rarely even have 2 women in a classroom / office / on a project. It’s something that is so pervasive in CS that I never even realized I hadn’t seen 2 women have differing opinions on a CS-related topic. Crazy, huh?

But yeah, I totally agree that even (especially?) the white males in the field can make a difference. My professor Titus Brown always believed in me and encouraged me to put myself out there. He taught me to invite myself to events, to speak up when I have an idea, to make myself stand out. That’s not something that comes naturally to me, and I usually would just get bulldozed in meetings otherwise. He also would always invite me to events and introduce me to any female CS contacts that he has (like at PyCon), helping me build a network of people like me who can help me navigate tough situations I face when he perhaps cannot. But most important, I think, is that he kept an open dialogue with me about gender issues in the classroom, in the workplace, and in the field as a whole. He would ask for my thoughts and opinions about situations, take suggestions for how to improve gender representation, and make sure that I knew I could speak up if I ever felt threatened in any way (which actually does happen).

A positive example? At the PyCon Testing Birds of a Feather event last year (which Titus helped host), one of the running jokes was that anyone presenting has to wear a labcoat (size medium, I believe). A lot of the guys at the event (1) had been drinking, (2) were pretty loud because it was an evening event, and (3) were already friends. There were several instances where men got up, tried to put on the labcoat, and found that it wouldn’t fit. A lot of raucous laughter would ensue and people would shout comments about the presenter’s weight. While it was all in good fun between friends, I couldn’t help but think: “I am never, ever going to stand up in front of these men and speak about anything. What if they make fun of me and my weight? What if they shout comments about my appearance? About me being a woman?” Titus and I talked about the event after, and he is working to make sure that the event is generally more welcoming and less intimidating this time around. He is using his influence in the Python community to make me (and the other women I saw at the event) feel safe.

But for every good example of an ally in the community, there are lots of examples of missed opportunities. I didn’t discover my love of CS until I got to college. Partially because I was scared away from my first ever programming class. As a freshman in high school, I signed up for an intro engineering and programming class. It was 30 students, and I was the only girl. Pretty standard, I think, for a lot of schools. During the first day, the guy next to me drew a picture of genitals on my assignment notebook (required to carry with you at all times at my high school). I was pretty stressed/upset, but I just erased the drawing and hoped that it wouldn’t happen again. The next day in class? We had to get up and move around, and when I got back to my school supplies, genitals had been drawn on every page of my assignment notebook, in permanent marker. And 3 guys nearby were laughing, brandishing a variety of permanent markers. I was 14 and mortified. And somehow, ashamed. I can’t explain why I felt shame, but I did. My options, as I saw them, were to (1) continue going to the class and deal with bullying from those guys and cry about it when I went home, (2) confront the guys (which I was way too shy for), or (3) talk to the teacher about it. The teacher was a typical programmer guy. I’m sure he was nice enough. But at 14, how do you start that conversation? “Excuse me, sir, those guys over there are drawing on my stuff and it’s inappropriate and I feel threatened. I want to be in this class, but they make me feel uncomfortable?” I certainly wasn’t that articulate at that age. And even if I had been, I was worried that the teacher would just tell them off and then the students would just target me even more because I was a tattle-tale. So what did I do? I dropped the class and didn’t try programming again for four years.

To this day, I’m not sure what that teacher could have done differently. But I think that opening the option for a dialogue, somehow, is super important. Making it clear that students can talk to you. That everyone should feel welcome and safe in the class, and if they don’t, then they need to speak up about it! We can’t expect our young female (and minority) students to know about impostor syndrome, stereotype threat, unconscious bias, and even outright chauvinism. It’s important to make a safe place for them until they can find enough courage to establish their own place, to stay committed to CS even when facing adversity…


Teaching with ipynb, via Matt Davis

Matt Davis will be giving at talk at PyCon this year about teaching with the IPython Notebook. The part that interests me the most is that he intends to focus on how educators can minimize the cognitive load on students.

What is schema theory?

Schema theory suggests that individuals store all generic conceptual knowledge in mental structures called schemas. These schemas can: (1) vary in size, (2) be constructed in a hierarchy, (3) nest schemas within themselves, (4) interconnect with other schemas in many different ways.

What is cognitive load theory?

Human memory is divided into working (short-term) and long-term memory. While long-term memory is effectively infinite, working memory can only hold 5-7 items at a time. Cognitive load theory (CLT) suggests that methods exist for maximizing the working memory space and using it effectively/efficiently. Types of cognitive load that may be affecting working memory are:

Intrinsic cognitive load is imposed on memory by material that is to be learned. It varies according to the interrelatability of elements of learning – how many different learning tasks must be simultaneously held in working memory in order for a student to succeed.

Germane cognitive load occurs when a learner forms new schemas. This schema formation is the main goal of a teacher, since it refers to a student synthesizing information into their own existing world view and integrating it into their previous knowledge structures.

Extraneous cognitive load is nonessential and hinges on information/tasks that are not what the student is supposed to be learning.

CLT emphasizes the responsibility that educators have to minimize extraneous cognitive load for their students during their teaching. Currently, I’m not sure that ipynb actually does so, because installing and launching the Notebook is so difficult for new users. The interactive environment is definitely engaging, however.



Image from Juha Sorva’s dissertation.

Planning Your Program

One of my students in CSE 231 wrote me an email today regarding my post Teaching Functions as a Concept. I want to post parts of his email, because I think it is very insightful.

I read the whole thing [your blog over break] and some of the content was very interesting. The content about how the class did not seem to understand how to break a problem down into smaller problems to tackle and make into functions – that is mostly what I wanted to send you an e-mail about. I help [several other students] every week, [from our section and other sections]. They ask me questions and I try to explain it as best as I can without giving them code. It is similar to how I try to help people in class. Anyway, even now that seems to be a problem with at least the two people I help extensively with the projects we are assigned. They seem to be very against the idea of planning before programming. They both get very frustrated and overwhelmed, no matter what size the project is, but still would rather dive in than plan ahead. Because of this they both still have problems with functions. It takes them a long time to come to the conclusion that that is what they should do. They do get there, but if they planned ahead they would see that much sooner.

I think that this is partly due to the beginning of the course not having an emphasis on planning before hand. When I taught myself I also dove in, and after much experience I have switched to planning ahead. However a lot of students wont get that much experience, and aren’t necessarily taking more programming. This means that after the class they may not use python as much simply because if they want to do something they may get overwhelmed quickly and drop the project. For the two people I help the only reason they stick with it long enough to get a handle on what they are doing is because it is graded.

Therefore I feel like when they teach this class later if they were to move the curriculum back by a week. And the very first week of the class to emphasize the methods that can be utilized by students to systematically break down a larger problem into smaller chunks that can be handled by functions an what not. Another thing to stress in the course that i have noticed is when to use functions anyway. Not just getting to the realization that it is easier, but when it is more helpful to take the time to make a function than to simple write out the code where they need it. I have seen [students] write functions that are called just one time, purely so that [they] can say [they have] a function. If the beginning of the course emphasized how to break down problems into smaller ones, when you introduce functions I think it would be much easier for students to see when and when not to use them. Throughout the course I feel like there is a lot of content and examples of different ways to do things, but not enough explanation of when a different approach may be better than another. This leads to methods that do work, but are unnecessarily complicated.

One thing I do realize is that it is an introductory course and also just one course. There are only so many lectures, and a ton of material and many concepts that need to be covered. Some of these suggestions are impractical for this course in that respect. But it is something to be considered, even if just a small aside during one lecture or something.


My thoughts exactly, Salim – it’s what I’m writing a course proposal about for my engineering education class this semester. I’ll post the final proposal when I finish it, but I have Part 1 posted, which addresses the lack of problem-solving skills in today’s CS students.
And Salim, thanks for the feedback. :]

Turtle in the Classroom. Again.

Okay, so I expressed earlier this semester that I’m worried we have overused Turtle in Python as a teaching tool in CSE 231 this semester (discussed here, here, and here). At that point, I really thought we were finished with it… But nope. During a particularly crazy week (for the instructors and TAs), a last-minute Turtle lab was pulled from a previous year and released as the week’s lesson on classes. Now, classes are a huge topic in computing and there are a ton of different ways we could have approached them. I’m not sure that using Turtle for the first real exposure to classes was a good move on our part as instructors. I much preferred the lessons that followed, Lab 9 and Lab 10, which did not incorporate Turtle.

The Lesson

The lab assignment was to draw a picture (any picture) using classes that students wrote for Rectangle, Triangle, and Circle. Note, the first two classes had to inherit from an instructor’s Polygon class.

The Results

So, my students were really unimaginative (and lazy, unfortunately) with this assignment. They were no longer excited to use Turtle, cause we’ve used it so many times before. And they ended up giving me incomplete, unimaginative, or uncolored drawings. Once they had their classes working and could demonstrate their use, they wanted to be allowed to leave the lab. Granted, it is an evening class, and students usually want to get out of there as fast as possible. But I was still really disappointed in the student involvement in the lesson. I did have one good excuse for the underdeveloped output pictures – the students claimed they were making abstract art.

I also covered another TA’s section of the class. Her students meet bright and early at 8:30 AM. I’m not sure if it was because they are a more attentive morning class, because I was a guest/sub TA, because I gave explicit drawing requirements after I learned from the subpar experience in my own section, or for some other reason, but the students from the second session gave me much more advanced pictures.


What is Socraticqs?

Socraticqs is an educational tool developed by Christopher Lee at UCLA. Basically, it is similar to a set of slides which you can step through in any order you choose. Further, it facilitates real-time in class assessment and feedback, where questions and student responses are all saved in a database. Socraticqs even supports peer instruction (partner work in-class where students share their solutions with their neighbors). Socraticqs as a whole can be found on Github.

How do I install it?

Install is really straightforward! But then you have to configure Socraticqs for your course.

How do I teach with it?

Extensive details for how to implement Socraticqs for your own classroom are here. I will be looking at possibly using it for a Software Carpentry Workshop, so I will add comments about the process once I begin.

Extra Info

Below is a youtube video from Christopher Lee about making bioinformatics education open source and gearing it toward active learning. Yes, I know it’s a 50-minute talk. It’s worth it.

How to Get Involved in Open Source

Thanks to one of my advisors, Titus, for this article about how to get involved in open source projects. It suggests the following…

To Code:

  • Read the developers guide for Python.
  • Fix bugs in Python or Django. Particularly, choose bugs that catch your attention or that you have experienced.

Here is a great video called “Get off the bench: Making the leap from user to contributor” from a Django developer about how to get involved:

Open Source Your Own Code:

  • Put your code online on Github.
  • Put other things on Github too, like grants, papers, and syllabi.

Track Your Progress, Share Your Knowledge:

  • Edit documentation for Django or Python.
  • Blog! When you encounter problems, post them and your solutions on a blog somewhere, so other people can learn from your experience.

Integrating iPython Notebooks and Google Docs

Yes. I’m excited to see this article about integrating the features of Google Docs into the IPython notebook. Note that at the bottom of the article is a comment by Fernando Perez, the originator of IPython:

Yup, pretty much everything you say is right in our plans, and that has been our vision since starting to work on this problem. We obviously don’t have any pull on what Google does or doesn’t, but we’ll be working very hard over the next year precisely on enabling the kind of collaboration features you mention above. Don’t hesitate to join us on ipython-dev if you’d like to pitch in!

As Fernando well knows, these features would greatly enhance the teaching capabilities of the Notebook. In fact, it’s the exact software that we are looking to use when teaching an online class at MSU. If you’re interested in getting involved with IPython Notebook development, here is where you can sign up for the developer’s listserve.