Tag Archives: programming

Quick hit: “How Git shows the patriarchal nature of the software industry”

The most seemingly trivial design decisions in a software project can show who is not present as part of that project. And the absence of people in minority groups can result in decisions that exclude people in minorities from joining, in a feedback loop of self-reinforcing exclusion.

Git is a distributed version control system that has gained increasing popularity over the past few years, especially in free and open-source projects, despite a user interface widely regarded to be user-hostile. While most of the issues with git’s user interface are equal-opportunity annoyances, there is one that is specific to trans people who change their names, people who take or drop their spouse’s surname on marriage or divorce (who in Western culture are usually women), and the overlap between the two groups. Megan at “A Megahbite of Feminism” shows how the design choice to make the committer’s name and email address part of the data that determines the unique identity of a given commit can have a negative effect on women and trans people:

To try and put it simply, the author of a commit is tied in to the identity of the commit itself. If you change the author, it’s treated as an entirely new commit. Anyone who has grabbed a copy of your original commit and made subsequent changes on top of it finds themselves orphaned from the history of the project. To use a crude analogy, it’s like you rip the trunk of a tree out, while the branches are magically left hanging in the air, connected to nothing and isolated.

Of course, it’s not that the designers of Git tried to make it difficult for committers to change their names. It’s likely that most of them just didn’t think about what would happen if a developer needed to change their name retroactively, because most of the people who have worked on Git are cis men. They aren’t expected to change their names if and when they get married or divorced, and having cis privilege, they don’t need to change their name to something more consistent with their gender. Nevertheless, the inability to change one’s name retroactively without disrupting others’ work can mean that trans people — particularly trans women, who are likely to face harsh social stigma in any space where their trans history is known — will have to cease to contribute to their projects when they transition.

What other seemingly innocuous software design decisions contribute to exclusion?

Update: I’ve had to moderate a lot of comments for ‘splaining. When replying, avoid arguing from authority and keep in mind that other people have had experiences that are real even if you haven’t personally experienced them.

Second update: I’m continuing to moderate comments that are condescending or dismissive, because comments like that aren’t constructive and don’t create a useful discussion. Please familiarize yourself with our comment policy. Particularly, note that anonymous comments (those with an email address that can’t be tied to a consistent identity, such as anonymous mail services) are not permitted here.

Group of male-type and female-type body symbols, 8 male, 2 female

How To Exclude Women Without Really Trying

An earlier version of this post appears on Tim’s blog.

Excluding by inclusion

This year’s “Future of Haskell” discussion, which traditionally ends the annual Haskell Symposium, stumbled into the question of gender equity, via the perennial question of how to increase the number of Haskell programmers. Many programmers (of all genders) find math intimidating and think that the Haskell programming language requires more mathematical skill than other popular languages. In the discussion, Doaitse Swierstra, a professor of computer science at the University of Utrecht, suggested that a good way to increase the number of Haskell programmers would be to recruit one woman for every man in the room. So far, so good: in fact, Prof. Swierstra showed creativity by introducing the problem of gender inequity at this point in the discussion. But then he went on to say that if this goal were achieved, it would make the meetings more “attractive”.

Speaking as someone who attended functional programming conferences for ten years, the field of programming language (PL) research in general is particularly male-dominated even by computer science standards. Also anecdotally, functional programming is an even more male-dominated sub-field within PL research. I would sometimes play a game during conference talks where I would count the number of men with long hair, and the number of women, in the room. There were always more long-haired men than women. I can’t know what someone’s gender is by looking at them (as I well know, since before 2007 most people who looked at me would have thought I counted as one of those women). Still, even with a very generous estimate as to how many people who appeared to be men may actually have been trans women or genderqueer people, the conferences would still have had a gender balance that doesn’t reflect the underlying population, or even the gender balance in computer science or software as a whole. Even the field of mathematics is less male-dominated than functional programming research, so the excuse that PL people are blameless and the numbers result from discouragement of girls learning math at the primary and secondary educational levels does not explain the imbalance.

Prof. Swierstra does get credit for recognizing that there is a problem. And I don’t doubt that by making the comments he made, he intended to encourage the inclusion of women, not exclusion. (You can listen to the relevant part of the discussion yourself—the link goes directly to 32:00 in the video. Apologizes in advance to those who are hard of hearing; I didn’t want to attempt a transcript beyond what I already paraphrased, since I wasn’t totally sure about all of it.)

Even so, Swierstra’s remark provides a great example of how it’s not the intent behind what you say that matters, but rather, the effect that your words have. By following a call for more women in the room with a comment about his opinion of women’s greater attractiveness relative to men, he completely undermined his own attempt to encourage equality, whether or not that was his intent. If you accidentally run a person over with your car, not having intended to hurt them doesn’t make them less dead. And if you make an objectifying comment that tells women their value at an academic conference is as decoration, not having intended to send that message doesn’t make those women feel any more welcome. (While accidental killings are punished less harshly than deliberate ones, the analogy stops holding at that point, since no one wants to punish people for accidentally making sexist comments, only to ask them to reflect and learn so they don’t make such comments in the future.)
Continue reading

GraceHopper-MorePowerful

Increasing your programming skill

This is an Ask a Geek Feminist question for our readers:

I’m a geek feminist trying to get into IT, specifically object-oriented programming and Flash/Actionscript. What I’m having the most problems with is practice – I’m taking some Continuing Ed courses because I have a totally different day job, but I still don’t feel like I’m gaining much skill in programming, probably also because I know exactly what I WANT to learn, but I haven’t found anything yet that covers it.

What I’m wondering is, for the typical programmer/developer job path, how do you figure out how to solve programming problems that aren’t covered in your classes? Do you just search through the language documentation (e.g. Java API) looking for relevant code?

This is in many ways closely related to an earlier AAGF question about finding newbie coding problems, but also a little broader: programmers, when you were learning, did you go to the puzzle sites, or work through language docs, or work on open source, or something else?

A breakout group at the Boston Python Workshop work at laptops around a table

– the anxiety of learning and how I am beating it

Beating learn-to-program anxiety with good gamification and courses

I have anxiety about learning technical skills. I wrote about this a little while back. But now I know more about how I learn, and, in bits and snatches, I am gaining proficiency and confidence. Here’s a summary of my journey over the last several months with learning more programming skills (in this case, mostly in Python), with links to some resources in case you’re like me.

I get anxious when learning skills that I think I should already know; I feel behind and guilty. Structure, little rewards, friendly sociability, and encouragement from other women help tremendously. Tedra Osell writes about this in the context of writer’s block, and FlyLady and Cheryl Mendelson’s Home Comforts speak to that problem in learning to keep a comfortable home; the people and resources I mention (CodeLesson, OpenHatch’s Boston Python Workshop for women and their friends, CodingBat, and the Python Challenge) provide many of the stimuli I need. Also, my anxiety spikes if I think I am supposed to compare my speed or quality of work with others (hence my post’s title), but cools down if I see evidence that someone else wants to patiently help me. These resources helped me learn without pushing my “argh everyone’s better than me” buttons.

So, first: CodeLesson. The vintage and handmade store Etsy ran a free four-week online course in HTML, CSS, JavaScript, and the Etsy API. Hundreds of people signed up; I got on the waitlist, and eventually did three of the weeks in September and October. (I then had a big crunch week at work and didn’t finish, but I intend to finish that last week’s work anyway, to learn animation and pagination in jQuery.) It was exactly what I wanted — well-written tutorials and exercises to get me over the initial hump. I now know a little CSS, JavaScript, and jQuery, which is infinity percent more than I knew before. I had lots of fist-pump “Yay, I made it work!” moments. And the instructor’s praise of my work helped; I’m a social animal, and recognition and praise from instructors helps reassure me that I’m on the right track.

Thanks to Etsy for the free class. And I liked the CodeLesson interface and infrastructure enough that I may pay for additional CodeLesson classes, or get my organization to follow Etsy’s lead and offer classes through them to increase our users’ skills.

A couple months later, I had a chance to attend OpenHatch’s intro-to-Python workshop specifically meant for women and their friends. I’d read about these before, on GeekFeminism and elsewhere, and it sounded like it would fit how I learn as well as help me plan to hold similar events in my community. So, on a Friday in December, I took the bus from New York City to Boston.

An instructor looks at a student's laptop at the Boston Python Workshop

An instructor looks at a student's laptop at the Boston Python Workshop

It’s a good thing that the Friday night prep part was three hours and that I already knew a bunch of stuff that other people were new to (familiarity with the command line & the Python prompt, etc.) since I was an hour late! It was good to fix the syntax-y bits in my mind. The CodingBat exercises were great practice and I got a big triumphant fist-raised feeling when all those unit tests passed.

In between sessions, I chatted with some of the people who run the program. It sounds like each individual run of it costs about $300 for lunch for everyone and that’s practically it, since they use volunteers and the venue time is donated (and then like $10 total for pens/sticky nametags/laser-printed “here’s the workshop” signs/etc.). That’s practically out-of-pocket for a tech community, and they get grants. So it’s totally replicable. I’ve been reminded that it’s important to treat these kinds of workshops more like a community introduction than as standalone events; local user groups and communities should be the teachers, and email blasts and encouragement should integrate participants into their local hobbyist groups.

Saturday morning’s lecture included some review of stuff I knew, but it went fast enough that I was still learning most of the time — like, how to ask for the nth character in a string, or how for-loops quite work, some subtleties of scope, etc.

Then the project bits — the teachers and their presentations weren’t quite as polished as Jessica McKellar, who had led the earlier parts of the workshop. But I still learned a lot and got to make cool things happen using, say, the Twitter API, and that was very neat. As designed, the workshop led me through small, basic exercises first (the equivalent of finger exercises in piano), then showed off visually satisfying things we could do with Python and its ecosystem.

Aside from tiny minor delays, the workshop basically ran like a Swiss watch the whole time. I was impressed. It takes a lot of preparation, skill, and practice to make an event like that go so smoothly and teach so many people; congrats to the workshop volunteers! And I’m glad I went, learned and remembered Python, and got more confidence to attempt projects.  On a community management level, I’m also massively grateful that I’ve seen firsthand an example of how we can construct and maintain these parts of the pipeline, to help more girls and women get into STEM.

The workshop so excited me that I then did all the Python exercises on CodingBat, and started Python Challenge (I’m at step 4 or 5 right now). They’re complementary. They both gamify learning, and you don’t have to look at how other people are doing, and they both have somewhat granular ways of kindly telling you when you’ve done something slightly wrong. With CodingBat it’s the unit tests, which go from red to green when you cover another edge case. In Python Challenge, for example, at one point I went to a URL where I had transformed the filename from the previous URL per a transformation hinted at in the challenge. The URL had ended in .html, and after the decryption, it ended in the extension (making this up to avoid spoilers) “.ywnb”. At that address was a text file that the server signalled you should download. I downloaded and opened it and it just said, “have you ever heard of .ywnb files?!” or something like that, implying basically that I shouldn’t have transformed the file extension, just the filename. So, it didn’t just fail, it gave me a nicely furnished dead end, signalling kindly but playfully that I had done something understandably wrong.

Screenshot of two progress graphs from CodingBat

Progress graphs from CodingBat, showing my attempts to solve two problems; the green portions are unit tests that passed, and the red and pink portions are unit tests failing. The exercise "String-2 end_other" took me a while, but I got it.

There’s probably some game design term for this kind of compassionate railroading, but it makes me think of the caring side of the caring-to-combative community spectrum. And in both cases I got that feeling of being nurtured by someone who cared, even if that someone else is Nick Parlante (CodingBat’s author), years ago and a continent away.

Also, CodingBat is pretty clear about how you solve any given problem (declaring that this set of problems is about lists and only 1 layer of for-loops, or what have you), whereas in the Python Challenge you have a puzzle that you know you can solve with Python but that you can hit a bunch of different ways. If you want an experience with arguably more realistic exercises, the author of CodingBat also made the Google intro to Python, which includes exercises along the lines of “munge the semistructured data in this file with these guidelines.” I intend on doing that this year.

Python Challenge logo

Python Challenge is mysterious, yet friendly.

It was good to have my spouse Leonard nearby to help me when I was working on the Python Challenge, to (for example) help see that I had called a variable inconsistently, to notice that I couldn’t import a file as a module because I’d named it “1″ instead of something starting with a letter, to remind me how to learn of (“dir(filename)”) and then use (“filename.function”) the functions within it, to tell me about string.replace, and to tell me how to use the interactive prompt properly to investigate how you call a method on an object of whatever type. But I did nearly all the work myself. And as of today I feel a lot more comfortable using for-loops, knowing what data structures to use for a problem (I decided to use a dictionary datatype the other day! And it worked! So exciting!), getting stuff in and out of dictionaries, and generally thinking “I can learn this!” Data structures and algorithms had felt mystifying to me. Now data structures no longer do. I remember the moment in Python challenge when I thought, “I’ll use a dictionary!” and I was right! It’s great.

CodeLesson, CodingBat, the Python Challenge, Leonard available for occasional consultation, and the Boston workshop are the dance partners I needed.

I’ve just begun CodeAcademy and stalled (as with all the rest of my learning-to-code endeavors) due to lack of time, as my job is pretty absorbing right now. (Worth a skim: Scott Gray’s thoughts on CodeAcademy.) I also haven’t tried Philip Guo’s online Python tutor which may suit me better since I’m more interested in Python than JavaScript right now. But I thought it might help others to talk about my journey so far.

By SomeDriftwood (Own work) [CC-BY-3.0 (www.creativecommons.org/licenses/by/3.0)], via Wikimedia Commons

What she really said: Fighting sexist jokes the geeky way!

This is a guest post from Jessamyn Smith, an open source developer in Portland who tweets at @jessamynsmith and blogs at Dreamwidth. Read on to find out her technological solution to annoying sexist jokes.

I work at a startup, and most of the time, I enjoy it. Compared to most tech companies, and certainly most startups, we have quite a few people who are relatively clueful. There are relatively few moments of “brogrammer” culture. There is, however, one thing that has been bugging me for months, ever since it was introduced.

I took it for granted that everyone was familiar with the “That’s what she said,” joke, but a recent conversation with a consultant friend made me realize some industries don’t feature it on a daily basis. For those who haven’t heard it a million times, the idea is that when somebody says something that could remotely be turned into a sexual joke, e.g. “I’m trying to solve this problem but it’s really hard!” you say “That’s what SHE said,” in a lascivious tone.

Now, I admit to having made this joke myself, at times. Once in a while, I even find it funny. What I don’t find funny is a bot we have in our general IRC channel at work, that has some basic AI devoted to determining when to interject TWSS into the conversation.

I asked a number of times to have that bot function turned off, but got the usual combination of being ignored, being told it’s funny, and being told I should lighten up. I tried explaining once why it was objectionable, and managed to get the guys saying variations, e.g. “That’s what your DAD said,” for an evening, but that was about it.

Last Friday, the bot went a bit crazy and started throwing TWSS into the conversation with no apparent rhyme or reason. Finally, I had had enough. And then it came to me: I would write my OWN bot, that responded to TWSS with a quotation from a notable woman. If they are so keen on what she said, why don’t we get educated about what she really had to say. And so the “whatshereallysaid” bot was born. It might annoy the guys into shutting off the TWSS bot, or we might all learn about notable women. It’s a win either way, in my books!

I’d never written a bot, but how hard could it be? Python is my primary programming language these days, so I started searching for Python IRC bots. I tried a few different libraries before setting on twisted. I found a very nice example of a logging bot using twisted , and went from there.

Step 1: I copied the LogBot code into local files, and tried running it. Since the IRC channels I am normally in use SSL, I had to set up my own channel on a public IRC server for testing. It took a while to get the settings right, but finally I succeeded!

Step 2: I created a quotes file and put in a couple of my favorite quotes to test with. I created class to randomly select a quote from the file. I modified the log bot so that if you said its name, it would get a quote and post it to the channel.

Step 3: My ultimate goal was to put the bot in the work channel, so I needed it to support SSL. I found a stackoverflow thread about using a different connect function, one for SSL. Again, it took me some time to get the settings right, but eventually I got the bot to connect to the work IRC server.

Step 4: Now I needed more quotes! I found an excellent website of quotes by women and wrote a small script to scrape the quotes. I used the excellent python requests library. The script got the content of the main links page, and iterated over the links, using a regular expression to get the name and then following the link to the quotes page. Then it pulled the quotes out of the page content and stored them in a text file, one per line, with the woman’s name attached.

Step 5: I set up my own private channel and had my bot connect. I tested it to verify it was correctly noticing and responding to trigger phrases. Once I was confident of that, I tried in the general chat channel. Success!

Step 6: I cleaned up the code, removing everything unrelated to posting quotes, and adding a settings file. I made the trigger phrases configurable. I also added a virtualenv. I felt the project was now in good enough shape to post publicly, so I shared it on github.

Step 7: At this point, I was still running the bot on my own computer, which was clearly non-ideal. I wanted it to be in the channel all the time, not just when I was logged in! I found a python daemon implementation and made my bot run through that. Perfect! Now I could run it from one of the development servers at work.

Step 8: Unit tests, of course! No project is complete without them. I only have tests on the quote selector so far, but I am going to set up some mock tests on the bot logic.

Originally, I had called the project “whatshereallysaid”, but as I was working, I realized this could be much more broadly applied. Anyone could clone my github project and configure a bot to respond to whatever annoying comments they had to put up with. Inspired by “take back the night” and “hollaback”, I decided to rename the project “talkbackbot”.

I finished all this rather late on Friday night, so there was nobody around. I waited with anticipation to see what the response would be. To my surprise, many coworkers complimented me on creating the bot, including some I would never have guessed would appreciate it. Some people even retweeted my announcement that the bot was available on github.

It has been fascinating to watch the ongoing reactions. There have been complaints that we have too many bots in the channel now. There have been complaints about it spamming the channel. There were several “Make them shut up!” responses. These are not reactions I have seen the other bots elicit, certainly not with such intensity. One person even complained about the name being too long, though to his credit he realized right after he said that that several other people in the channel also have very long handles.

To me, all of this seems like typical geek behaviour: something is making them uncomfortable, and so they attack it on “rational” grounds. Most likely, they aren’t even aware of the gut reaction fueling their logic. Interestingly, the intensity of emotion seemed to carry over into subsequent discussions, including one about women in the Python community. For the most part, I have not responded to the comments. I did shorten the bot’s name to “twsrs”, and I pointed out that it’s trivially easy to have the bot not say anything: don’t say TWSS.

In any case, I feel that I have succeeded in constructively disrupting an aspect of my work culture that made me uncomfortable. This is the first personal project I’ve ever thought of, coded, and made public, and I am pretty excited about it! It makes me so happy every time the other bot says “that’s what she said,” and my bot responds with something like:

Our struggle today is not to have a female Einstein get appointed as an assistant professor. It is for a woman schlemiel to get as quickly promoted as a male schlemiel. ~ Bella Abzug

One of the most hilarious responses was a guy saying he was going to say TWSS a lot more, so he could get more quotes! I decided to add another trigger phrase just for him, since the last thing I want to do is encourage *more* TWSS!

Head and shoulders photo of Audrey Tang (self portrait)

Wednesday Geek Woman: Audrey Tang ( 唐鳳), Perl hacker

This is a guest post by Rick Scott, a Canadian philosopher-geek who’s interested in how we can collaborate to make technology work better for everyone. This post appeared on his blog for Ada Lovelace Day 2011.

Head and shoulders photo of Audrey Tang (self portrait)Audrey Tang is far and away the most awesome hacker I’ve ever had the privilege to have worked with. She’s best known for creating Pugs, a perl6 implementation in Haskell. Though it’s now semi-retired in favour of the newer implementations that it had a role in inspiring, it represented a huge leap forward and a quantum shift in Perl6 development at a time when enthusiasm around Perl6 was sorely flagging. She was the first CPAN contributor to have uploaded 100 modules. She’s the key figure behind Perl 5′s internationalization, as well as the i18n of many, many other individual pieces of software. She was part of the committee that designed the Haskell 2010 standard, and has made innumerable other contributions to the open source community.

I never got seriously involved with Pugs, but many of the things Audrey did with it shaped my thinking around open source, community, and how we should collaborate. First was the idea that a project should be optimized for fun (-Ofun1), not for control, or strict adherence to the founder’s vision, or anything else. Second, whereas many open source projects keep a very tight rein on who has commit access and make getting a commit bit an arduous process, Audrey aggressively gave out commit bits to anybody who happened to wander by in the general vicinity of Pugs. Got a great idea? Here’s a commit bit, go implement it. Notice something missing in the docs? Here’s a commit bit; go add it. Ranting in IRC that something’s not working? Here’s a commit bit; go fix it. Extending this trust makes people feel welcome and want to contribute. It fosters an air of community instead of making prospective new participants feel as though they are looking at climbing (or worse, building) a pyramid.

Audrey would likely demur at my calling her brilliant, but it’s a fitting descriptor for her. She has a unique and penetrating insight into code and an uncanny knack for encouraging the people who write it. I count myself as fortunate to have been able to work with her and to be part of a few of the communities she’s had such a profound impact on.


1 -Ofun: -O is the compiler option that tells it how you want your code optimized. Audrey’s presentation on -Ofun [pdf] talks more about how to maximize the amount of fun in your software project.

Creative Commons License
This post is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

Want to highlight a geek woman? Submissions are currently open for Wednesday Geek Woman posts.

Feminist license plates, by Liz Henry CC BY-SA 2.0

Newbie coding puzzles and problems

This is an Ask a Geek Feminist question for our readers:

I am a relative newbie in the world of coding. I took two semesters of intro to programming with Java this past school year and I’ve been to a few python workshops. All in all, I’ve only been building programs for about eight months. I was wondering whether there are some good sources of newbie-friendly project ideas out there that will keep me going over the summer so that I don’t lose all my skills before my fall data structures class.

I have had Project Euler recommended to me in this capacity, but I don’t take the amount of delight in mathematics that the person who recommended the site to me does. Are there others that are a bit more down to earth?

This question seems to be seeking less ongoing projects, and more a source of short exercises and puzzles. Anyone got anything? I only know of Top Coder but it’s not newbie-focussed and from what I know of it it’s also rather focussed on mathematical puzzles.

Google, gossip, and gamification: comparing and contrasting technical learning styles

I just ran across Karen Rustad’s “How to teach programming: shy, practical people edition.” She cared more about making practical things than about what she perceived as “coding,” so her early technical life centered on HyperCard and making webpages, rather than boring faffing about with “mathematical curiosities.” Finally she came across a project she wanted to help, and scratching that itch meant learning more programming:

Basically what revived my interest was having the opportunity to work on OpenHatch. Getting thrown into web app development and all the associated languages and tools — Python, Django, git, Agile, bash and other command line nonsense — all at once? Yeah, it was a lot. But Python out of context is just a toy. Django out of context is plausible, but hard. Git out of context … wouldn’t’ve made any dang sense. So sure, I couldn’t remember half the git commands (Asheesh eventually made a wiki page for me :P) and I had to look up how to restart the Django development server practically every dang time. But I made do, and I learned it, because the context totally freaking motivated me to. Because *finally* code had a purpose — it was clear, finally, how it could be self-expressive and useful to me. Learning these tools meant I could help make OpenHatch exist. Like, fuck yes.

Different people learn in different ways, and for different reasons.

I figure I learn how to tinker in software, especially in open source, via three methods:

  • Google
  • gossip
  • gamification

I learn to search the Net well, iterating on keywords and site: and so on; I fall into or develop a network of folks who won’t think I’m stupid for asking questions; and I play little games with myself, or write them, feeling the thrill of the challenge, leveling up little by little.

I was missing all of these when I tried to Learn To Program.

Continue reading

opensource_logo

“Put up or shut up”

One thing I love about open stuff, such as open source communities, is that we (try to) measure people by what they contribute.

I’m now Volunteer Development Coordinator for the Wikimedia Foundation (although I am not speaking for them in this post), so I care about the quality and quantity of contributions to MediaWiki, and about the people behind them.  In fact, I’ll partially be measuring my success through statistics on the number of people who offer code, bug reports, translations, documentation, talks, mailing list posts, and so on.

And it’s not just doing, it’s doing and sharing.  We value collaborative work, not hoarding.

This norm, among others, leads us to use “put up or shut up” to quash unproductive conversations, bikeshedding, trolling, and “you should…” unhelpful suggestions.  I once had the satisfying experience of saying, to a guy full of “why didn’t they do foo”, “you should totally post that suggestion to the mailing list!” and seeing him just shut up, defeated.  He knew that doing this without embarrassing himself would take a modicum of research and thought, and he had no intention of doing anything that arduous.  He’d just wanted to mouth off.  And now I’d revealed him as a noncontributor.

I saw another example in Kitt Hodsden’s talk about the Hacker Dojo community center.

all talk, no action

Another aspect of open source development we encountered, an aspect that is also found in just about every volunteer organization ever, are the troll subspecies “we oughta.”

The we-oughtas clan is often very vocal, they know what we should be doing. When it comes to the actual doing, however, they aren’t around, they aren’t available, or that’s not what they meant.

When this is the case, the response is either, that’s nice, and ignore it, or, just as in open source projects, “put up or shut up.” Essentially, if you’re not willing to put forth the effort of leading your own project – even if that leading is just finding someone else to lead your project – we’re not going to follow.

At its best, “put up or shut up” is empowering.  In Hodsden’s talk, she shared a story about a potential member whose “project was outside of our expected and supported hardware and software development spaces”:

We gave the answer we have learned to give for people who have crazy, though potentially awesome, ideas that in the future could work wonderfully in our space: lead the project: tell us what it is going to take for your project to succeed, develop a game plan, put in the safety measures, find supporters, work up a budget, start the fundraising, make it happen.

The community defines itself. If the community decides it wants to become a metalsmithing shop or an experimental biology lab, it’ll become that, because that’s what the community wants.

I bet all of us who have held leadership in FLOSS can attest to the two sides of “well go ahead then, patches welcome, make it happen, this is a do-ocracy.”  Great, we can empower people.  But how often do we use it to shut down discussions, ideas, and people we don’t like?  In particular, have you been part of an interaction where a privileged FLOSS project member used “you want it, you make it happen” to wrongly dismiss a concern that might require the whole community to change its behavior?

Look at what I did, in the anecdote I told in the third paragraph of this post.  I wasn’t purely kind or rational or ideologically anarchic in telling that guy to write to the list; I found him annoying and wanted him out of my hair.  I told him to contribute, superficially encouraging him, but really wanting to discourage him.  Have you ever been on either end of that, especially around geek feminist issues?

And I suspect this disproportionately affects newbies and non-native speakers of a community’s language.  This is the problem with saying “you want it, make it happen” in response to requests for a harassment policy, or for all of an app’s strings in one file to make localization easier.  The very people who need those new policies, procedures and abstractions are least able and worst placed to implement them.

(Small digression: in the case of harassment policies, consider “Did you know how to react?” by Noirin Plunkett, and Bitch Radio’s interview with Valerie Aurora.  The Ada Initiative, in suggesting and working towards conference anti-harassment policies, has far more energy and resources than would one individual seeking protection.)

Developers are used to dealing with requests for features or bugfixes, but FLOSS leaders are still learning how to deal with requests to socially engineer our projects.

And no matter whether you’re considering adding a feature, hosting a sprint, changing version control systems, or joining a conservancy, it’s sensible risk mitigation to chat about it before putting substantial effort in.  This is a different kind of work, not coding, but building support and getting the lay of the land.  And it’s part of contribution.

So, fellow FLOSS leaders: If you want to grow new contributors, along with giving them permission to suck, build personal relationships with them.  In private or face-to-face, listen as they vent and discuss their ideas, even the half-baked ones.  Listen for the difference between “we should” and “I’d like to/how do I?”.  Sometimes they’ll need sympathy, and sometimes advice.  If you say “go do it then,” say it encouragingly, not dismissively.  Watch out for moments when a marginalized potential contributor is essentially asking you, “help me help you.”  And watch yourself in case you’re about to do what I did, using “put up or shut up” to shut down someone you find abrasive.  Because sometimes I’m abrasive too, and sometimes I have good ideas.  :-)

As hypatia puts it: “a gentle ‘that’s definitely an issue, could you file a bug’ goes a long way.”

Boston Python Workshop logo

Lessons learned from the Boston Python Workshop, an outreach event for women

This is a guest post by Jessica McKellar. Jessica is a software engineer and an organizer for the Boston Python Meetup.

This entry originally appeared at the OpenHatch.org blog.

My name is Jessica, and I’m an organizer, curriculum developer, and lecturer for the Boston Python Workshop, a free, 1.5 day project-driven introduction to Python for women and their friends. The workshop has run twice, in March and May, and the third run is happening in July at Google Cambridge.

I’d like to share some of the lessons the Boston Python Workshop staff have learned about organizing outreach workshops and our goal of bringing more gender diversity to the local Python community.

First, the structure of the Boston Python Workshop

Boston Python Workshop logo

The Boston Python Workshop is for women and their friends who have no or limited programming experience (I’ll talk more about “women and their friends” in a bit).

The workshop is held on a Friday evening and all day Saturday. On Friday, attendees set up their development environments and start learning Python through a self-directed tutorial and practice problems.

On Saturday, attendees continue learning Python with a 2 hour interactive lecture. Attendees and staff socialize over a sponsored, on-site lunch. In the afternoon, we break out into groups to practice Python while rotating through three short projects on a variety of fun and practical topics. Our projects have included writing parts of a Twitter client, how to cheat at Words with Friends, writing a basic web app in Django, and writing graphical effects for a ColorWall. Our material is all online, so check it out.

This comes to a solid 10 hours of learning and practicing Python, with support from a strong group of volunteers from the local programming and open source communities. The workshop is run under the auspices of the Boston Python Meetup (I’m one of the Meetup organizers) and we hold follow-up events like an open Project Night through the Meetup.

Lessons learned about teaching Python to beginners

Boston Python Workshop attendees watch a presentation

There is a huge difference between teaching Python to people with programming experience in another language and people with absolutely no prior programming experience. The biggest lesson we learned is that if you are going to teach absolute beginners, you have to commit to really starting at the beginning:

Continue reading