Thursday, December 19, 2013

Final Topics for My Intro to CS Course

With the final exam over with, it's finally time to reflect on this semester's offering of my version of our 'Introduction to Computer Science I' course for non-majors, taught in Processing.  I wrote before about designing the course by starting with learning objectives, and then using those to come up with problems to study.

The general structure of the classes was to first show off a demo of the final product, start coding it, and learn concepts along the way.  I also eventually added more toy examples to illustrate each concept, thanks in part to the anonymous midterm feedback I solicited.  Here are main examples we looked at, and the skills we learned along the way.

Drawing Pictures with Processing

Creating a simple static drawing with code is a nice way to dive in without having to learn programming theory.  We referred to function calls "commands" that draw shapes like ellipses, and talked about some basic drawing and colour theory.


Then, as our pictures became more complex, we learned about variables as a way to cut down on repetition of hard-coded numbers.  We also saw that our drawing commands were a lot easier to follow and debug when we used meaningful variable names.

Interactive Painting with Processing

The logical progression has us move from static drawings to a simple interactive painting program.  This allowed for the introduction of Processing's active mode, and thus an introduction to the idea of functions.  We also used it as an opportunity to start seeing how to break a programming problem down into smaller pieces that could be solved more or less in isolation.

Jukebox

The next problem was a to make a working jukebox with three buttons/songs.  You could click on a button to play its song (turning off any other song that might be playing).  When a song plays, the corresponding button flashes.  For example, in the picture below, the second song is playing.


This example allowed us to learn about how the draw() loop works in Processing, how to play sounds, and what a Boolean value is and how it can keep track of the play state of a song.  We also learned about if-statements, and how to use them to determine which button a user clicks on.

Simple AI Character

I chose this problem based on the fact that many students in the class are in cognitive science.  We built a very simple state machine that was used to decide how to draw a sheep.  The sheep normally wanders around the screen toward the mouse.  If the sheep gets close to the mouse, it stops and drinks tea.  If the user then clicks while the sheep was stopped, a psychedelic ring of colours emanates from the sheep, as in the picture below.


While building this program, we learned about character movement and animation, tracking state with constant variable values, using if-statements and distance calculations to check how close the sheep was to the mouse, and writing functions that are self-contained (and thus could be reused in another sketch).  When making the rings animation, we learned about arrays to store the colours and while loops to draw them.

Weather Visualization

This problem was split into two parts, both based on real, local weather data available from the Canadian government.  For the first part, you would click on a time line and see the temperatures for the five closest dates.  For the second part, you instead click on a thermometer and see the dates of the five closest temperatures. The goal was to get students thinking about how they can visualize their data in order to explore it more easily.


Part one of the example gave an opportunity to get more comfortable with arrays and get a brief insight into reading and processing data from a file.  This also meant Strings could be formally introduced.  We learned about searching algorithms as well, since some kind of search to find the 5 closest temperatures (or dates) is needed.



In part two, we learned basic sorting techniques so we could more easily find the 5 closest values relative to temperature instead of dates.  We had been using the idea of "parallel arrays" for storing multiple pieces of information for the same entity up until now, but for sorting it is much easier to package all that information up into one variable.  Thus, we learned about objects and classes.

Social Media Coverage / Set Cover Problem

The last problem we got to this term was inspired by this post.  The context was the following scenario, dreamed up by some of my creative friends. Suppose we have a set of social media sites, like MySpace, Facebook, Google+, Twitter, and LinkedIn.  Each site reaches a different audience.  For example, Facebook probably reaches more young people than Twitter or LinkedIn.  Given the social media sites, and the corresponding audiences that each can reach, what is the minimum number of social media sites that still reach all audiences? (Minimizing this number means less work for the marketing team.)  This is the set cover problem.

The main concept introduced with this problem was the idea of storing objects in other objects, understanding how references work, and knowing when to share data versus make copies of it.  In the image above, each social media site acts like a button, and when pressed, it lights up the audiences the site reaches.  Site buttons should have references to the audiences, not their own copies of them.

Monday, December 16, 2013

Faculty of Science Excellence in Teaching Award

I'm really proud and honoured to have recently received one of our Faculty of Science Excellence in Teaching Awards! I got it last week at the faculty Christmas lunch.  Here's a photo from the event and the info posted to the School of Computer Science website.


The 2013 Faculty of Science Holiday Reception was the occasion for Mrs. Gail Carmichael to receive a Faculty of Science Excellence in Teaching Award. The award acknowledges Gail's teaching achievements and initiatives. Gail has a real passion for teaching computer science.

Besides all her teaching commitment, she has published four peer-reviewed papers on computer science teaching. The most recent one has been published in the Journal of Computing Sciences in Colleges. Gail has an impressive list of extra-curricular activities that reflect her commitment to teaching computer science for girls. They include advisory board membership to the Anita Borg Institute for Women and Technology, mentor for the Carleton University Women in Science and Engineering Mentoring Program, both organizer and instructor for Girl Develop It! Ottawa, and co-chair for communities committee of the conference Grace Hopper Celebration of Women in Computing. She has given numerous talks to present her views on computer science teaching. Her latest one was entitled Gram's House: Encouraging Girls to Consider Computer Science Through Games was presented at the 2013 conference Grace Hopper Celebration of Women in Computing.

Monday, December 9, 2013

Are Stereotypes Keeping Women Away From Science?

I received a link to the following infographic in honour of this week's Computer Science Education Week.  It's about women in STEM in general, but has some interesting stats, so I figured I'd share it here.  Enjoy!


NJIT Online Master of Science in Computer Science

Wednesday, November 20, 2013

Why One PhD Student in Psychology Learned Python

I posted a few testimonials about why arts and social science needs code last week.  I have a new one from a PhD student in psychology here at Carleton, and since it's such a good one I made a new post for it.

Chunyun Ma, PhD Candidate in Psychology, Carleton University


Why do I want to learn python?

There is the thrill of learning something new. There is also the practical part. I will focus on the latter today.

I study math cognition. What is that? You may ask. Simply put, I spend most of time studying how people process numbers and quantities. Several months ago, I become interested at how people do arithmetic. Not to bore you with the details, I needed to design an experiment in which participants would be doing mental addition and multiplication—all one-digit problems such as “2+3” or “3*5”. These problems would show up on a computer screen at a pre-determined interval for participants to solve. Everything seemed straightforward and easy except for one: I had more than 300 arithmetic problems to be included in the experiment. With the software I had at that time, each problem needs to be set up manually by point-and-click for it to show up properly on the screen.

Hours of point-and-click eventually led me to think: “there must be a smarter way of doing this”. Sure enough, Python entered my horizon at that time and proved to be much more efficient. With python, like with many other programming languages, I can write the code for presenting one arithmetic problem and recycle it for the rest of the problems. What’s better, I can stipulate in the code what output should be generated and in what format.

The advantage of Python over other programming languages is that it is relatively easy to learn. For psychology folks, knowing python also has an added bonus—being part of a vibrant community consisting of python users from all over the world who are knowledgeable of both python and experimental design. For example, Pygame and PsychoPy are two excellent tools for designing experiments, both of which are products through collective effort from the community.

Monday, November 18, 2013

GoldieBlox, Rube Goldberg, & Beastie Boys "Princess Machine"

This video is so beyond awesome that it deserves its own blog post.  I may or may not have shed a few tears watching it.  Keep on kicking butt, GoldieBlox. We need you.

(Edit: I've replaced the original video with an update after it was removed due to controversy surrounding the use of the Beastie Boys' song.)




Read more about this video and project here.

Wednesday, November 13, 2013

One Way to Study for Exams

For both my classes, I put together a study guide that included some general tips on studying as well as what topics to focus on.  Since the general advice works for many classes, I figured I'd share it here.  It's based on what I used to do as an undergrad.

York College Library Study
York College Library Study / CUNY Academic Commons

A good strategy is to create your own study notes, preferably on paper (manually writing will help you remember what you are thinking about better).  Here’s one possible way to make these notes:
  • Go through the course learning objectives, slides, and assignments, and make a list of key concepts that you should understand.
  • On a separate piece of paper for each concept, write the concept at the top of the page.
  • For each concept, write a general description of what the concept it about.  Try explaining it as if you were teaching someone who has never seen it before.
  • Look for ways the concept has been used in class.  How does it apply to the topic’s contextual question? What other contexts did we apply it to (in code, assignment questions, Poll Everywhere, etc)?
A few general studying tips:
  • Find ways to stay relaxed.  High stress will make your studying time far less effective. (Don’t leave it to the last minute!)
  • Try to stop working on your notes before your normal bedtime the night before the exam (if not sooner).  Get a good night’s rest - this really does matter!
  • If you have time, you can spend some time memorizing some of your notes.
  • On the day of the exam, review your notes.  By now you don’t want to be still trying to understand the concepts or memorizing key points if possible.

Be sure to state any assumptions you make when answering the questions.

Be strategic rather than starting at the beginning and working your way through.  Read all the questions first, then start answering the questions you are most confident about.

Friday, November 8, 2013

Why Arts and Social Science Needs Code: Testimonials

Part 2 of my "Why are we learning this?" guide for arts and social science students is a set of testimonials from people in the field that learned to code.  I'd like to share those testimonials here.

Angelica Lim, PhD Candidate

http://winnie.kuis.kyoto-u.ac.jp/~angelica

I do research on emotions across music, voice and movement. I believe that my background in programming has let me make unique psychological experiments that most people can't do.

Here's a video and article on something similar to my work: http://wheatlab.virb.com/dynamics Programs have also let me automatically detect things like reaction time, instead of spending hours poring through videos to do manual annotation.

Kathleen Woestehoff, Desktop Support Engineer for Gilt.com


I work in IT presently but that was after a purposeful (and challenging) career switch.

I studied psychology as an undergrad and got my MS in Education with advanced certification as a School Psychologist.

I learned some code through online courses I took. I've found it super applicable to be relevant and respected in my current career. I've heard from many people that basic HTML is nice to be able to adjust things on social media sites (though I've never taken advantage of what I know in this way).

I've seen it be highly sought after as a skill set in many companies for their marketing department, sales, graphic design, and more.

Emily Daniels, Software Developer and Research Analyst, Applied Research and Innovation at Algonquin College

http://www.emilydaniels.com/

Dear Fine Artist Learning to Code,

Being able to code to express yourself is one of the most powerful tools available to artists today. Artists should look at programming languages as they do any other medium- watercolor, acrylic, clay- they are all tools to allow you to develop and communicate your vision with your audience.

Artists who work with traditional mediums often have problems keeping up with the speed of society’s technological advances. What worked for Rembrandt and Picasso does not work for many of today’s artists. The scarcity surrounding the creation of a unique work of art contributes so much to the value of that work, but the minute your work is shared on the internet it loses value. The catch for artists is overcoming obscurity in a world inundated with information fighting for your audience’s attention. There is little you can do to help this, unless you are independently wealthy, like working several part time jobs to fuel your art, or you change the medium you work with and the way you communicate with your audience.

Though I still love to draw, after graduating from art school I took a hard look at the mediums I used to create art. Oils and acrylics are toxic to people, bad for the environment, and a fire hazard. The act of learning by painting on 2D surfaces and throwing them out or giving them to friends seemed selfish to me and a waste of resources. Personally I think we have a responsibility to reduce or eliminate our burden on the environment as much as possible, but this way of thinking does not fit very well with making traditional fine art. It took me a while to realize how much better it would be for me to transition my art making to my computer, but when I did it was a revelation. The learning process of writing code and scrapping it or sharing what you’ve written online is cheap and wastes less time and resources in comparison.

Most software projects depend on collaboration and also individual creation, which I find is a nice mix and less isolating than the traditional artist working alone in a studio approach to creation. Solving a problem with a team of people can be immensely gratifying and can give you a sense of belonging that is hard to recreate as an individual artist.

Learning to code and using it in a project allows you to become a modern artist in many different ways. You can tailor your work to a format that a wide audience can understand and interact with easily, which increases your reach and scope. Artists want to reach people on a fundamental level and engage with them in meaningful ways, eliciting responses that go beyond the surface reaction to uncover a deeper understanding and appreciation of our world. Touching people in a meaningful way is not owned by any particular medium but by the way the artist chooses to use that medium to communicate their message.

As an artist you probably already have a thick skin developed by years of crits where others continually tear down your work and expect you to pick up the pieces. This will prepare you for similar responses to your programs and is also immensely useful in software development. It seems from my experience that most computer studies programs don’t spend nearly enough time preparing people to respond well to negative or constructive feedback of their work. It would benefit a lot of developers to be able to take criticism in stride like an artist can, so if you can, you are ahead of the game.

You will need to hone your analytic and logical thought processes in order to program effectively, but if you have a solid background in working with abstract concepts in fine arts, it is not too hard to make the jump to visualizing how components interact and being able to mold them to get them to interact in the way you wish. A well built program is a beautiful thing, simple and complex at the same time. Any application you make or contribute to will still feel like you’ve made offspring from your mind that you are giving to the world. Stick with it- the work you’ll be able to create after learning to code is a million times more rewarding than what you can currently create.

All the Best,
Emily

Stephan Gruber, Associate Professor, Department of Geography & Environmental Studies, Carleton University

http://carleton.ca/geography/people/gruberstephan/

When I was about 25 and just about to finish my MSc, I had a key moment that I still remember: the day I was victorious over integrals. I knew what integral were from my high school math. But when I came across one in a paper, I would usually be left with an uneasy feeling. I knew what it meant, but had no idea, what to do with it. That day, I discovered, that I could discretize the integral in Excel and then just find an approximate solution. This then allowed me to explore the relationships I read about with practical examples that I calculated and plotted. It increased my understanding of the matter I was concerned with manyfold as now, I could interact with my problem and bring it from the abstract realm to, for instance, a plot or a number. Today, data processing and numerical experimentation, sometimes on high-performance computers, are a large part of my research. The power of this approach is what I believe enables me to chose great places to do research: mountain ranges across the world, the North, and Antarctica.

Learning how to organize and process large amounts of data and to write computer code has been the biggest single advance in my education. While it sounds counter-intuitive, I am convinced, that this is especially true for people who think they are not good at Math and who shy away from equations. Being able to write a small program to plot things is ultimately a tool to use the power of your brain better: viewing and manipulating a plot provides a broader experience than text and equations. If you work with data and models, you understand the subject you work with much better. And this will help you to better confront existing knowledge with the observations you make next time – or to plan more efficient observations.

And, there is another benefit. Writing computer code forces you to organize your thoughts. This is an analogy to how we see the writing of scientific text as an integral part of knowledge generation. Only when we formulate and structure what we have in our heads as text, do we see where it contains flaws or needs more work. Only then can you show it to someone and ask for feedback. Both ultimately let you grow in your understanding. The same is true for writing computer code. It helps us to be clear and to put the finger on areas that need work.

Learn how to program! It will be one of the most valuable skills you acquire in your studies. Don't be demotivated by having to spend many hours with the help function and Google to solve trivial things. All this helps you to acquire problem-solving skills and to be able to build the tools you need instead of being limited by what is available.

Stephanie Jackson, E-Communications Strategist, University of Ottawa


Word and Excel, just like the hardware of a computer itself, are tools to do a job. You wouldn't use a laptop to hammer in a nail, and you wouldn't use a screwdriver to analyze complex statistical data sets. Just about every complex task you work on requires the right tools for the right results. In the current technology-focused world, understanding the basics of major coding languages, as well as how they interact with one another, is critical for achieving the best results with the resources you have available. If I don't have a grasp on how various coding languages 'talk' to one another, even without having a proficiency in coding the language itself, I cannot effectively create a system which is both efficient and sustainable.

Of course, my experience is primarily web and web application based, so more php and ruby, less python, but the principle still stands ;o)

Kristen Jeanette Holden, Stay-at-home-mom, pausing from PhD studies at University of Chicago


I've got an MA in humanities from a top 3 school and focus on Japanese war/postwar film and literature. It's a small field with maybe a dozen experts outside Japan, and lost films and texts are still being found in secret vaults all over the world (the Japanese used film reels as fuel during the war, so colonial Korean and Manchurian political films were all thought to be destroyed). The crappy websites of eccentrics can lead to published papers and even full books because so little information is available. Just knowing html and Javascript is incredibly helpful. View Source got me through many big papers.

Who knew that my 15 year old self's desire to put up a page on hometown.aol.com with comic sans paragraphs over animated backgrounds and blaring midi music would help me in grad school?

Rachel B. Bell, Website Designer at Verbatim Design in Providence, RI


I majored in Studio Art at Smith College. My focus was on Photography and Reduction Linoleum Cuts. I took one class that included about a week of working with basic html. Little did I expect at the time that two years later, I would be a website designer and search engine optimizer.

Bonus: Chris Bosh, NBA Superstar


Being a kid of the 1990s and living in a house run by tech-savvy parents, I began to notice that the world around me was spinning on an axis powered by varying patterns of 1s and 0s. We’d be fools to ignore the power of mastering the designing and coding of those patterns. If brute physical strength ran one era, and automation the next, this is the only way we can keep up. Most jobs of the future will be awarded to the ones who know how to code.

We use code every time we’re on the phone, on the web, out shopping — it’s become how our world is run. So I take comfort in having a basic understanding of how something as big as this works.

Read the whole article: http://www.wired.com/opinion/2013/10/chris-bosh-why-everyone-should-learn-to-code/

Monday, November 4, 2013

The "Why Are We Learning This?" Guide for Arts and Social Sciences

In my Intro to Computers for Arts and Social Sciences class, I have been introducing the students to a bit of programming and algorithmic thinking in addition to the traditional topics (data representation and MS Office).  I try to connect back to why learning to code is useful, even in arts fields, but I am not always successful.  So, in hopes of doing a better job making my case, I decided to put together a document that summarizes the answer to the question "Why are we learning this?"



This post summarizes some of what I've got so far.  I've also been collecting testimonials to share with the students.  These are stories from arts and social science students, graduates, and professors explaining why code is useful to them.  I will share those another day.

If you've got any ideas to add to this, please do share!

Why Learn About Data Representation

It’s inevitable: no matter what field you’re in, you’ll have to work with data in some form or another.  Having a good mental model of how information is stored on a computer can help you not only manipulate that data, but think about the best ways of collecting, storing, and analyzing it.

For example, if you need to collect images for a project, you might have previously just used colour images by default.  But now that you know how much less space grayscale images can take, you might decide that they are the better choice when colour is not needed.

Why Learn Computational Thinking

Computational thinking is about problem solving. We use computers to solve problems in every field these days. It’s not enough to be able to follow a tutorial on “how to do X” - you need a deeper understanding of how computation works in order to tackle previously unseen problems and know that you are solving them correctly and efficiently.

Here are some specific reasons to practice this type of thinking:
  • You need to know how to take a problem you need to solve and transform it into something a computer can actually work with. We think too high-level for a computer to “get” what we want to do without breaking things down into really specific chunks.
  • The world is becoming increasingly complex, and you need to be able to deal with that complexity.
  • Similarly, you need to be able to handle ambiguity and open-endedness in the way a problem is defined and even in how you are expected to solve it.

Why Learn About Algorithms

Algorithmic thinking is part of computational thinking.  You might run into a situation where you have to program your own algorithms as solutions to problems.  Even if you never touch a line of code again, learning algorithmic thinking is useful.  Here’s why:
  • You build a mental model for how computers work.  This helps you choose the right tool for the job when you have to solve your own problems, and do a better job of troubleshooting when things go wrong.
  • The ability to write out an idea correctly and unambiguously transfers to the ability to write effective instructions or arguments in essays and other documents.
  • To think algorithmically is to be able to specifically translate a problem into something the computer can solve, whether you use Python, Excel, SBSS, or some other tool to actually solve the problem.

Why Learn How to Code

This is a big one, obviously. Being able to solve problems with code means you can tackle problems that Excel and other programs can’t help you with (for example, text-based problems).  It also means that you have full control over the solution, giving you the ability to customize it to suit your needs exactly.

Here are some general reasons to learn how to code:
  • Writing some code is the best way to understand concepts that can be applied elsewhere, like if statements and while loops.  It is also the most precise form of algorithmic thinking.
  • If you know how to code, you have the power to be endlessly creative.  From interactive fiction to web apps to computational art, there’s a lot you can do with code that is difficult or impossible without it!
  • Writing simple programs can help you automate the really boring parts of using a computer.
  • If you have an idea, you don’t have to wait for someone else to create it. You can do it yourself!
  • If you can put a knowledge of programming together with whatever it is you are studying, you become extremely valuable to that industry.  High paying jobs that few people can do well become open to you.

Here are some real example problems that can best be solved with code:
    • Rescaling climate change data to analyze it in new ranges
    • Text analysis by making a concordance of a text
    • Digitizing horizon shading (when does the sun rise/set behind mountains, local rocks, trees, ...)
    • Removing noise from measurements of snow height made by an ultrasonic sounder
    • Facilitating collection and analysis of data from an experiment that determines whether seeing the sign of a simple mathematical equation before the numbers gives someone an edge in solving that problem quickly

    These are some answers I got on Twitter when I asked “Why do you think an arts/social science student should learn to code? Reply with your reason, be it fun or practical, general or specific.”
    • “Same reason a CS student should learn from the arts: a different perspective is aways [sic] 'a good thing'.”
    • “Social science - 1 word, data. Arts - creativity.”
    • “So they know enough about the difficulty of software dev that, if elected, they don't do a http://healthcare.gov”
    • “because Robert A. Heinlein: http://www.elise.com/quotes/heinlein_-_specialization_is_for_insects
    • “the world is increasingly complex, and built, more every day, in code. being unable to understand basic science or software will soon be nearly as self-limiting as lacking numeracy or literacy is for many people now.”

    Monday, October 28, 2013

    Video Games and Learning: My First MOOC Experience

    Way back in the springtime I signed up for a Coursera offering on video games and learning.  I had no idea when the course would actually be offered, and forgot about it until they finally, around the end of September, announced that the course would be beginning shortly.  Right in the middle of my first term of full-time teaching.  A term in which I have 700 students.  Talk about timing!


    Despite the possibility that I couldn't give this course as much attention as I'd like, I decided to give it a try anyway.  It's an area I'm interested on a personal and research level, and if nothing else, I figured the videos should be interesting.

    So far, so good in that regard.  I was excited to see so many familiar faces in the lectures and concept videos.  They aren't people I know personally, but whose work I've been following for some time.  The topics have been interesting, and I really enjoyed seeing the Games Learning Society lab space (totally a place I could see myself working).

    I've consistently been about a week behind the lecture and assignment schedule, so I often miss out on the more timely discussion in the forums.   I'm not sure it matters much in my case, though, since I don't have a huge amount of time to dedicate to interacting with other students anyway.

    One question that's fair to ask is whether I've actually learned anything from the course so far.  Honestly... I'm not sure.  Because it's an area I've been watching for a while now, I probably know most of the basics already.  I also can't remember many of the specifics of what was covered in the lecture-style videos (they are very, very hard to focus on, unlike the animation-supported concept videos).  That said, it is nice to have the review and to think about new things via the assignments.

    My experience with this, my first MOOC, has been good enough that I signed up for another one that's more directly related to my thesis project: The Future of Storytelling.

    Monday, October 21, 2013

    Review the First Sample Chapters For Our CS Book For Beginners

    You may remember hearing about a project I've been involved with for the last couple of years.  We're working on a book about computer science designed for beginners; something that could be used, for example, in my "introduction to computers for arts and social sciences" class.  Well, we've finally got two chapters ready for review, and would love to get your feedback on how we're doing so far.

    Note: If you're a beginner in the world of computer science, even better!

    The first sample chapter is on Data Representation. This is the first chapter from Part I of the book, which covers computing fundamentals.  The second chapter is on Artificial Intelligence. This is one of our in-depth subject areas and builds on concepts introduced in basic chapters.  It will appear in Part II of the book, which surveys some of the major fields found within computer science.

    If you're interested in helping out, you can review either one of the chapters, or both.  There is a short survey to fill in about the chapters.  We also intend to publish a list of our reviewers, should you wish to have your name included.

    If you're interested, please contact me, and I'll send you all the information and links you need.  (If you've left your email with us in the past, and haven't heard from us yet about this review opportunity, you probably will.  Please still feel free to contact me directly now.)

    Thursday, October 17, 2013

    Slides from 'Coherent Emergent Stories in Video Games' / GHC13

    I gave a talk at this year's Grace Hopper on what I've been working on for my thesis project:
    Coherent Emergent Stories in Video Games
    Crafting satisfying narratives while preserving player freedom is a longstanding challenge for computer games.  Many games use a quest structure, allowing players to experience content nonlinearly.  However, this risks creating disjointed stories when side quests only minimally integrate with the main story.  This talk introduces the problem of nonlinear storytelling in games and discusses our flexible, scene-based story system that reacts dynamically to the player’s actions.

    My slides are embedded below and you can learn more on my website.



    Wednesday, October 9, 2013

    Why are we still geeks? Correcting media images of Computer Science / GHC13

    Maria Klawe (Harvey Mudd College, far left), Brenda Laurel (Purple Moon, far right), and Kim Surkan (MIT) gave an insightful panel about the images of geeks in the media.  In some ways, I didn't learn much new, but I liked hearing about their personal experiences and getting new language to talk about the problem with.


    For this post, I'd like to share some of my (mostly raw) notes from the session.

    Maria's Part
    • no progress made in changing the image of professionals in the media
    • is a believer of failure
    • "people listen to you more" when you have gray hair
    • remembers a time when there were very few female doctors and lawyers
    • in the 70's shows depicted both male and female doctors and laywers (though not in the same show), and this caused flood of women into these professions.
    • more recently: forensic crime shows caused influx of women studying the field, even though job opportunities for forensic science and CS are at opposite ends of the spectrum
    • it's not just about tech women (problem with portrayal of all women, and of tech guys as well)
    • in the mid-90's, she was seated at dinner beside NBC exec responsible for Sat night movie series; said we needed shows about scientists and engineers; he said nobody knew any engineers in real life so wouldn't relate!
    • tried to write a pilot episode but saw halfway through it was going nowhere (too unrealistic)
    • someone wrote a pilot for a show called Rush about Silicon Valley start-up trying to win the DARPA challenge; she sent it out to 20 people with connections in the media; everyone loved it; but it went nowhere!
    • optimistic but doesn't know what else to personally try
    Brenda's Part
    • looking at the GHC poster from last year: not geeks, wearing nail polish; white woman in the middle giving advice to the black woman, asian woman starting into space (did a photoshop to fix this)
    • Numbers proves it's possible
    • we are responsible for our own representations ("I like the way we look!") 
    • "put out our own self-representations"
    • "deny power to the spectacle"
    • "do good work and get noticed for it"
    • check out http://femtechnet.tumblr.com and Wikipedia storming
    Kim's Part
    • media consumption is growing (2010: average 7 hours and 38 minutes) 
    • stereotypes of women being bad at math, as STEM fields being boring and unfulfilling
    • it's hard to notice what's not there, but when it isn't, you begin to associate the idea, for example, that all doctors are men, white, etc...
    • only computer science is declining in females, not other STEM fields
    • was not always this way; women were active in programming (e.g. ENIAC)
    • nerd stereotype most common explanation for low female participation
    • sexism in CS culture (especially gaming): recruitment, hackathons, sexual harassment/rape culture, lack of role models

    Monday, October 7, 2013

    Computational Art Using Processing for CS0 / GHC13

    I love the curriculum that Zoe Wood and Julie Workman created for their school's CS0 course and that they spoke about at GHC13.  It uses Processing, like the CS1 course that I'm currently teaching for non-majors, but focuses solely on the idea of computational art for its context.  My course has a bigger variety of problems to introduce concepts, but that's not necessarily a better thing. I do like their course's focus.


    Although the hope is that some of these students continue on in CS, this course is not as in-depth as a full-fledged CS course.  Some of the outcomes include students understanding that computers process commands one at a time, commands must be precise, variables allow for flexibility, functions allow simple concepts to be combined into complex programs, and playing is ok! (I hope my students walk away with that last one especially.) The curriculum embodies basic computational thinking, basic programming skills, working in teams, learning basic college skills, and enjoying computer science.  It covers shapes and 2D coordinates, colours, interactivity, animation basics, geometric shapes (implicit and parametric), images (arrays and pixels), and particle systems (classes).

    The five course projects really inspired me.  I loved how flexible they are, and how interesting the demoed results were.  These are the project topics:
    • Chuck Close, up close (each student makes one pixel, group puts them all together)
    • self portrait of social interaction (every mouse click shows visually how student feels)
    • self portrait (get a photo of themselves, do image manipulation, and implement hot spots that have different responses) 
    • tell a story (computational animation)
    • interactive montage with a 'journey home' theme (done in teams)
    Zoe and Julie emphasized just how fun the course is to teach, but also shared its success in terms of increasing female participation.  In four years, they went from 9% to 21% women!

    I've already been leaning toward Processing as a better choice for a first language as compared to Python.  The experience shared in this talk along with my own comparison of teaching both languages this semester is solidifying my view on this.  Python is a great early language, but I still prefer Processing first, especially for its potential to engage non-traditional students.

    Thursday, October 3, 2013

    CS Principles and the CS 10k Initiative / GHC13

    As the opening keynote here at GHC reminded us, computer science has a supply problem.  The number of people we need to create technology is increasing at a much faster rate than students taking computer science in schools.  The Exploring Computer Science and Computer Science Principles projects are aiming to help fix that.


    At a panel discussing the two projects, we learned why they matter and how they work.  CS Principles is an advanced placement (AP) course for high schools that is currently in pilot mode.  (AP classes, for the non-Americans like myself, are like college level classes taught to high school students in exchange for college credit later on.)  On the other hand, Exploring CS is intended as a high school level class taught to high school students.

    Both take an approach to teaching computer science that is dear to my heart.  They want to show why computer science is interesting and relevant; students should "learn how computer science is used as a lever to move the world."  They do it not through typical lecture-based styles of teaching, but through inquiry, offering interesting problems that engage students.  Exploring Computer Science is described as student centred, collaborative, and inquiry based — a very powerful combination!


    The goal is not to teach coding, but computational thinking.  For example, CS Principles centres around several big ideas including creativity, global impact, abstraction, the Internet, and more.  It does make use of fixed-response questions as assessment, but it also has performance tasks that give much more flexibility to students. This really gives some insight into the kind of "content" delivered.

    It's this kind of philosophy that I was inspired by when creating my version of our "Introduction to Computers for Arts and Social Students" course.  Of course, with 440 students in a huge lecture hall, the kinds of in-class activities and assessments is somewhat limited.  Even still, I could take this course's design so much further than I have so far, and hope I get the chance to in the future.

    I'd also like to push my outreach teaching and curriculum to the next level.  As I do, I should take heed of the advice given by the panel in response to an audience question: If you are a non-profit (like Girls Who Code, for example), and you are considering using these curricula, start by talking with teachers.  They know how to engage a group of high school students and teach them effectively.

    An Exciting First Day at GHC13

    Today was our first full day in Minneapolis for this year's edition of the Grace Hopper Celebration of Women in Computing.  It's so nice to live the conference through the eyes of the students I organized to get here, seeing as it's their first time at GHC.  It's also nice to meet up again with all my women-in-computing friends that I rarely get to see outside of the conference.

    Things got started with a nice welcome session that happened to include me going on stage with my co-chair for the Communities Committee, Charna, to get recognized for our efforts.  The opening speakers (including student members of the ABI boards!) also gave some great advice for newcomers.


    Then came a highlight of our day: the keynote / plenary session that featured Telle Whitney (CEO of the Anita Borg Institute), Sheryl Sandberg (COO of Facebook), and Maria Klawe (President of Harvey Mudd College).  There was a lot of really good, frank talk about gender issues and facing them head on.  Karla, a GHC Communities Volunteer, blogged about this session - check it out!



    There were a bunch of sessions in the afternoon, but I couldn't pay full attention to them because they were either full or I worked on my class's assignment to be released on Friday instead.  I did have fun presenting my Gram's House poster at the poster fair, making some really great connections with potential collaborators.


    I'm really pumped to see everyone again tomorrow (for longer!), the sessions, my own talk, and most of all, the dancing!

    Sunday, September 29, 2013

    Gearing Up for Grace Hopper Next Week

    For me, today is all about getting ready for the Grace Hopper Celebration of Women in Computing next week.  As usual, I'm involved with the conference in many different ways, from presenting a poster and talk to being a member of the Communities Committee.  Plus, I'm organizing a group of five other Carleton students who are attending for their first time!


    I was thinking about all the different posts I've made about GHC over the years, and realized that I probably have a few that would be useful to attendees this year, too.  So here's a round-up of my most useful posts as we all gear up for next week:

    Saturday, September 21, 2013

    A Preview of My GHC13 Gram's House Poster

    It's not finalized, but here's a preview of the poster I made about Gram's House, a research project I started a few years ago, for the Grace Hopper Celebration of Women in Computing.  Gram's House is a game designed to encourage girls to consider computer science through a story about making a difference for a loved one and through computer science concept puzzles.


    As usual, my poster is fairly minimal in terms of text content.  I use my posters as props to talk about the project during the poster presentation, or as teasers to entice viewers to get more information.  If you'd like to know more, visit me during the conference poster session, or check out my research page about the project where you can also look at the PDF of the poster.

    Friday, September 13, 2013

    Early Experiences with Poll Everywhere and Peer Instruction

    I've now survived the first three lectures in both my classes.  Both are introductory computing classes for non-majors: one is heavier on concepts but includes Python programming, while the other is heavier on programming in Processing.  Both are also quite large: 440 and 280 students respectively!

    I have always been a strong believer in active learning, even in huge lectures.  One of the main ways I'm incorporating active learning this term is through peer instruction and Poll Everywhere (an all-software version of clickers).  Carleton has a paid account for Poll Everywhere that all professors are able to use, and the service is totally free to students.

    So far, even though not all my questions have been perfect, I am quite happy with the results.  It seems that students are engaged with the questions at hand, based on my walkabouts and seeing much arm waving toward the screen as students discuss the answers.  In most cases, I see a marked improvement in how many are selecting the correct response.

    Here's a good example.  In my Processing class, I asked the following question after we learned about variables:


    At first, the answers were pretty evenly split between red (52), blue ( 46), and neither (42).  After students had a chance to discuss with their friends ("convince someone who answered differently than you why you are right"), the responses were mostly red (77), still some blue (24), and fewer neither (15).

    Even better, after the voting, I ran the code so we could see that the answer was indeed red, and I said "I guess you want to know why, right?" There were students who audibly agreed with that sentiment. ;) So I did an explanation on the black board using our variables-as-boxes analogy.  It was wonderful.

    I have only done five "real" polls between these two classes so far, but I must say that I am already a strong believer.  It will be interesting to see what students think of it when I ask for informal, anonymous mid-term feedback in a few weeks.

    Thursday, September 5, 2013

    Pictures of My New Office

    I moved into my new office on Tuesday, and finally decorated a little bit.  Here are some photos of my new home!


    My teaching and office hours are now posted on the little sign outside my door.  Why, yes, I did use scrapbooking supplies to decorate my schedule!



    This is the view when you walk in.  The setup is actually quite comfy, with a proper adjustable keyboard tray and all.  I brought a lot of stuff from my desk in our research lab; that's the only reason the shelves look at all full.



    There is a little table and chairs to the right of the door.  I don't think most profs have this - it was just left over from the previous administrative occupant.  I also finally found a home for some photos we had framed for our photo club exhibits.



    This is a close up of some of the shelves.  I've got mugs and thank-you cards from various outreach events and invited talks, a family photo, and of course Computer Engineering Barbie.  The teddy bear came from a student in one of my mini-courses.

    Friday, August 30, 2013

    Designing an Intro to CS for Non-Majors: From Objectives to Problems

    When working on my introductory computer science class for non-majors, I started with the objectives.  From there, I thought about the types of assignments and tutorials I wanted, but mostly moved on to figuring out the actual lecture content.  I like to organize my courses by specific problems in a way that is loosely related to inquiry-based learning.

    With this approach, I think about the kinds of things that my audience might find useful or interesting.  The earlier problems tend to be more on the interesting side, but by the end the problems should be more relevant to the students' fields.  During lectures, I will introduce the problem by showing the completed software, then go step by step in showing how that software is built.  In the process, new concepts need to be introduced.  For example, when we start to get bored of repeating certain values all the time (and start to run into errors when changing these values), I'll introduce variables.

    The best part about having my learning objectives done first is that I can use them to make sure I've hit all the main points within these problems.  As I write out my step-by-step outline, I highlight key words that are colour coded to the objective they relate to.  I imagine this will also help tremendously as I move on to writing the code and creating the lecture slides and peer instruction questions.

    Here's an example of the second problem's design for this course:

    Another nice feature of the problem-based organization is that I have a natural way to organize the content (such as slides, code, and other resources) in our online learning management system.  I haven't tried this before, so I don't know how well students will like it compared to, say, a week-by-week organization.  I should mention that I am also including tables of resources according to topic (e.g. variables, functions, good programming concepts, etc) as well as by problem, so hopefully this will help.


    With all of this laid out, it will be much easier to fill in the details.  That's the most fun part!

    Wednesday, August 28, 2013

    Introducing the GHC13 Communities Committee

    Did you know that the Grace Hopper Celebration of Women in Computing has a strong online presence? From Tweeting to blogging to note taking, we've got you covered.  Whether you're an attendee who hasn't figured out how to be in 8 places at once, or someone enjoying the conference from afar, social media can show you what you've missed.

    It's the Communities Committee along with our awesome ABI representative Rosario Robinson that make this all happen.  I'd like to introduce you to the committee now!

    Charna Parkey, Co-chair
    DSP Engineer, PhD Candidate, yogi, martial artist, potter, step mom, volunteer, entrepreneur. Passionate about life, food, friends and family.
    Gail Carmichael, Co-chair
    Computer scientist, educator, and blogger who is taking leave from a PhD to teach undergrads for a year.  Wrangler of a toddler who thinks bedtime is the worst time.
    Kate Tsoukalas
    Software testing ninja, blogger and tweeter passionate about promoting, encouraging, and increasing the numbers of women in tech.  Can be found chasing Frisbees and climbing walls in her spare time.
    Rosario Robinson, ABI
    Her Systers’ Keeper. Developer, open source advocate, and passionate about making positive social global change. Working for the cause and not the applause. Changing the world through technology and community engagement.

    We'd love to get to know you, too.  If you're interested in being a Communities volunteer at this year's conference, submit an application by September 7 by clicking the link on the right hand side of the Communities home page.  Be sure to read Kate's summary on why being a volunteer is awesome!

    Monday, August 26, 2013

    Designing an Intro to CS for Non-Majors: Starting With the Objectives

    I have been working on my course design for my introductory computer science class for non-majors.  It is taught in Processing and covers all the basics of programming and computational problem solving.  I have been keeping the idea of backward course design in mind in that I am starting with my learning objectives and working from there.


    This approach is turning out to be helpful for several reasons.  For one, I wanted to organize the content into 8 or so example programs that will hopefully be of interest to the target students.  Each program will be demonstrated first before I walk them through how it's made via live coding.  As certain concepts are needed, the coding will pause and we will discuss the concept in general and in the specific context of the program.  I also intend to have at least one peer instruction question per lecture period.  Having a detailed list of objectives is helping me ensure I hit all the main points in the planning process.

    Beyond this, as I have found when teaching as a contract instructor in the summer, you can give your learning objectives up front all you want, but it doesn't mean students will remember them or see how the course material connects to them.  This year, I plan to colour code the objectives and explicitly link to them during every lecture and in every tutorial and assignment.  I am hoping that this will make the course more clearly interconnected and help students organize the content in their minds as we go.

    Finally, always linking back to the objectives will help me prove to students (and know for myself) that everything we do is relevant to the desired outcomes.  Nothing should feel like busy work!

    If you're interested, the current version of my objectives for this course are below.

    By the end of the course, you should be able to...
    • Understand what computer science is, and how it can help you solve problems in your field.
    • Learn how to use Processing to create visual programs of varying types.
    • Explain these basic concepts of programming to somebody who has never programmed before:
      • data types (numbers, Strings, etc)
      • variables
      • functions
      • Booleans and if statements
      • loops
      • arrays
      • objects
    • Solve basic programming problems by working with:
      • searching and sorting algorithms
      • using simple data structures
      • dynamic memory
      • recursion
    • Develop good programming practices in the areas of:
      • breaking a problem down into smaller pieces
      • testing
      • debugging
      • code reuse
    • Learn to approach programming problems with the following values:
      • a desire to experiment
      • the confidence to make mistakes and try again
      • the instinct to consult documentation and seek solutions yourself before asking for help

    Wednesday, August 21, 2013

    The Latest on the App Formerly Known as Carleton Quest

    I've been making good progress on the app formerly known as Carleton Quest.  I've rewritten the story to include more faculty-specific info and general school spirit, made fewer locations mandatory, and updated the UI.  I submitted an ethics application for the survey we hope users will complete at the end of the app for a chance to win great prizes.  I've also been looking for a new name (so far, the winner is CU There; let me know if you like it).

      

    I'm still working out a few bugs with that fancy centre button with the camera, and Andrew Heaton kindly offered via Twitter to help me style the HTML story text (thanks Andrew!).

    With luck, I'll get this version submitted to the app store soon, and our posters with QR codes will be up in the next couple of weeks.

    Friday, August 16, 2013

    Making the Most of Your Messaging in 'Women in Computer Science' Outreach

    If you've ever done outreach with girls to try to get them into computer science, you may have wondered what the best way to do it is.  After all, we've been at this a while, and yet we haven't seen the level of progress we had hoped for.  What is going wrong?


    I have a formula that I've used in my outreach for the last 6 or 7 years now.  It goes something like this:
    • I introduce myself with fun pictures of my family and hobbies.  I also include a photo of me at the Golden Gate Bridge so I can talk about how companies like Google support women in CS through scholarships and gatherings.
    • I ask the girls what computer science is, then explain that it's really all about problem solving.  I go through several domains to show how computing is connected, and if there's time, I ask them for their hobbies and give some possible connections there.  I also show a video from University of Washington on various pathways in computer science to drive home the point that CS is really diverse.
    • Our discussion then turns to the issue of women in CS.  I show some graphs that illustrate the problem, then ask the girls to discuss three questions in small groups before we bring it up with everyone: (1) Why don't girls go into computer science? (2) Why is this a bad thing? (3) What would make you interested in trying computer science in high school or college? This is followed by the great little video on women in CS from Google.
    • Finally, I do a hands-on activity to showcase a real computer science problem (typically, a CS Unplugged activity).
    This formula has served me well.  In my mini-course, I have this discussion on the first morning of five full days of learning about computer science and videogames.  I do pre-course and post-course surveys to see how the girls' attitudes change, and generally the trend is positive.  Even when they aren't sure about CS being a good career for them, they are interested in pursuing some courses in the future.  (You can see some results here, here, and here.)

    But is my approach the best it can be? Will it encourage the girls to stick with CS even if they do decide to pursue it somewhere they are likely to be the minority?

    My section on the 'women in CS' issue has been questioned a couple of times.  In the first, Barbara Ericson mentioned that when they tried to counter stereotypes, they actually ended up reinforcing them, causing a decrease on the number of girls who thought they could succeed at computing.  More recently, Jim Davies pointed me to research about normative behaviour, explaining that by pointing out the problem, people are more likely to focus on that and behave the same way.

    Obviously, these two things had me a bit concerned, and got me wondering if I should be dropping that portion of my outreach altogether.

    But I knew I had a purpose for talking about the problem.  It would feel disingenuous to ignore it altogether because I think most people realize it's an issue; however, if doing so improves our results then it may be worth it.  Another reason I do it, though, is based on the fact that I am not only trying to change a current opinion about the field.  I want to make sure that if I can convince them to further pursue computer science, they will not leave again as soon as they run into the issues that might have kept them away now.  In other words, I want to prepare them for what may come next.

    Based on this, I knew I had to dig deeper so I could try to modify my approach instead of dropping that section altogether.  I found the research that Jim was talking about: a paper called Managing social norms for persuasive impact.  It describes a study on what type of messaging is most effective when trying to convince people to behave a certain way (in this case, to stop people from stealing wood from a petrified forest).

    There are two main ways of illustrating the type of behaviour you want from people.  You can use descriptive norms, which make use of what people are currently doing.  Public health campaigns use this often: "more than 3 million youths in the US smoke and ... 3,000 become regular smokers each day."  Alternatively, you can use injunctive norms, which focus on what people ought to do.  For example, "don't leave your campfire."

    Previous theories as well as this particular study have shown that the most effective type of messaging is not descriptive, but injunctive, for the reason Jim mentioned above.  Further, it is much more effective to use negative wording rather than positive (e.g. "don't leave your campfire" vs. "stay with your campfire").  This is interesting given how many campaigns meant to persuade people ignore this advice.

    In my case, it seems clear that focusing on the actual number of women who don't go into computer science is a mistake, given the descriptive nature.  The girls in my audience may focus on that and think, "well if no other women go into computer science, why should I?" The follow-up discussion may counteract that, but why risk it?

    If I still want to address the issue in some way, I need to find an injunctive way to do it.  I think it may be possible to do this by focusing on what we want the girls to do: try computer science.  A negatively worded question I came up with is this:

    What would stop you from trying and enjoying computer science?

    I think this avoids the issue of focusing on women who don't go into CS, yet allows us to explore the issues they might face later on.

    What do you think? Is there a better way to approach this problem that fits with the research? Where can you switch your own messaging from descriptive to injunctive?

    Friday, August 9, 2013

    Female Friendly Narrative Modding in Games

    Why is it that there are still so few video games stories with awesome female protagonists that don't play into the usual gender stereotypes? What's a gamer to do if he or she wants to experience more of them today? Narrative modding might be one minor possibility...


    I started my journey into female friendly narrative by randomly looking up a link I've had saved up for a while: Ada: Journal of Gender, New Media, and Technology.  I found an interesting article called Self-Saving Princess: Feminism and Post-Play Narrative Modding.  It discusses the idea of modding not the game itself with editors or code, but the modding of the narrative outside the technology, that is, "modding that takes place through player and critic participation after the game has been created through discourse."

    For example, Anita Sarkeesian of Feminist Frequency is discussed as someone who has modded the narrative of games with respect to how women are portrayed in them. 
    Her call for funding for a series of videos on this topic was met with outrage, disgust, threats, anger, and resentment from some sectors of the gaming community online. ... But anger wasn’t the only response to Sarkeesian, and in fact, it seems that the anger and threats of violence incited more support for her project than had existed previously (and may have existed at all).
    And now, with three videos published from the Tropes vs Women series on video games, Sarkeesian is calling on players to look at female characters in games in a whole new light.  This is narrative modding because "it fundamentally changes the way that players are able to engage with the game because of their knowledge of her critique and the community’s response to it.  Once these tropes are exposed and brought into mainstream discourse, the player’s experience of the game is modded."



    The latest Women vs. Tropes video, Damsel in Distress: Part 3, embedded above, mentions explicit narrative modding, albeit briefly.  One well-known projects that changed Link into a girl through a Wind Waker mod came from a fellow Carleton University alumnus, Mike Hoye.

    Initiatives like these are very cool, but the fact that any sort of narrative modding is even necessary has to make you wonder when video games are going to grow up and offer more female-friendly stories.  I'm hoping it'll be in time for my daughter to enjoy them when she's old enough to play.  (She's almost 2 now, so get on it, industry!)