A great #makered week

Last week, things really started to gel for both my 8th grade Creative Computing class and my CS II class.  On Thursday’s #makered chat, I posted this:

This is an 8th grade student going to town with a Hummingbird Kit.  The assignment was to create something physical with a Halloween theme.  And while her robot probably will only loosely be Halloween-y, she’s ready to work on this for the next few weeks.

8th Grade Student and her 3Doodler success
8th Grade Student and her 3Doodler success

Another student wanted to make a Haunted House, so she laser cut the front of a house, and then used a drill to cut out the windows and then started using the 3Doodler to enhance some of the details on the front.  She asked if this house could be a prototype for a whole city.  Um, yeah, I said, That would be awesome.  She said, oh man, this is what I’ve always wanted, to be able to do stuff like this.

Meanwhile in CS II, I’ve been trying to corral what is a pretty feisty group of students.  There are only 7 of them.  They have been bonded through their experience in CS I, and they have a tendency to want to goof off; however, this week, they finally got to work on some object-oriented programming, again with a Halloween theme.  Below are two of the projects.  My CS II class is at the end of the day, and is followed by a free period for students. Many of my CS students just stay and keep working.  It’s pretty cool.  At the end of last week, I was feeling pretty darn good about my students.  And I have more good student news to share.  Stay tuned!


What all my CS students should read

This is an old post, but it popped up in my feed last week.  In it, the blogger describes how he went to a hackathon with a friend, a person he described as a programming god, and just felt totally inadequate.  He watched his friend and realized that his friend didn’t know everything either, that the friend just Googled the problems he ran into and then figured it out.  The next hackathon he went to, he was the programming god, because he followed his friend’s lead.

Both of these people are CS majors in college.  Going from CS major to work at Google (or any programming-oriented job) is a big leap.  You know the foundations, but you do not know exactly how web security works.  When I first started learning to program, I did a combination of things.  I used other people’s code and modified it to do what I wanted.  In order to do that, I had to understand the code.  I went through books, step by step.  And finally, I took some online classes.  I do wish, sometimes, I’d had some direct instruction from a real person in that process, but the reality is, the landscape of computing changes so rapidly that keeping up requires a chunk of just figuring stuff out on your own.  Often, you have a specific problem to solve in front of you, and you need answers.  You can’t wait until the 6-week mark of a course where they cover that topic to get the answer.

I know some faculty hate when students Google the answers to the problems they’re given.  Code for most basic CS exercises can be found anywhere on the web.  And some of those basic CS exercises are necessary foundations, but the solution to a lot of “cheating” is to have harder problems.  Have students design their own problems.  Partner with people in the school to solve real problems.

I have students who are planning to attend a hackathon in a couple of weeks.  I shared this article with them, and I also explained that what we’re doing in class is not what people in the “real world” do.  There are frameworks and tools that real developers use that we don’t, because just those tools themselves are hard to understand much less the coding.  And I want to focus on coding.  And, more importantly, I want to focus on learning.  I want to end with a section from the last paragraph of the post, where describes the hard work learning takes, and the understanding that there’s much to learn:

The barriers to becoming a software engineer are real. People born in technical families, or who were introduced to programming at an early age have this easy confidence that lets them tackle new things, to keep learning — and, in our eyes, they just keep getting further and further ahead. Last year, I saw this gap and gave up. But all we really need is the opportunity to see that it’s not hopeless. It’s not about what we already know, it’s about how we learn. It’s about the tenacity of sitting in front of a computer and googling until you find the right answer. It’s about staring at every line of code until you understand what’s going on, or googling until you do. It’s about googling how-to, examples, errors, until it all begins to make sense.(emphasis mine)

NCWIT Award for Aspirations in Computing due Nov. 2

I have been encouraging students to apply for the NCWIT Award every year.  I’ve been lucky to have 3 winners among my students so far.   This year, I have many more students, so I’m hoping many more applicants.  If you have female students interested in technology and Computer Science, you should encourage them to apply.  Just applying gives students access to a fantastic organization that supports young women in their pursuit of careers that involve computing.  That support is crucial, especially as they move on to colleges where the percentage of women in CS or Engineering might be low.  And beyond that, to careers in tech where again, the percentage might be dismally low.

On Learning Something New

I’m a week in to learning to play the guitar.  My index and middle finger hurt and I can safely say that I pretty much suck.  But, I’m a week in.  I know I shouldn’t expect to be playing like Taylor Swift by now.  And that, in itself, is something to recognize, for both students and teachers.

I’ve observed a couple of things so far in my practice.  First, I recognize that it would probably be easier/better if I had a teacher, preferably someone who’s an expert at both playing the guitar and teaching.  I’m not getting the same kind of feedback from the app that I would get from a person.  I get no tips for finger placement or holding the guitar.  I’m getting no, “That was good. Try to keep doing it that way.”  So I’m probably a) learning slower and b) creating some not so great habits.

Second, I’ve noticed how foreign all of this is. Music is not foreign to me.  I can actually read music.  I sang in my church choir.  I played piano a little, and at one point I tried to learn to play the harmonica.  But I’ve never played a stringed instrument.  I’ve never had to tune my own instrument.  I don’t have a feel for how to move from one chord to another or even sometimes how to strum.

Someone posted to the SIGCSE mailing list reminding people of how much students have to learn in order to start learning to program.  So much of the inner workings of the computer are hidden now and we have to expose them and teach them.  Plus they’re learning a new language, new software, a new way of thinking.  It’s like approaching learning an instrument.  You have to learn how it works and its language (musical notes).  Try learning something entirely new sometime, and feel the discomfort and utter foreignness of that.  Then you’ll have a sense of how your students feel.

How did you fail today?

During our regular weekly Techie Thursday lunch, we were discussing failure and how to learn from it and how to encourage our students to be okay with failure.  One teacher, a parent, said that she had started asking her kids every day, “How did you fail today?” They then talk about the failure, whether it was due to something they did–poor planning, not enough effort.  Or whether it’s just a perception of failure or out of their control.  And then they talk about how to recover, what to do next time.  They treat failure as normal, as part of learning and growing.

I loved it so much, I told Geeky Girl about it on the way home, and she shared a small failure with me and I shared one with her.

I fail on a regular basis.  I will admit that I don’t like failing sometimes.  We all like the feeling of being good at stuff.  It feel exhilarating when things are going smoothly and you’re shining in the spotlight.  Heck, it’s great to watch people who are performing at their best.  But in order to get to that point, you have to fail a lot.  And that failure can feel terrible.  We have to live up to those failures, though, and not be devastated by them.  That’s what we talked about .  How we help our students buffet the ups and downs of their academic lives and not feel like an A- is the end of the world?  Or is the culture such that that’s not possible? After reading Excellent Sheep, I feel that might be the case.  But I love that we had a conversation about it at a meeting that was supposed to be about technology.  As I often say, the issues we face are never about the technology, per se.  They’re bigger than that.

Women, the Internet, and Gaming

For about 2 months now, the gaming industry has been up in arms over a female game developer who has received some horrific threats to the point that she felt she needed to leave her home.  Another women in the industry felt the need to leave her home this past weekend after she, too, received threats.

I’ve seen this kind of stuff happen for years, both in gaming-related circles, and on the Internet in general.  I have been extremely lucky that I have not received anything close to what one might call harassment.   People disagree with me, sure, but I’ve never received an email or comment that I considered problematic, and I’ve been blogging for ten years.  But I’ve had friends who have, and I’ve seen other, more prominent women bloggers shut down their comments or switch to heavy moderation because they receive terrible comments.

I don’t think most men realize the difference between the kind of comments women get online vs. the kind of comments men get.  Mr. Geeky once had an article that made it to SlashDot.  The most threatening comments he got suggested that he be fired (for trying to make CS more appealing to women).  Contrast that to what many women get when someone disagrees with them.  Commenters often suggest that women with whom they disagree should be raped or killed (often both).  Descriptions of exactly how that should happen are common.  When Kathy Sierra was targeted back in 2006, people photoshopped pictures of her to show what they were going to do to her.  She shut down her blog and left the speaking circuit for a few years because she no longer felt safe.  And she just wrote about web design, not about women’s issues.  Ditto for the two women involved in this latest gaming controversy.

Some people are talking about why this happens and what’s to be done.  Many say that anonymity is part of the problem, that people feel free to say what they might really be thinking when they know they can’t be found out.  In the gaming industry, there’s certainly a locker room culture that includes putting down women, sometimes to the point of harassment and physical threats.  That culture is not just inherent in online games but carries over to blogs, online journals, YouTube, etc.  Despite more women being involved in games, both as players and developers, the industry still caters to 15 year old boys (either in real or emotional age), making it a petri dish for the kind of disgusting behavior one sees in this particular situation and elsewhere.

But not all of the blame can be place on the industry itself.  They’re working on making it better . . . slowly.  It’s also up to us, to not ignore the offhand sexist comment that maybe hasn’t crossed the line yet, but could.  If you’re in a comment thread where the conversation is about harming women, you have an obligation to step in and/or report it.  We create the community online, and if we allow the crazies to take it over, then it becomes a crazy, unsafe community.  Ideally, laws would be strengthened, so that the veil of anonymity cannot be a protection from hateful conduct.  The Internet is still (more than 20 years in) a bit like the Wild West still, and I think it can be tamed without it losing its spirit.  But that’s in part up to us.

Doing something different

English: An easy way to teach yourself guitar,...
English: An easy way to teach yourself guitar, learning how to play in your own time. (Photo credit: Wikipedia)

I had a long weekend this weekend.  Friday, I went to a conference, where I ran a section of the Maker Playground.  It was great fun.  We scanned people in and printed them out, flew some mini quadcopters around and made paper circuits. Saturday, we went to a fantastic wedding, a couple I’ve known for about 7 years or so, and it’s finally legal for them to get married!  So, that was a great celebration.  Sunday, I did nothing, despite it being a beautiful day.  I was physically and emotionally exhausted from a long week.  Geeky Boy was in town and we hung out together.  Otherwise, I sat on the couch and played Civilization.

Today, I came out of slugdom and started straightening up areas of the house.  I decided that I needed to focus on me for once.  The last few weekends, I’ve prepped for classes, written papers, or other work.  I needed to do something to improve the space I spend time in and feel like I was doing something non-work-related.

I made some chicken stock from scratch and while it was cooking, I borrowed Geeky Girl’s guitar and started learning to play.  I got an iPad app to guide me through the process.  It’s a little like Guitar Hero with a real guitar.  I practiced for about an hour.  And yes, I suck.  But it’s so different from what I normally do, and I have to focus so much that I can’t think about anything else.  Essentially that’s why I play video games, but I get bored with them after a while and get tired of staring at a screen.

My goal is to learn a song or two by the end of the school year.  I think everyone should try to learn something completely new every 5 years.  I’ve had to learn new programming languages almost every year, but those map fairly well onto existing knowledge.  I also wanted to challenge myself to take the time to do this even when life is busy.  It’s easy enough that I would have a hard time making excuses (unlike exercise where weather can throw a wrench into all my plans).  We’ll see how it goes, and if I get any good, I’ll post a tune here.

My Classes are Like a Safari

Or like being dropped in the wilderness.  Or like being thrown into the deep end. Or like going on an adventure.  These are all ways that my students have described what my CS I class is like.  When they describe it this way, they’re not frustrated or angry or anxious.  They’re excited.  At first, they were like “what? you’re not going to lecture or explain everything in detail?”  I did pause when everyone seemed confused by the same thing and do a brief mini-lecture, on functions, for example.  But generally, I have them read a bit about a concept, and then work through several examples and contexts for that concept.  It’s like solving puzzles or mysteries.  We’ve had a lot of aha moments where something finally sinks in.

It’s harder to teach this way, to let the students fumble their way through something, and I’ll admit I worry sometimes about how much they retain.  To counter that worry, I have tests and quizzes, but I can’t help but worry.  It’s also harder because I have to think through how an activity will go.  I can’t just lay out, this is a loop.  I have to work through how they’re going to use loops in meaningful ways.  Actually, Mike Z just posted something that is similar to how I approach things.  You lay out some instructions for something that seems simple and then discover why loops are cool and/or useful.

I also do a lot of running around.  I’m working on having students do more helping of each other, but we’ve only really been coding for a few days, so I’ll give them another couple of days before I truly let them wander the wilderness.

Lost in Translation

I often forget how embedded I am in the language of computing.  Even before I took up programming, I was quite familiar with how to use Unix commands and the difference between my computer and the server where my web site actually lived.  Having grown up in a GUI world, my students don’t see any of the underlying structure of the computers and servers they interact with.  I expose some of that but it takes a while before it becomes second nature to them.

For example, I gave this instruction verbally, “type /Users/Documents” and more than one student typed “slash Users slash Documents”.  Or conversely, when learning about types, I had the written instructions, “type type(6)”, and some students assumed I had typed type one too many times and just typed in 6.  Sometimes with the parentheses.  And then, when asked to define what hello is in either this context: type(hello) or this one: hello=”world”, they are baffled.  It’s a word, it’s a string, no, it’s a variable.  Their concept of variable in math is that a) you’re usually solving for it and b) it always has some value.  In CS, of course, variables sometimes don’t have values (giving you an error), or they can have values that are very different from a number: lists, functions, dictionaries, words, sentences, files, etc.  That’s more mind-blowing to students than one might think.

As Garth said in his comment to my last post: “Teaching programming is like teaching a foreign language but the student has to understand logic, major problem solving, technology and memorize the language, all at once.”  I’d say, too, that they’re having to learn new English words alongside their “foreign” translation.  It’s like having learned English, you find out there’s a whole dictionary full of words you never learned, and now you have learn them plus their translation in another language.  Painful.

But kind of fun.  I’ve said to both my CS I class and my 8th grade class that what they know right now, 6 weeks into school is more than any of their teachers know about computing (with maybe one exception besides me).  They makes them smile even as they struggle to learn this new context and language.

I have a tendency to throw my students into an activity without much explanation and then explain things after they’re done.  I know it can be unnerving.  I had a student ask a very good question after class yesterday.  She asked, “What is it that we’re doing exactly?  Is this a language?”  Once I explained, she then asked if there were other languages and how they worked.  The “throwing them in the deep end” approach leads to this kind of curiosity usually.  They often feel the need to figure it out.  That need to figure it out is what will keep them going when they feel a little lost.

Teaching, Programming, and Practice

Over the weekend, I read a couple of blog posts by programmers who were teaching workshops to either students or teachers, and who were quite amazed at how hard it was to teach. They didn’t come out and say that they thought teaching would be easy, but they implied that by talking about the challenges they faced.  They weren’t condescending at all, just clearly surprised.

And then there’s all the venture capitalist folks who think software is going to replace teachers any day now.

Education, teaching and learning are challenging.  People are often surprised by what happens in the classroom, of having to deal with different levels of students, of realizing that students don’t have some foundational information that you thought they would, of realizing that just telling them something doesn’t mean they actually learn it.  There is research out there that helps, but every day, you have different variables, so you try things.  And sometimes it works.

I don’t mean to be hard on the programmers trying to teach, or even the software developers trying to create something that will help people learn.  But the truth is, teaching is something we’re still trying to figure out.  If we had all the answers, then good teachers would be spitting out students who know everything they need to know and are equipped to continue learning all the time.  But we know that doesn’t happen.  And it’s not just that those good teachers miss a couple of students.  Sometimes they miss a lot.  Because there are other factors.  Learners learn in different ways.  Learners face challenges like poverty, drug addiction, lack of parental support that take up their cognitive capabilities, leaving little room for learning math or science.

And for the record, I find programming hard.  And I have much of the foundational knowledge to do some pretty complex programming, but I still struggle with it.  It takes me hours sometimes to do pretty simple things.  In part, that’s because my job is teaching, not programming, so I have less practice.  During the school year, I probably spend less than 2 hours actually programming things.  The things I do program are simple activities for my students.  They’re not complex, real-world problems.  I’ve tried to remedy this in a number of ways, trying to make time for some “real” programming (I did some this weekend, in fact), but I spend most of my off time, grading, giving feedback to students, planning ways to teach basic concepts, all that good stuff.  So I admire programmers, because I know they’ve had some practice and I admire them for wanting to share their knowledge with others, but like programming, teaching takes practice.  And I’m going to guess that programmers spend as much time teaching (at best) as I do programming.  We have a lot to learn from each other.