Showing posts with label programming. Show all posts
Showing posts with label programming. Show all posts

Monday, April 27, 2015

The San Diego Women's Hackathon Codes++

Just over 65 young women descended upon several computer labs and their adjoining classrooms at California State University San Marcos on Saturday. Yes, it was the third instantiation of the San Diego Women's Hackathon. The event was organized and implemented so that everything appeared seamless by Dr. Youwen Ouyang, a Professor in the Computer Science Department, and Shauna Ruyle, a marketing consultant and Cal State San Marcos graduate. They were supported by approximately 10 student volunteers and 18 adult mentors, many of whom were themselves technical women.

The Hackathon has been growing at quite a clip since I wrote about the inaugural event a year ago, as witnessed in part by the growing list of sponsors, which included the Gormally family, Intuit Corporation, Equinox Center, Girl Develop IT, 4BoneHealth and CompTIA. Students came from as away as Riverside County and the south side of San Diego proper. Grouped into teams, and given the choice of two coding tasks that aim to make the world a better place, they hit the ground running.

Sporting my "Media" badge I spent the day zipping around talking to the participants, student volunteers and mentors. Much of the time however, I hung out and observed the dynamics of the coders that were so noticeably different from the dynamics in the computer labs I've spent so many hours in over the years.

The coding challenges were supplied by two of the event sponsors: 4BoneHealth and the Equinox Center. The teams that chose the first challenge had to create an app or game to educate their peers about the importance of getting enough calcium - and how to do so. The teams that chose the second challenge had to create an app to help people learn about the current drought in southern California. As if to encourage conversation about the usual lack of precipitation, Saturday it rained all day.

According to the official website, Hackathon participants were age 16 and up. However, I'm pretty sure I saw two girls who looked to be about 9 and 11. They were both firmly attached to mice and keyboards and one of them was right smack in the middle of a group of older participants as they all plotted and strategized. Go Girls! In addition, there were at least a few women who were returning to school to study computer science after having spent some years working in other occupations. They too were seamlessly integrated into their teams. 

So why did these women decide to get up in the dark, drive as much as an hour or more in the rain to hang out on a college campus? On a Saturday? The slightly older ones had a variety of reasons, but many of the younger first time participants said things like this: "I had nothing else to do" "My teacher told me about it" "I'm going to take a class in it". Interesting.

Would they have come today if boys had been participants too? "NO". That much was quite clear. One of them added: "You mean to a normal one?"  Hmmm.

A few hours later, what did these same, younger first time participants have to say? "At first it made
no sense, but now these lines of code make sense". "It's cool". Aha...

Many of the groups spontaneously formed into organizational patterns that closely mimicked a technique known in pedagogical circles as Pair Programming. Well researched, this cooperative approach to learning to code has been shown to have many benefits for learning. Especially in many non-traditional populations. Read: women and girls. Yet, in traditional classrooms there is often resistance to Pair Programming because it defies the stereotypical solo, competitive, programmer behavior.

The vast majority of the groups I observed functioned amazingly well, without overt or even subtle power plays and jockying for dominance. I watched them resolving differences of opinion by sharing
and compromising, rather than having one person aggressively attempt to take control. If you have spent any amount of time in the sometimes anti-social world of male dominated tech, you know just how unusual this can be.

There were poignant moments. I spoke with one participant who seemed a bit sad. She told me she was "passionate about everything" related to engineering and computer science and felt that she should know already what aspect of these she wanted to pursue. Mind you, this young woman was in high school. We talked for a few minutes and I hope that by the end of our conversation she was able to view her wide ranging interests as the valuable and often unique interdisciplinary perspective that it is. In our globally interconnected technical world, we need young women like her.

There is a lesson in that encounter for those of us who have "succeeded" and now want to nurture and mentor those coming along after us.

At the end of the day, everyone piled into a room to eat dinner and watch the project presentations. Each group got up on stage and made a pitch to the audience and the judges. They fielded questions from the judges about their technical choices, most difficult moments, how they resolved team challenges and why they made certain design decisions. Every group had completed a significant portion of a project, even those groups whose members had little to no prior coding experience. They were justifiably proud of themselves. I noted as well how virtually every group made sure each member presented a portion of their pitch. It had been a very long day but energy radiated from the stage.

I asked many of the participants if they would attend another hackathon? Yes...definitely, absolutely, I can't wait. But not if boys are there. Why not? They just looked at me like I was slightly odd for even asking.


Fortunately, the next San Diego Women's Hackathon in October is a mere 6 months away.



Tuesday, June 24, 2014

Geek Girl Tech Con - Getting Out There and Doing It

As I wrote in my last post, there were 13 different simultaneous events going on at any one time for most of the day during the San Diego Geek Girl Tech Con. There was of course the Sharkette Tank, (see that last post), but also a slew of workshops, a Hackfest, the Vendor Marketplace, Demos, and a few other interesting odds and end (which I'll get to shortly).
The Technical Help Desk At the Ready

Workshops were what most people were after and the number and variety of them was staggering. At any given time there were on average 10 workshops, changing every hour on the hour. They ranged from beginning technical topics (e.g. HTML and CSS for Beginners) to intermediate (e.g. JavaScript) to advanced (e.g. Programming with Python III). There were also workshops to help advance your career such as Resumes 101: Leverage Your Strengths to Land the Job and Job Seekers: Learn the Secrets to Being Discovered by Recruiters, and for running your business such as How to Write About Your Business Online and Social Media Analytics: Yes, they Really are Important.  As I staffed my post at the T-Shirt table in the main lobby, more than one attendee lamented to me (while picking out their spiffy T-shirt) they were having a really hard time deciding where to go!

Despite my best intentions (and the lure of the Sharkette Tank) I didn't make it to any of the workshops, but I did visit the Hackfest where I had an interesting experience. The Hackfest was a drop in as you like event with people popping in and out all day. Teacher/tutor/speakers addressed various coding topics. During the afternoon, when I popped in,  there was a large group in the back of the room learning how to create iOS apps. In the front of the room I found June Clark, lead teacher for the "League of Amazing Programmers"*. As there was no one with her at the moment, we compared notes about the importance of providing explicit and ongoing encouragement to girls who might be interested in coding so that they don't feel marginalized. We talked about the research that clearly shows how important events like the Geek Girl Tech Con are for contributing to the creation of an ecosystem where girls will feel empowered to pursue coding.

Just then, two girls came running into the Hackfest room and practically flung themselves into chairs in front of open laptops at our table. Their fingers took off on the keyboard. As I peered over and saw the Java code appearing on the screen, I asked, oh so casually, about their prior programming experience.
Way to Go!

None. Absolutely None. They had come in to the Hackfest room earlier that day, never having coded before and with June's help had learned enough to create simple animated programs - which they proudly showed me. No fancy IDE layered on top of code to do it for them - they wrote their programs line by line in a no frills editor and then ran them. They had enjoyed it so much they were back for more. They barely glanced up to tell me how cool this was. I was momentarily at a loss for words. What a great example of everything June and I had been talking about.

It was hard to beat that experience, but I would be remiss not to mention the fun adults were having at the Con. Next to my T-Shirt distribution table in the lobby was the free headshot station, where attendees could have a formal or not so formal photo taken by professional photographers. On the not so formal side I could have sworn I saw Princess Leia (aka one of the Geek Girl staff) , and two members of Star Fleet (two of the workshop instructors) offering to pose with anyone who wanted to - as many did.
Live Long and Prosper Geek Girls

All in all, the Con was a nicely balanced blend of high energy learning and fun. If the Mission, as Geek Girl Tech Con founder Leslie Fishlock said in her opening remarks, is to get more girls into tech, what I observed all day is that things are moving in a good direction. But we have a long way to go, as anyone in the tech world knows. We have to keep on working to build that equitable ecosystem.

Leslie also said that it's about doing it; taking the time to get out there and do it. Geek Girl is more than a conference; they have a Meetup (San Diego incarnation here) and do a variety of activities throughout the year and around the country. Hopefully the momentum generated by this day will keep those girl's and women's fingers coding joyfully.








*June told me the organization has been known as Wintriss Tech, and is in the process of transitioning to the new name and a new URL (although not functional as I write,  the new URL will be jointheleague.org) 

Monday, April 28, 2014

Girls Coding: The International Women's Hackathon

This past weekend I had the privilege to attend the International Women's Hackathon, held simultaneously at  50 universities around the world with approximately 2500 young women taking part. The San Diego regional contingent was held at California State University - San Marcos. Approximately 70 high school and college
students registered and then arrived from all over the region. My informal poll recorded 6 colleges and universities and 6 high schools. One set of students came up on a bus from close to 100 miles away and two high school students came all the way from Tijuana, Mexico. Many sleep loving students must have risen and hit the road well before dawn to arrive for the 8am check-in.

During the welcoming and introductory portion of the morning some interesting information came out. For example, when asked, not one of the participants had heard of The Hour of Code. I was somewhat suprised, because here we had 70 girls who are interested in coding, yet none of the massive celebrity laden publicity had reached any of them.

Here is another interesting piece of information: only 2 students raised their hands to say they had participated in a hackathon before. I was intrigued. So later, I asked around about this. Some girls told me they had never heard of hackathons; one told me she had no idea what one was, thinking perhaps it was an opportunity to hack into computers - apparently one of her parents cleared things up on the drive over. Perhaps most telling, one 16 year old told me 

"if it [the hackathon] was both genders most of the women would not have showed up".

Considering that, though officially open to everyone, most hackathons are attended primarily by males, this may have been the most important response to my question. One worth thinking about by everyone who wants to make a positive difference for women in computing.
 
The range of prior computing experience on Saturday was huge. Some students had never coded at all and some, within a few minutes of gathering into their teams, were talking about appropriate uses of recursion
and how different class hierarchies functioned. Some participants had formed teams in advance and others were helped to form compatible groups first thing in the morning. No one was left out.

I trotted around, trying to pop in on every group of students (13 in all) several times during the course of the day. It was amazing to observe how events unfolded, the students' skills and confidence evolving and growing in tandem. 

For example, the first group I dropped in on, at about 9am, was a high school team with zero coding experience. They were clearly nervous and unsure how to get going (in case you worry they were completely on their own, 16 adult mentors circulated around all day, but were not allowed on the keyboard). These team members didn't know each other ahead of time. None of them had taken a computing class, none of them had plans to study Computer Science or a related field. So why were these girls there? One wanted to run her own business some day and thought it would be useful to know something about coding; one had taught herself about robotics from watching YouTube videos and had then joined a robotics club; one didn't know what a hackathon was but thought it sounded interesting. Interesting sounding enough to give up her entire Saturday. Talk about a motivated trio!

By 4pm, when I revisited them, this team was seated in the lab, each on her own computer, writing html code
and confidently talking back and forth about how to integrate their individual web pages onto one site about  encouraging more women to go into STEM. 

At the other end of the prior experience spectrum was a team of college women, who told me they
were 4 of only 12 females in a department of 500 Computer Science majors. How did they know? There were so few of them that they all knew each other; on the rare occasion when they saw they weren't the only woman in class they immediately gravitated across the lecture hall to meet their compatriot. This foursome was incredibly enthusiastic about the hackathon, and within less than 8 hours had created a complex web platform that blew even the judges away.

In chatting with them earlier in the day, one of the things these women told me was that they felt it was very important to to get the word out that women in Computer Science are intelligent, social, have a wide variety of interests, are attractive, have a fashion sense, and are equally as competent as all the guys (and a few other things I didn't write down fast enough). They were also one of several groups who told me they wanted to change the world.

As I circulated between PC labs and the Mac lab, up and down the hallways, I  was impressed with the nearly universal lack of overt competitiveness within groups or of jockeying for leadership position. Cooperation was the name of the game. Often, as I sat off to the side for extended periods of time, I observed an amazing dynamic in which these young women worked together, discussing ideas, deferring to one another, trying to bring others along when they had
questions, dividing tasks based upon interests and experience. This is not to say the groups were unambitious; definitely not. They aimed high, worked incredibly hard and, once they had settled on a mutually agreeable plan, they focused, focused, focused on developing the best possible contest entry. Everyone had a part to play. Yet even then, the focus was on building the best app or web page or game to solve the task - I didn't hear anyone worrying aloud about what the other groups might be doing.

The day was incredibly inspiring. So many of these young women taught themselves to use platforms they had never heard of before. So many of them produced incredible results. They were energetic and enthusiastic and fun to be around. In fact, having watched all of the presentations made to the judges, I can confidently say that all of the hackathon participants were amazing. Every team had something concrete and unique to show for their efforts.

We need more events like this. Lots more. And follow up to keep the ball rolling after the day ends. Lots of follow up activities to hold the excitement and enthusiasm and continue the unique dynamic that girls and women clearly bring to Computer Science.








Thursday, March 27, 2014

That Was Then, This Is Now. Can Coding Improve Reasoning Ability?

Reasonable?

Back in the 90s when I was starting my teaching career we used to talk in the CS Ed community a lot about the importance of math as a prerequisite for computer science. More precisely, I recall discussions about what level of math and what kind of math. I was working at a community college at the time and had perhaps the most diverse students I have ever had since.

Some were fresh out of high school, some were recent Veterans, some had been laid off from a dying  industry, some were re-entering the workforce after taking time to raise kids, some were in workforce retraining programs, some were retired. Some students had a prior Bachelors degree, some had barely made it out of high school. I encountered home schooled students, immigrants from war zones (one particular student from Cambodia comes vividly to mind) and those seeking to leave lives as migrant farm workers.

They shared a desire to obtain a computing degree and enter the computing workforce. The majority were highly motivated and great to work with. Yet many had limitations placed on them by external agencies or other equally firm obligations that restricted how long they could be in school and how many courses they could take - especially courses considered pre-college level, and thus remedial.

Thus the arguments about what math and how much math to take had very real consequences. Tell a student they had to take x courses before they could start college level CS and this could set them back a year or more that they did not have. As a result, in our college, as in others, the question of what math to require became in great part one of what the reason was to have the math.

The most common argument of the time, one I haven't heard as much recently, was that math, algebra in particular, trained you to think logically and sequentially. The extent to which this was true was taken as a given; I didn't have exposure to the math ed literature until some years later. However, I did learn pretty quickly that, although correlation does not equal causation, those students who had survived college algebra were less likely to look at 20 lines of sequential code and suggest executing them by bouncing back and forth around the screen like a ping pong ball. And of course, the bottom line was that if they wanted to transfer from a 2 year computer science program into a 4 year computer science program they were going to need that math.

Nowadays the CS Ed community is discussing equally energetically the usefulness of learning to program and the doors coding can open. Coding: the typical entry into a computing degree and a constant throughout. And, as we know from lots of hard data, computing degrees can lead to exciting and well paying careers. There is also an enthusiastic conversation going on about the useful things that can result from learning to code and getting that computing degree even if you ultimately decide to enter a seemingly unrelated field (ref: computational thinking and computational XYZ from art to geology and on through the humanities)

In one of those "that was then, this is now" moments, I'm wondering...wondering if learning to program, supports a general ability to reason. Before you say "of course - duh!" ask how you know. I'm  talking about more than low level step by step logical/sequential reasoning. I'm thinking about a more holistic reasoning ability.  Have we studied this? This would be so cool to study.

I suspect that the answer will be yes or no - it depends. As with so many things, such as with math and logical thinking, it depends. Context matters for one thing. For example, I posit that if we teach coding in the context of well chosen societally relevant challenges and follow through on the social impact of every stage of project development...hmm, yes, I think so. Holistic reasoning ability could well improve. (Who wants to fund the study?)

A belief in the importance of societal considerations throughout computing is one reason why the CS2013 curricular guidelines (pdf file) include an expanded section on Social and Professional Issues. Good technical decision making assumes results that ack and respond to complex problems requiring complex reasoning. We as a community are starting to get with the program (ow) and to value integrating societal consciousness into our technical projects as never before. I bet, that many of my former community college students, wherever they are, get it loud and clear.

Friday, July 6, 2012

Sculpting Code to Create and Retain the Art

I read in passing the comment "what if software maintenance was taught the way sculpture is taught". To my dismay nothing more was said in the article about how this might occur. I turned to my friends and colleagues and asked for memories on the pedagogy of teaching sculpture. One person responded "pedagogically? WTH?" which reminded me that not *all* of my acquaintances understand educator-speak. After rephrasing the question to let the confused know that what I wanted was recollections of teaching strategies in a sculpture class, the responses came pouring in. Unfortunately, most of them did not take this deep and meaningful question in the serious light I had in mind.

However, one person said something to this effect: 

"take a chunk of something and remove everything that doesn't look like a horse and you will have a horse".

That was enough to get me thinking about software development and maintenance in a new light. Perhaps a bit less deeply and meaningfully than originally intended. But one must work with what one has. Kind of like creating a sculpture.

Software maintenance a la sculpture would necessitate a top down approach. You have a body of code, thousands and thousands of lines of code (let's say we are working on the scale of Michelangelo's David as opposed to a Chinese tea cup). But in this case, years of helpful modifications have led to a few too many modules and unused and obscure Objects (reflecting my basic dislike of Java). Imagine David with an extra arm or long hair in a pony tail. Perhaps a pair of socks artfully turned down at the ankle. (I'm not going to photoshop this into reality but I invite you to do so and send it my way)

Removing the extra limb (unused modules) shouldn't be too hard - Delete Delete Delete. The primary tricky spot would be making sure that any dead end invocations were eliminated. We wouldn't want David to be left with an extra shoulder beckoning for that third arm to be added back on. The pony tail would be a bit trickier because we don't want to leave anyone with the aftereffects of a bad hair day, but the overall process would be the same.

Removing the socks (obscure Objects) is perhaps the biggest challenge. We don't want to render the feet unable to support the body, nor do we want to damage the elegance of David's stance. Hence, a careful examination of all the connections (direct, indirect) between Objects and identification of inheritance structures is just the beginning. Expert designers and coders with an eye for fine detail will need to be called in.

In the end: Voila! Beautiful, aesthetically pleasing code art of the highest quality. We may be on to something here.

Wednesday, May 23, 2012

Source Code Commenting is Writing

An Example of Poor Commenting Practice
As part of a research project I am involved with* I have been pondering the problem of computing students not liking to include comments within their source code. This is an old problem, well known within the computing education community. I suspect that over the years there has been much head banging on the part of faculty who despair of getting their students to take source code comments seriously, and much head banging on the part of students who just don't see the point. At times the problem appears intractable.

Why do so many people dislike writing? Because we are talking about writing and it isn't just source code comments. Many people (not only students!) will go out of their way to avoid natural language** writing, or will throw something together and spend minimal time making it comprehensible to others. If writing was taken more seriously, then perhaps articles, white papers, grant applications, reports, presentations wouldn't be procrastinated to the last moment such that "there wasn't time" to create kick-butt effective prose. If you have ever served as an NSF panel reviewer or for that matter a peer reviewer for ... well, anything... we feel each others pain.

**Natural language refers to languages such as English, French, Arabic, etc.

The idea that writing code and writing natural language have parallels is not new, but there has not been significant pedagogical research delving into the comparisons. There is much literature on teaching writing which is read by those who teach in departments such as English or Literature. There is a somewhat sparse literature in the computing education community about parallels between developing source code and natural language prose.  

Good source code comments take thought and consideration just as good articles and reports do.

As far as I know there is no literature evaluating the similarities and differences between code commenting and natural language writing*** There are many possible reasons, such as the possibility that there aren't that many people who are pedagogical experts in both coding and natural language writing.

***If you know of any literature on the topic, if you have written any, please let us all know! 

Meanwhile, let's toss out some thoughts to grease the cognitive wheels, shall we?

Natural language involves using words from a spoken language. Source code comments involve use of words from a spoken language. What are the similarities between a well constructed natural language sentence and a well constructed source code comment?

Natural language writing involves developing a logical narrative (in most cases). Source code comments  clarify a logical narrative derived from the source code. What procedural lessons can be gleaned from the extensive literature on structuring logical essays and applied to source code comment development?

Students who like to write code often go out of their way to shortcut or altogether avoid writing comments. Students who like to write code often go out of their way to shortcut or altogether avoid writing papers, essays, etc. Students who have never seen a line of code often go out of their way to shortcut or altogether avoid writing papers, essays, etc. Motivation motivation - what leads to someone developing a healthy respect for a well written article and how can we apply the same psychological principles to source code commenting?

While I was teaching a computer science course at UT Austin I took advantage of a grant funded initiative, provided by the university writing center, to spread pedagogical best practices in integrating writing across the curriculum.  I learned there is an enormous body of literature detailing effective strategies for teaching and learning writing. Equally important, it became clear to me that Coding is a lot like Writing...er, Coding is Writing.

Now I would add: Source Code Commenting is Writing.

After you get over the blindingly simple obviousness of that statement, think about the potential implications for the challenging task of encouraging programming language learners to produce more and higher quality source code comments.

I'm wondering how often pedagogical writing professionals hang out with pedagogical computing professionals. If they do, do they talk shop? What about comparing notes on pedagogical writing strategy? They ("They" being the non-computing members of the conversation) have many decades (centuries!) of experience to draw upon and share. I suspect there is an opportunity as well for knowledge transfer from computing to natural language writing. We share many of the same challenges (improving: motivation, quality, quantity, process, evaluation techniques, perceived value).

It might take some time to become comfortable with the different cultures and to develop common communication. That's nothing new for interdisciplinary computing buffs. Let's start the conversation.


*Comments in this post are my own creations and do not represent the official views of the COMTOR project or its team members!

Friday, March 9, 2012

Pondering Norman's Question About Programs As Art


In the most recent edition of ACM Inroads magazine, Victor Norman penned a column arguing that the creation of a computer program can be an artistic activity, and that a computer program can contain beauty*. The article ended with the open question, unaddressed:  
“Can a computer program itself be considered a piece of art?”

Curious, I did some research on definitions of “art” as a noun, across a variety of sources ranging from the mundane (dictionary.com and Wikipedia) to the erudite (Stanford Encyclopedia of Philosophy). Wherever I looked, I found general agreement that art (the noun) is typically understood to apply to visual media. There was also general agreement that to be considered a work of art, an object should have unusual or highly significant aesthetic qualities. Beyond these points, there is (according to the Stanford Encyclopedia of Philosophy) some disagreement based on era, culture and other factors.

How does a computer program fit in to these definitions if we stick to the two points of commonality: visual media and significant aesthetic qualities? Let's see. A computer program can be considered an object, albeit not one you can touch. Norman and others before him have explored the aesthetic qualities of code. A computer program does not fall into the category of traditional media, although in some cases it produces visual media when executed.

Execution and its attributes brings up an interesting point.  

When assessing the candidacy of a computer program for admission into the fold of “art”, does one evaluate the code itself, or the product of running the code? 

Most recent discussions of programming and beauty, including Norman’s article, study the code itself: how it was constructed. Why is the product of execution not considered as well? After all, 

the purpose of code is to be executed. Code has no reason for existence if it is not executed. 

Unless…one wants to claim that the lines of text are in and of themselves art. Art as a Noun.

All of which brings us back to those unusual or highly significant aesthetic qualities. Norman makes the parenthetical observation that “…we could find beauty in a computer program (a beauty perhaps only appreciable by skilled artisans of programming).” I’m not sure whether that caveat shoots his argument in the foot. In commonly accepted definitions of art, to what extent are the greater aesthetic qualities intended to be appreciable by a wide public audience?

Wikepedia notes that until the 17th Century, the widely accepted definition of art was broader than today, encompassing not just what we now refer to as “fine art” but also including crafts and the sciences. If we revert to this expanded definition of art, a computer program (and the result of its execution) will qualify. I think.

            What do you think? Under what circumstances (if any) does a computer program qualify as a piece of art?


*ACM Inroads 2012 March Vol 3 No. 1 pp. 46-48