Showing posts with label Carleton. Show all posts
Showing posts with label Carleton. Show all posts

Tuesday, March 8, 2016

My Nonlinear Career Path

I've had a really nonlinear career path. One step forward, two step sideways, new goal, start it all again...


My interest in computers started at a young age. I was lucky that my dad, a government worker, was able to bring home the computers his office was done with. As a result, I have had access to computers, and even had a computer in my own room, from a young age.

I've always loved to create with computers. From writing stories to designing newsletters for my Guiding troupe, I was always making things. Even today, I make digital scrapbook pages!


In high school, I started becoming more and more curious about how things work "behind the screen," so to speak. How do you write code to make a word processor? What's the math behind vector graphics? How does computer hardware, at the lowest level, add two numbers?

I decided I wanted to take computer science in university so I could learn all this and more. I didn't learn how to program in high school; instead, I took drama and music while I still could. But I was pretty sure I'd love the world of code whenever I eventually entered it.


Turns out I was right. I also loved working in the industry during my co-op terms. One of my jobs was at Ross Video, working on software for a video production switcher. The other was at Corel, where I worked on the text engine for Corel DRAW, software I had used for many years in my personal projects.

Nearing the end of my undergrad, the most difficult decision I faced was which of these two companies I would try to work at full-time. I never thought I'd do anything other than go to industry.

I was going to be a software developer.

Until, that is, a professor approached me and convinced me to consider graduate school. The catch? The application for the big scholarship was due in a week. Well then.

Image adapted from Ivory Tower by OfTheDunes

I applied, and I got the scholarship. So I went to grad school for my Masters. I had a great time, and even got my start in outreach, but learned something very important: I didn't care for the low-level, experimental nature of my thesis topic, and wished I did something more applied.

I decided to continue on to my PhD, choosing storytelling in videogames as my thesis topic. I engaged in educational games and computer science education research on the side. I also took the opportunity to gain more teaching experience. I eventually realized that education was my passion and I wanted to teach.

I was going to be a university instructor.

After some contract work, I got a two-year term position as a full time faculty instructor. I made an impact with some innovative course designs and a lot of hard work in outreach and diversity. But when I tried to get a permanent instructor job, I missed it by a hair. Although I was not yet finished my PhD, I didn't really fancy going back to being a full-time student. Instead, I figured: why not go back to industry and be a software developer again?

So off to Shopify I went. I joined the Home team, working on the first page merchants on the Shopify platform see when they log into their admin. I learned both Ruby and Rails, and finally had a chance to try real-world web development.

I quite enjoyed working as a developer, but it was a step sideways from my goal of teaching. However, in the fall, an opportunity arose.

I was going to jump back into education once again!

Starting this past January, I became Manager of External Education Programs. I'm working on some really exciting education projects, including a sponsorship of the Ottawa Network for Education's AppJam. I get to create curriculum, teach, and even create a team of similarly passionate folks here at Shopify.


So while I have taken some steps back in my career, and some other steps sideways, I find myself feeling very fortunate to end up where I am now. So if you ever find yourself on a really windy career path, don't fret: go with the flow, and see where it takes you. You might find yourself ahead of where you expect, even if it you hit your goal at a bit of a strange angle.

Wednesday, February 10, 2016

First Canadian Celebration of Women in Computing (CAN-CWIC)

For the first time ever, I attended a women-in-computing conference with absolutely no student affiliation whatsoever (I recently de-registered from my PhD for the time being). But that's not what made the first ever Canadian Celebration of Women in Computing special; not exactly. The thing I really, really enjoyed was spending time with my past students and colleagues from my time at Carleton.

I went to the first ever local ACM-W celebration held in Ontario way back in 2010. At the time, it was the Ontario Celebration of Women in Computing. I was doing the student thing full-force at that event, with two posters and one talk that covered both research and our Women in Science and Engineering group. Since then, other local celebrations cropped up around Canada until this year, when they amalgamated into CAN-CWIC.


The format of CAN-CWIC was similar to what ONCWIC did years ago: dinner, keynote, and social on Friday night with various talks and workshops on Saturday. At this year's banquet, I sat with an awesome group of mostly Carleton students and one lonely uOttawa student. And it was so nice. I loved catching up with everyone, and even had opportunities to give mentor-oriented advice.

The time I spent with my own former students made me realize that in fact most of the attendees were students. I would really love to see more industry representation, and not just to stand behind recruiting booths. I feel like more balance would meet provide more mentors and role models for the large student contingent. What could CAN-CWIC do to attract more industry professionals? Maybe looking at Grace Hopper's career tracks would give some ideas.


This year's tracks at the conference were interesting nonetheless. The speakers I saw were quite good. I particularly enjoyed Amber Simpson's talk on medical computing (more specifically, how image analysis can help with cancer diagnosis). It was also great to see Jennifer Flanagan, CEO of the Canadian STEM outreach non-profit Actua, talk about Actua's involvement in computing outreach. I'm really pumped about trying to team up and contribute to bringing computing education to all K-12 across Canada.

I do have some nitpicks about the conference location this year, the main one being that the space was too small and segmented. Hopefully next year's event can be in a larger, more thoughtfully laid out space. But my concerns are small in comparison to the impact conferences like this have. I hope CAN-CWIC continues to grow, and that it's somewhere awesome next year so I'll be enticed to go again. ;)

Monday, January 11, 2016

PhD: On Hold

I've sent in the forms.  I've updated my committee.  The deed is done.

My PhD is on hold.

Pause
Pause / Rafa Puerta

More officially, I am deregistering from the program in good standing.  I am giving myself max one year to reevaluate, but my intention is to eventually reapply and finish my thesis.  I don't need the degree right now, which is why I feel ok putting it on hold, but I do want it in hand eventually to open some doors in the future.

I have been on leave from the program since September 2015.  It seems that I could get another semester of leave, but I don't think it will be enough.  There's an exciting new education project at work.  I unsurprisingly found my way to it, and even have the opportunity to lead it.  It's on the ambitious side, so I want to make sure I can focus all my attention on its success.  Worrying about my thesis seems like a distraction for now.

All I need to do is finish my project and write my thesis.  ("All.")  I've completed coursework, comprehensive exams, and even the thesis proposal.  I do have a lot of development and experimentation work to do, but once that's done, I shouldn't have that tough of a time writing the dissertation.  I like my project and want to see it through.  It just doesn't have to be right now.

Monday, October 19, 2015

Transitioning From Academia to Industry

It seems that 2015 has been a year of change for our family.  My husband got a new job in February, we somewhat suddenly decided to buy a new house down the road over the summer, and I was unsuccessful at getting a permanent teaching position at Carleton.  Rather than becoming a full time student to wrap up my PhD, however, I decided to jump ship to industry.  And so I am currently a developer at Shopify here in Ottawa.

change
change / Andrea NIgels

When I decided to go to industry, I had my sights on Shopify and only Shopify.  Many of my friends worked there, and I felt like it was the kind of place I could make an impact.  But I was really nervous about interviewing – would they want someone who had been locked away in the ivory tower since her co-op days in undergrad?

Mind you, I have always tried hard to remain 'useful' in the industry sense.  I figured it would keep my teaching relevant if I got the permanent position, and it would help me break back into industry if not.  While I didn't work on any large-scale team projects during my grad school years, I did choose an application-heavy research area and was mindful to maintain good development practices where I could.

Clearly, it worked.  I had interesting projects to talk about during my interviews, code to show on my GitHub, and despite my nerves, I did just fine for the pair programming part.  I showed I had a strong technical base and a boatload of passion.

Once I managed to get hired, I wasn't so nervous about actually starting a few months later.  Which is interesting, since I didn't really know Ruby or Rails, the language and framework I'd be working in.  I suppose I felt confident in my ability to learn new things quickly, and I can't say I was wrong.  I still don't know Rails deeply, but I have been able to learn what I need as I go.  My aforementioned conceptual base along with my enjoyment of the design aspect of programming have made it easier.

And so my transition from academia into industry has been a good one.  It's been nice to keep more regular working hours, and it's been fun learning new technologies.  If I hadn't had 20 months of co-op experience in undergrad, or continued to practice throughout grad school, the switch would have been a lot rougher.  If you're a grad student, strongly consider industry-based internships and make sure to learn the tools of the trade (starting with version control!).  With a strong base and a little confidence, you can make the switch, too!

And as for my PhD, worry not: I am on leave this semester, but I do hope to (slowly) get through it eventually.  You'll have to wait for the "how to work full time while working on your PhD part time" posts a while longer. ;)

Tuesday, June 23, 2015

Keynote / Attracting Women to Computing and Why it Matters

I was invited to give the keynote for Women and Technology 2015, held at Carleton on June 19.  I spoke about women and computing.



I began with an exercise: how could we generate six different versions of a multiple choice midterm where the three options were scrambled differently on each of 30 questions? I gave some time to discuss the problem, then asked how many people realized this could be easily solved with code.  Of those with hands up, how many felt confident they knew how to write that code? (There were a few!) I mentioned that learning to code can help you automate the boring stuff you don't want to do manually (see, for example, the new book Automate the Boring Stuff With Python).

This lead me into a discussion of the kinds of computational thinking skills that learning to code can give you, and where those skills could be applied outside of coding.  But if these skills are so empowering, then why do so few people have them? And in particular, why are women so underrepresented?

The short answer, of course, is that it's complicated.  (It's not just a pipeline issue!) I shared a few of the factors involved, from gendered toys (see Riley's rant) to a sick tech culture.  I talked a bit about some of my own small contributions (e.g. my mini-course, Go Code Girl, Gram's House and CU-WISE).

I concluded with some homework: everyone should go forth and learn to code (or, learn some more).  If they could get to the point that they could feel positively about computing, it's a lot more likely they will encourage girls that show an interest in it to give it a go.  I hope you'll do the same. ;)

Thursday, April 30, 2015

Two Semesters Teaching CS2 With C++ and Java

As you may recall, I have been experimenting with a CS2 design that teaches both C++ and Java in a single semester.  I previously reported on the success of the design after teaching a section of majors and non-majors in the off-term.  This semester, we used an iteration of the design with two large sections taught by myself and another instructor.  Most students this semester took CS2 immediately after taking CS1 last semester.


The grades for my section are shown above (the other section's distribution was similar).  As you can see, students generally either "got it" or they didn't.  The average of all final exams in the two sections was about 70%, as was the average final grade (I expected worse for both measures).  No concessions were made to massage grades other than to drop marks for one of eleven assignments (dropping one tutorial mark of eleven and one quiz mark of three was always planned).

Aside from better preparing students for our second year courses, a major goal of the redesign was to ensure that students who do not master the concepts don't continue.  My hope is that the grade distribution above indicates this will happen.  Certainly my design has enabled me to assess deeper understanding of concepts that serve as a foundation to what comes next; such concepts were not prominent (or even existent) in previous designs.

Much of the course design was stable from last term, with some improvements in sequencing and in class code examples.  The topics now progress rather nicely from a low level procedural view of problem solving, all the way up to advanced object-oriented programming.  The new topic list follows.
  • Introduction
    • Introduction to problem solving
    • Introduction to C++
    • Pure puzzles
  • Solving Problems With Arrays (C++)
    • Arrays and structs  (including memory models)
    • Solving problems with arrays
  • Solving Problems With Dynamic Memory (C++)
    • Stack and heap
    • Pointers
    • Dynamic memory
  • Object-Oriented Basics
    • Introduction to objects (including memory models)
    • Introduction to Java
    • Object behaviour (constructors, methods)
    • References and linked lists in Java
    • Shallow vs deep copying in Java
  • Solving Problems With Classes (Java)
    • Goals of class use (encapsulation, information hiding, etc)
    • Complex reference structures
    • Separated presentation design
    • Abstract data types
  • Advanced Object-Oriented Programming (Java)
    • Class hierarchies and inheritance
    • Polymorphism
    • Abstract classes and interfaces
  • Event-Driven Programming (Java)
    • Introduction to Processing
    • Model-view-controller
    • Polymorphism you can see
  • Solving Problems With Recursion (Java)
My slides and code examples (other than code directly from our textbook, Think Like a Programmer) can be found on GitHub.

This summer, the course will be taught according to the current design, and so far it seems the plan is to continue with it next year to give time to evaluate how well students were prepared for second year.  It will be interesting to see whether it will be used long term, and if so, how it will evolve.

Monday, February 23, 2015

One Instructor's Flipped Classroom Philosophy

Earlier this month, our Education Development Centre hosted a teaching round table on the flipped classroom.  At the session, engineering instructor Shermeen Nizami shared her philosophy for flipping her own fourth year undergraduate class.

Nizami began by sharing Rogers' diffusion of innovation theory.  She found this after her first flipped course was over, but felt it correlated well with that happened in class.  As shown in the below diagram, there are innovators, early adopters, the early majority, the late majority, and the laggards.  The distribution of these groups is shown in blue, while market share of an innovation is shown in yellow.  A question Nizami asked herself was who is in the chasm? Why do some students feel like the flipped classroom teacher is not doing her job? ("I want you to lecture to me!") For any classroom innovation to be successful, we need buy-in from students.


Why flip in the first place? In any given class, 30% of learners are apparently blocked; they can't be reached.  60% might be described as passive learners, and only 10% as active learners.  Could flipping help bring more students into the active segment? Is it worth it? It is if you believe that more students fail a lecture-based class than an active class, and that the rates of retention claimed in the learning pyramid are even close to accurate.

How do you flip? Nizimi says teachers need to look through the eyes of a student, and help students see themselves as their own teachers.  The mindset of both the student and the teacher need to be flipped. The teacher needs to be careful to keep students at the points of maximal learning: at the edge of their comfort zone, but not quite into the panic zone.

Design thinking gave Nizimi an useful model with which to approach her classroom:
  • Empathize: validate the level of difficulty students face in class
  • Define: gain students' confidence that you are on their side and not trying to trick them
  • Ideate: involve students and come up with creative solutions
  • Prototype: create opportunities for students to try out the proposed solutions
  • Test: solicit student feedback; be brave
The round table ended before we got a chance to get into the meat of what Nizimi's students were actually asked to do before and during class, but I did appreciate the constant reminder that we should involve students in the learning process as much as possible.  Whether I get the opportunity to formally flip or not, I hope to keep that thought in mind in all my teaching practice.

Tuesday, December 9, 2014

An Update on Our CS2 Experiment with C++ and Java

Back in September, I reported on an experimental course design I was trying out for our CS2 class.  The main idea was to start with C++ and slowly transition to Java so that we could use the explicit nature of C++ to better understand what Java is doing behind the scenes.  I wondered, will it work? Or will it be a disaster?


Danger, unexploded bomb


Before reading on, you may want to go read about the course design.  In particular, have a look at the progression of topics at the end (my lecture slides are attached as well, if you're interested).

After introducing problem solving strategies that I wanted students to use throughout the course, I started with C++ basics.  I began talking about how simple data appeared in memory.  The next topic, solving problems with arrays, allowed me to build on both the problem solving strategies and the memory model.  Once we introduced classes, I brought Java into the mix.  Then we covered dynamic memory in C++ and compared that with Java's memory model.  We talked about linked lists and a branching story app in Java to get used to programs with more complex reference structures.  At this point, we were able to leave C++ behind and move on to more advanced OOP with Java.  Later I showed them how to use the Processing library in Java to make a program where you could "see" polymorphism at play with various related objects on the screen.  I also showed how to set up a simple model-view-controller design with Processing.  Finally, we covered recursion with a focus on recursive data structures.

In the middle of the term, I conducted an informal, anonymous survey to find out how well the new design was working (or, more accurately, whether doing C++ and Java together was a bad idea).  Although the reviews were mixed, there were definitely more positive responses than I would have guessed.  It was also very interesting to learn that more students found Java more difficult than C++.

When I met with two fellow instructors and one of my TAs to decide whether we would continue this course design next term, we discussed one very promising phenomenon: students were finally asking conceptual questions instead of just syntax.  My TA had worked with this course three times in a row with three different instructors, each with a different approach.  He noted that this was the first time he had heard so many interesting, in-depth questions.  Students were talking about things like the stack and the heap for the first time, for example, even though these topics were technically covered in previous offerings.  Getting students to go beyond syntax has been one of the faculty's major goals for a while now, and it seems that we may have finally figured out how to make that happen.

Ever since the midterm survey, students have been telling me in person and over email how much they appreciate this course design.  Some tell me that they understand Java so much better than they had previously (either from taking this class before, or learning Java elsewhere).  Others tell me they have found the class interesting and useful.  One or two complained about the difficulty, but they seemed to appreciate what we were going for when we discussed it.

Of course, there are a number of students who are struggling.  But it seems these are the students who would be struggling regardless of whether we included C++.  We know this because many of these students are the ones who miss all or most lectures, who don't go to (or work during) tutorials, who don't complete assignments, and who don't come to ask for help.  These students are the ones who would be unlikely to pass even if the course was all Java.

Indeed, ensuring that only those who truly understand the material move on is another goal of the redesign.  We don't want students who have no hope of passing our systems programming class to be able to move on from this course.  An added bonus of including Java has been better assessment tools.  I've been able to ask much more pointed questions about how Java works thanks to the ability to compare to C++.  So those who pass should truly understand what we want them to.

Regardless of those who are struggling, the verdict has been clear: C++ and Java together are definitely not a disaster.  Now we shall see how the next iteration of the design fares next semester when we have quadruple the students taking the course, and even more importantly, when these students move on to second year.

Thursday, September 25, 2014

C++ and Java Together in CS2: Will it Be Great or a Disaster?

I've been trying something a little bit different for our CS2 class this semester.  The course typically covers object-oriented programming in Java along with topics like recursion.  In fact, students becoming proficient in Java is one of the hard requirements of the course.  But students who have recently passed the course did not seem sufficiently prepared for what came next: systems programming with C.  In fact, some students (barely) passing the course seemed not to be able to program sufficiently well on their own at all.

I knew there was an appetite to try something new, and I thought I had the perfect book to try out: Think Like a Programmer.  Only problem was that the book uses C++, and as I said above, we need to use Java.  I ended up chatting with a member of our curriculum committee about it, and we realized that maybe, just maybe, we could do both.  We could teach just a bit of C++ so students would understand the book, and do our major examples and assignments in Java.  So that's what I'm doing.  The question is, will it turn out well, or end in disaster?


In some ways, it seems like trying to cover two languages in a course where many students can't grasp even one is a really bad idea.  But hear me out.  I am not trying to teach them how to be proficient C++ programmers.  My goal is only to show enough C++ so that students can understand Think Like a Programmer, and even more importantly, so that I can more explicitly illustrate some key concepts in Java that are normally hidden away.

For example, C++ makes you choose whether you are passing by reference.  With some simple examples, I can illustrate the difference between pass-by-reference and pass-by-value more clearly. When we get to Java, I can easily explain what gets passed by reference automatically.  Understanding dynamic memory can also be made more explicit in C++, then applied to topics like creating linked lists in Java.  Even the fact that C++ allows me to build up to objects without needing to have a dummy class in the meantime is quite helpful.

We're only in our third full week of class so far, and we're just getting started on Java.  So I don't know yet how well this experiment will work once we have the two languages going side by side.  But I can say that it has been very beneficial to be able to approach the course using the problem-solving perspective of Think Like a Programmer and the slightly lower level view that C++ allows for things like how variables and arrays are stored in memory.  If this continues working well, I think this could be a winner.

I'll be soliciting anonymous feedback after a couple of weeks of using both languages, and hope to report back after I get some data from students.  Eventually I'll also share more details about the course design itself.

In the meantime, I wold love to hear your opinion - does this approach have potential, or do you see it as a disaster waiting to happen?

Friday, August 29, 2014

This Year's Design for 'Computers for Arts and Social Science Students'

I've been working on our non-majors computing course for a while now.  Last year was the first time I got to try it with a large group (440 students!), and also the first time I tried using Python.  I have since refined it to the following design.  I will report how it went at the end of the semester, but I have a great set of TAs and am optimistic about using turtle in assignments to make programming a bit less daunting.

 We're not using the robot turtle, but wouldn't it be fun? Image from Wikipedia

This course design lives on my portfolio site, and will be updated there as time goes on.

Introduction

This course is currently undergoing a transformation.  It has traditionally taught basic office software usage in a step-by-step workshop style.  The new version focuses on computational thinking skills by teaching basic programming concepts in Python and then applying them to understanding more advanced functions of the same software previously covered in detail.  Instead of learning a laundry list of programming concepts, however, the concepts are embedded in four relatable general contexts (see topic list below).

A new calendar course name and description, which I developed, is up for approval Fall 2014.

Learning Objectives

By the end of the course, students will:
  1. Develop an appreciation of computer science.
    1. Understand what computer science is.
    2. See how computer science can help solve problems in arts and social sciences
    3. Learn how computer science can help you by automating boring, repetitive, or error-prone tasks.    
  2. Develop computational thinking skills.
    1. Learn how information is stored on a computer.
    2. Learn basic programming concepts (variables, if statements, loops, and functions) and write simple programs using these concepts.
    3. Learn how to formulate searching and sorting problems in a way a computer can solve them, and understand the efficiency of the solutions.
  3. Develop an advanced understanding of useful software packages by applying computational thinking skills.
    1. Apply an understanding of variables to effective use of word processing software.
    2. Apply an understanding of variables, if statements, and functions to effective use of spreadsheet software.
    3. Apply an understanding of variables and references to database software.
Topics

Many topics have a context in which the concepts are placed.  For example, for conditionals and repetition, we discuss how the logic would look for a robot that can find its own way out of a maze.  We start with just the ideas, such as how to break the right-hand rule down into its constituent parts, then see how to implement if statements and while loops in snippets of Python later on.
  1. Introduction
    1. Course intro
    2. What is computer science?
    3. What is computational thinking?
  2. Binary Numbers and Data Representation: How Photography Went Digital
    1. Image representation
    2. Binary numbers
    3. Bits and bytes in memory
    4. Using the Python interactive shell
  3. Conditionals and Repetition: Helping a Robot Find Its Way
    1. Boolean expressions
    2. If, else, elif
    3. while loops
  4. Data Structures: Making Stories Interactive
    1. Data types and variables
    2. Lists
    3. Dictionaries
    4. References and simple graphs
  5. Searching and Sorting Algorithms: Managing a Bookstore More Efficiently
    1. Searching: linear, binary, hash
    2. Sorting: insertion, selection, quick
  6. Applying Computational Thinking to Word, Excel, and Access
  7. Miscellaneous applications of computational thinking / Python
    1. E.g. PyschoPy, RenPy, etc
Assignment Topics
  1. Computer science, computational thinking, binary numbers
  2. Image and text representation, first Python turtle program
  3. Python turtle programs with if statements, loops, and variables
  4. Searching and sorting (conceptual), Python turtle program with a user-defined function
  5. Word, Excel, Access

Friday, June 6, 2014

Mini-Course 2014: Survey Results

After a one-year hiatus, I ran my all-girls mini-course on computer science and games again this past May.  Along with a picture of my lovely class, I wanted to share this year's pre- and post- survey results.  Note that while I compare some numbers to past courses, I did not post data from 2012 and there was not course in 2013, so neither year is mentioned.



Pre-Course Survey Results

Before we begin with our first class, I ask the girls to fill in a survey to try to capture their attitudes toward computer science.  Naturally, I hope to see a general improvement in these attitudes by the end of the course.  Here are some of the more interesting results.

"I am confident that I understand what the field of computer science is."

  • Strongly agree: 1
  • Agree:5
  • Netural/don't know: 11
  • Disagree: 2
There was less confidence about what the field is than in some previous years (e.g. 2010, where 50%  agreed to this statement in the pre-course survey).

"I would consider computer science as a good career for women in general."

  • Strongly agree: 5
  • Agree: 14
 Despite the lower confidence, there was not a single neutral response for the first time.

"I would consider computer science as a good career for me."

  • Strongly agree: 5
  • Agree: 5
  • Neutral/don't know: 9
This is the highest number of any type of 'agree,' let alone 'strongly agree.'  Could it possibly mean that the widespread efforts to get young people (especially girls) into computer science are actually starting to work? I hope so!

Post-Course Survey Results

I ask many of the same questions after the course, as well as some new ones.  Here are the most interesting responses.

"Are you glad the course was just for girls?"

  • Yes: 8
  • No: 1
  • I'm happy as long as I'm not the only girl: 10
We did our surveys before we got together with the other (mostly male) class to share our games and eat pizza.  It would be interesting to see if their responses would change after that event.

"I enjoyed learning about what computer science is really all about."

  •  Strongly agree: 12
  • Agree: 6
  • Neutral/don't know: 1
This is a great result, even considering how many came to the course open to the idea that computer science might be interesting.

"I would consider computer science a good career for me."

  •  Strongly agree: 8
  • Agree: 6
  • Neutral/don't know: 5
This is the best year-to-year result for this question that I've seen.  Even though 2011 was a good improvement over 2010, this is better still.  It is also wonderful to see so many responses move up (neutral to agree, etc).

"I am more likely to try computer science in high school or university after taking this course, or this course has confirmed my desire to do so."

  • Strongly agree: 8
  • Agree: 10
  • Neutral/don't know: 1
Fantastic.  I only hope that their next experience with CS is a good one.  (I hate that I have to worry about that!)

Summary


This year's course was not changed drastically from previous years.  We spent some more time in the lab, and had more guests talk to them.  I also skipped the section on women in the industry.  Although one person said she wished I had covered that topic in her survey comments, I have to wonder if skipping it contributed to this year's success.  (I previously wrote a bit about messaging in these sorts of workshops and courses.)  Either way, I am thrilled, and can't help but think that maybe these sorts of programs are finally going to make a difference soon at the post-secondary level.

As usual, you can read more about the course here, or take a look at the materials as presented to the girls.

Tuesday, May 13, 2014

Python and Pi Helped Make Go Code Girl 2014 A Great Success

On the last two Saturdays of March, a group of high school girls came to both Carleton University and the University of Ottawa to learn about computer science and try their hand at coding.  This was our second annual Go Code Girl event, and thanks to Python's turtle module and the Raspberry Pi, it was even better than last year's!


Last year, we based our one-day workshop on Processing (postmortem here).  When my colleague from Ottawa U, Nathalie Vallières, suggested we try using the Raspberry Pi for our two-day workshop this year, I was both excited and scared.  Excited because I'd always wanted to try out the Pi, but scared because any time you introduce hardware, things can (and will) go wrong.

Biting the bullet, our School of Computer Science ordered some Pis to go with the set that Ottawa U already had. We decided to teach Python using the turtle module on the first day of the workshop at Ottawa U since Python seems to be the most popular language for the Pi.  We would then focus on the Pis themselves on the second day of the workshop at Carleton. In the end, both days ended up going very well.

On the first day, after introducing what computer science was all about, we started drawing with our new turtle friend.  Students typed in a minimal program in IDLE and ran it to see the magic happen.  From there, we introduced basic programming concepts one by one, leaving time in between to try some challenges or just experiment.  First came repetition, then variables, and finally booleans and if statements.



On day 2, we had the girls set up the Pis in the computer lab we normally run tutorials in (having a projector in there was really nice).  The monitors there had HDMI inputs; perfect for the Pis.  The keyboards and mice were easy to "steal" for the Pis as well.  The only problem we ran into was the power outlets mounted on the desks: sometimes, the Pis didn't seem to like the level of power coming from them.  So some girls just plugged the USB cable powering the device directly into the monitor.  Smart.




We started with a lesson on using the command line.  I was worried this would be dull for them, but starting with a pictorial representation of how they could feel like "movie-style hackers" with the command line probably helped.  They loved doing things manually at the prompt and seeing the results in the GUI file browser! I was shocked but thrilled.




After playing with the command line, I walked them through a few of the steps needed to make a text adventure game.  To be honest, I wish we had more time for that.  But they seemed to enjoy it anyway.  Once again, we encouraged them to play and experiment, so if they wanted to play with Scratch or look around on the Pi instead, that was ok too.

All in all, I'm very happy with the formula we came up with this year.  If you'd like to see the slides and other resources I posted for the girls, check them out on my website.  If you've ever done a workshop similar to this, I'd love to hear about it in the comments.

Tuesday, April 29, 2014

Reflections on My First Year of Teaching

I did it.  I survived my first year of teaching.  Exams are marked, and grades are submitted.  And while I still have students concerned about their results to meet with, I am finally able to breathe and spend some time reflecting on my experience.


Over the two semesters of my first year of teaching, I taught five courses, mostly for the first time.  I had more than 1000 students and around 30 TAs.  I answered countless emails and forum posts.  I assigned 32 assignments.  I gave three midterms and 7 quizzes.  I made hundreds of slides, sometimes based off of existing content, and sometimes my own.

Needless to say, a large part of this job is management — of both time and people.

It was challenging at times, there is no doubt about that.  I had to relearn a lot of the material I was teaching.  This lead to many evenings spent on preparation, especially during second semester when I had three courses I hadn't taught before.  There were times I didn't get as far as I wanted, and fumbled in class.  There were times I wanted to crawl in a hole and stay there.  But I took comfort in knowing that I would never have to teach three courses for the first time ever again.

My students were generally forgiving.  Actually, my students were amazing.  They participated in class and thanked me for my engaging teaching style.  They sent me really nice comments in email.

Sure, not all students loved me.  My style didn't suit all of them, or maybe my slip-ups frustrated them.  Understandable.  Some probably didn't want to put in the effort to get the results they wanted.  I wish I could have inspired those ones.  Maybe some I did.

The thing that makes me feel the most energized of all is thinking about how to improve for next year.  I know I need to take a different approach to teaching my arts and social science students Python.  I know I need to switch up some of the examples for my Processing class and come up with more small examples. I need to adjust how I use the animation libraries with Racket and have some ideas for how to improve the course content overall.  There's lots of talk on what to do with our second first-year programming course, and I've had fun thinking about whether we should do it in C/C++ with Think Like a Programmer.  And of course there are a million little things to get better at that I can't possibly list here.

Most of all, this past year has confirmed that teaching is what I was meant to do, and I am so thrilled to be able to come back and do it again for another year.

Friday, March 21, 2014

Planning for Go Code Girl 2014: Python and Pis

Last year's Go Code Girl was a great success.  This year, we wanted to build on that as well as try something a bit different.  Keeping the same overall format, we're hosting two days of coding fun: the first at University of Ottawa and the second at Carleton University.


Instead of teaching the girls Processing again, we'll use the turtle module to draw fun pictures in Python, LOGO-style! Then, on day two, we're going to see what we can do with the Raspberry Pi.

I'm a big believer in teaching programming to beginners in a visual way.  Not only is it more exciting than printing text out onto a console, but it can help understand commands in a more concrete context.  In can even allow for an embodied understanding of concepts, for example by imagining yourself as the turtle moving around the screen, leaving a pen trail behind you.

It's no surprise that I'd favour using something visual to introduce Python.  But as you may know, I tend to favour Processing over Python as a first language.  Why use Python? Partly to get more first-hand experience in teaching it as a first language, and partly because it seems to be the language of choice for the Raspberry Pi.


I know that in the three hours we have on the second day, we won't be able to do that much with the Pis.  I want to try to give the girls enough knowledge and confidence to continue exploring on their own, should they wish to purchase a Pi of their own.  Thus, it's important that they know a bit of Python.

As an added bonus, I can experiment with the turtle approach for teaching programming to my arts and social science students next year.  I imagine it would be a big improvement over how I did it last fall.

I'll report back on how things went and provide a link to the workshop materials when it's all over.

Thursday, February 6, 2014

Interactive Storytelling in Games: Next Steps

Last night I gave a lecture for our undergrad society on some of the more interesting recent developments in interactive storytelling, along with a preview of my own thesis work.  Below are my slides.


Friday, January 24, 2014

Sir John Daniel on Open and Distance Education

Sir John Daniel, world authority on open, distance and online learning, came to Carleton for a special briefing on the future of online learning, covering topics such as the changing nature of the student body and its use of technology, myths and distractions in online learning, and opportunities for online learning to meet students’ needs.


Many interesting tidbits were offered during Sir John's talk.  I would have loved the opportunity to get into any one of them a bit more, but I still left with some good food for thought.

After opening with the suggestion that post-secondary education is facing turbulent times, Sir John shared some interesting stats about the students taking online courses these days.  Apparently they are generally older than traditional undergraduates, paying more to study, working at the same time, and often immigrants.  Based on all this, they want to have their existing skills recognized, and they want credit courses.

Another interesting point: we tend to think that digital natives will be the ones who embrace online learning the most, but in fact, not only did the older crowd answer the survey more often, but there is no evidence of a divide between them and the younger students when it comes to technology.

So online education won't lock out any particular generation, and it can address many needs of students from all walks of life.  It is difficult to achieve wider access, higher quality, and lower cost at the same time when it comes to post-secondary education, but technology makes it possible.

Some tidbits from the talk:
  • MOOCs: these are technically not higher education, as they lack accreditation in general; the explosion seems to have more to do with the herd instinct than anything else (Mark Guzdial would probably be onside with a lot of what was said about MOOCs)
  • You can't ignore any of these three key components: study materials, student support, and logistics/administration
  • Institutions need to expect blended learning to evolve; what sort of flexibility will be required? Will campus buildings need to be refurbished for new purposes?
  • British Columbia was the first province to offer free, online open textbooks for the 40 most popular post-secondary courses (some of our profs here at Carleton are making their own open access books, too, such as Pat Morin and his data structures book)
  • Student assessment is fundamental to the learning process, and contrary to popular belief, you can actually be more creative with it in online environments
  • Contact North (who hosted this talk) recently published A Guide To Quality in Online Education, which looks like a worthwhile read
If you want to find the slides for this and similar talks, check out Sir John's website.

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.

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.

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 2, 2013

A Picture of Me Dancing With Graphs

On Wednesday, I did my annual mentoring with Girls @ Virtual Ventures, the all-female section of the popular science and engineering camp held at Carleton.  As usual, the girls made a wonderful audience as I told them what computer science was, had them discuss why there aren't more women in CS (and why it mattered; things got intense!), and ran the CS Unplugged searching activity.


This photo was posted on the Virtual Ventures Twitter account.  I like it; it looks like I'm dancing with graphs. :)

In other news, my post about how improving CS education improves it for everyone was featured on the blog of the Ontario NSERC Chair for Women in Science and Engineering.  Stay tuned for an original, more personal post to appear there later this month.