where I’m at with Codes of Conduct these days

What I keep thinking about Codes of Conduct is they’re wonderful, but they lack ambition.

Because at heart, what are we saying here?

You really ought not to egregiously insult or threaten people, especially if they’re part of a vulnerable or minority group, and double-especially if your insults or threats are grounded in their membership in that group. In fact you should try to think about how your words might affect people before you say them. And maybe while you’re at it, learn enough about people from a variety of backgrounds that you can think usefully about how your words might affect them, even if it isn’t how those same words would affect you.

As the metaphor goes, what? For that you want a cookie?

I keep thinking, codes of conduct are a first step (and an important one, and sometimes a shockingly hard one), but what I really want from my conferences is xenia.

This is old, right? Lots of cultures have had their hospitality myth. But the form I know is ancient Greek. “Guest-friendship”. The ritual and kindness and hospitality shown a stranger, the connections that bind people across political and generational chasms in an age before strong communications technology.

The knowledge that the stranger whom you welcome may be a god in disguise.

I’m not good at hospitality. And I’m getting worse as I become better-known in my particular conference circuit; the number of people I absolutely must spend time with at any given conference now well exceeds the time I have to spend, and somewhere in there, amid the blur of social obligations and old friends I see only a handful of times a year, I need to make time for the stranger? Now that I have some power in a space I need to use it to hold doors open, to hold spaces themselves open, to make sure new people and ideas and experiences can constantly come in and make it their space, too, shaped around themselves as well as me? Now that I have my subgroup I have to keep looking for ways to connect to other subgroups, to be about crosslinking instead of calcification? And all of it while I actually am the introvert who needs some space to hide each day, who goes home and crashes out for twelve straight hours because the way I do conferences is already overwhelming?


That’s what I find myself taking away from the code of conduct idea more and more, now. That if I test a new space I want an obvious indication that it will be hospitable to me; that if a space is in some sense mine I have an obligation to make it hospitable to others. That the gods walk among us in more guises than we instinctively recognize, and part of our obligation as co-creators of spaces for humans is to suspend disbelief and learn to recognize.


#litabd strategic analysis for fun and profit

I’ve had the pleasure over the last few weeks of having in-depth chats with several women who are top-notch strategic thinkers and have leadership roles in business and nonprofit organizations. Total contact high.

And this has been dovetailing with my LITA Board almost-a-year retrospective thoughts. Because you know I can’t find something interesting without totally obsessing over it until I understand it frontwards backwards and sideways, right?

And in the meantime I’ve checked out a book on nonprofit financial sustainability, which turned out to have a sticker in it saying it had been placed there by an ALA program on financial literacy, which is surely a sign. The book’s giving me a specific technique for analyzing nonprofit budgets, so I’m testing it out on LITA’s.

The tool is a matrix map – basically, put all your budget lines on a chart of impact vs profitability and see what happens. This gives you four quadrants:

  • High impact, profitable (winning)
  • High impact liabilities (labors of love: worth doing if you can subsidize them)
  • Low impact, high profit (the things you do to subsidize your labors of love)
  • Low impact liabilities (why are you doing these?)

Then you represent all those activities with circles scaled to their expense.

The book also gives 7 criteria you can use for determining impact that it claims to have tested (not clear how, but I’m also not done reading) with real-world organizations. It says using more than 4 tends to be unhelpful, so pick the up-to-four that make most sense for your organization; assign each activity a 1-4 score on each criterion; and total them up for your impact estimate. (You can weight them if you like, but that’s a whole other level of complexity I didn’t get into.) I picked the 4 I think are most relevant to LITA and did a back-of-the-envelope impact analysis:

  • Mission alignment (I can compare with the mission statement)
  • Effectiveness of execution (I think this is really important but I have no way of evaluating it)
  • Scale of impact (I assigned a 4 for thousands of people reached per year, a 3 for hundreds, and so forth)
  • Community building (I totally just made this number up on instinct)

(The other criteria it suggested are depth of impact on participants; leverage (how much does it increase the impact of your other activities); and filling an important gap in your competitive space. I found these both less interesting and harder to gauge – I think they’d need a lot more data to do right. Your mileage may vary!)


I made graphs! (Impact and profitability normalized so they run -1 to 1, obvs.) These are based on FY2013 year-end data (aka “the most recent completed fiscal year”) – actual as-realized expenses and revenues. Sorry about the overflow on the legend – couldn’t figure out how to fix that.

Here’s what we do:

Here’s another version without Forum (which is so much bigger of an expense than everything else that it makes them hard to see; and apparently I normalized them to different axes, whoops):

Well now, that’s interesting.


I’d love to have some people argue with me – did I pick the wrong criteria from that set? Estimate their values wrongly? Is this entirely the wrong analytical frame? Go for it. Tell me why 🙂

I also think there’s a hugely important caveat with this entire analysis, which is that our budget docs report staff expenses as a single line item, rather than breaking them out by time spent on each activities. This is important because it means every profitability estimate is an overestimate; not one of those lines accounts for the staff time it takes to make those things happen. This is especially relevant for Forum, which looks like a net profit, but clearly takes a great deal of staff effort (it’s a huge undertaking!) and may therefore be a net loss. That doesn’t mean it’s not worth doing – it reaches hundreds of attendees, who by all reports I’ve heard think well of it, and it’s a great opportunity for us to showcase our members’ accomplishments and help them advance their career goals. But not accounting for staff time does cloud the strategic analysis.

What do you think?

WasteLab! (Children’s party edition)

A little while back I was at this fun presentation by Danish librarians at Harvard, about work they’re doing to envision and implement their public libraries’ futures. Part of it is the People’s Lab – basically, a pilot space that they’re giving to different local groups or library staff members on a rotating basis, so that people can share their skills with the community and try out awesome stuff, as part of a broader Danish focus on innovation.

The People’s Lab has hosted Guitar Lab (courtesy of a library staff member who knows how to make and fix guitars (!)), Dream City (a popup makerspace at a local arts festival), TechLab (the local hackerspace moved in and among other things helped this kid Valdemar build a hovercraft) – lots of fun stuff.

And then, WasteLab. Where they tossed all their trash out on a table – there’s lots of it! – and invited the community to come in and make whatever they wanted with it. (Embrace the chaos, the Danes told us. Don’t try to keep it organized.)

Well well well. I am just about the least maker-y person I know, but my kid never met a craft project she didn’t like. So I explained the concept to her and asked if she wanted to invite some friends over to build stuff out of trash and she was like, YES.

She spent the few weeks noticing absolutely everything that might be interesting to keep around, and putting it in her WasteLab box. Ikea instructions? A broken inhaler? A tiny orange tile she found on the sidewalk? Done.

Day of the thing, I covered the dining room table with butcher paper, and put out her box of trash, and some glue and markers and scissors and stuff. Her friends brought some trash too. At some point I think I handed them snack. And then I stayed out of their way. Easiest setup ever.

And they built stuff.

They were super focused on it for a long time, too. There were sparkly butterflies, and weird Christmas ornaments, and a brand-new watch, and Elsa’s four-poster bed when someone realized you could take the waste 3D. (Paintbrushes can be structural elements! Sort of.)

And then cleanup is really easy because you salvage the things you feel like salvaging until the WasteLab box is full, and then you just untape the butcher paper in the table and wrap everything up in it because it was trash anyway.

Except it turned out to be a lot of other things too. The kid’s already bugging me for when we do it again.

My LITA Board service: an almost-a-year retrospective

ALA elections close tomorrow (eligible and haven’t voted? Go vote! The LITA slate is amazing). So it’s been about a year since I was elected, nine months on the Board, which is making me think retrospective-y thoughts.

(Like everyone, I’ve meant to blog more about my experience on the Board. Like everyone, I’ve found that so much of it is contact highs and crazy plans in bars, little nudges over IM, conversations that aren’t mine to share – both hard to summarize, and sometimes confidential. But for someone who was inspired to run for Board in part because of a fascination with its wrestling over the role of transparency these last few years, that’s not really good enough, is it?)

So let me look at my campaign platform and mull over how I’ve been doing. And you tell me what you want from LITA, how I can do better.

Technology is for everybody.

LITA’s made some baby steps in this direction – not all things I can claim credit for. Forum 2013 (a committee I was on) had more public library speakers than usual, and some youth services presentations, though it didn’t do as well as hoped on diversity counts. I hear Forum 2014 actually did blind review of submissions, and I’m looking forward to seeing the results of that.

A few folks have joined LITA, or rejoined after a long time away, that I’m super excited to have.

The Education committee (to which I liaise) has some children’s technology webinars in the pipeline in addition to our traditional academic-library-oriented content, and is working on broadening its topic coverage and reaching out to new speakers. You can help! Teach for LITA (I’m happy to answer questions). If you can speak to an important libtech topic we haven’t covered much, and if you’re not one of the usual suspects who’s spoken for LITA a bunch of times already, we’re especially interested in hearing from you.

Education is where I have been spending a great deal of my time – working with its leadership and LITA staff to get processes better documented, to put a better feedback loop in place so committee members can see the impact of their work, to communicate Board expectations more thoroughly to the committee, et cetera. And also personally, to understand the liaison role – I don’t want to run the committee or do its work (that’s for our awesome chairs and members); I do want to remove obstacles, and make sure they get information from other parts of LITA/ALA that they need to be fully effective. Lots of progress here; lots yet to be done.

Communication equals engagement.

Baby steps forward.

The Board’s taken on responsibility for @ALA_LITA, so it’s livelier and has a few hundred new followers; yay!

A lot of you showed up at the last online Board meeting – that was awesome! Hope it was interesting seeing how the sausage is made. Please join us in Vegas if you can!

I try to be conscientious about posting my LITA Board Connect content publicly whenever it is consistent with the open meeting policy to do so. (ALA Connect defaults to private, but can easily be set to public. You can get email notifications of, and comment on, public content, FYI.)

Been talking a lot with VP Rachel Vacek about more comprehensive steps we can take toward inclusive, vibrant communication.

Lots more to do here, though. The rest of our social media needs people to own it and make it vibrant. The Board needs to do better at regular communication to the membership – someone needs to own that, too. And that’s a thing that we need to model and set expectations for so it trickles down. The committee and interest group chairs are the first point of contact for many (actual and prospective) members, and we need to have a culture of communication that runs all the way down. We need a culture of understanding that communication isn’t just a thing you do in January and June, with people who show up physically to conferences.

I can see processes that would help here, but I don’t have the throughput to own them all.

Stewardship matters.

And this is where I’ve been spending the bulk of my time.

I’m a numbers person, right? I was a math major. And when things don’t make sense to me, I obsess about them until they do. LITA’s budget does not make sense to me.

This may well be because I don’t have experience with budgeting (and I’d love to have conversations with those of you who do). What I know is, I’ve collected every spreadsheet I can find back through FY2011 – drafts, actuals, high-level, line-item. And I’ve put them all in a master spreadsheet so I can compare them, year-on-year, category-to-category, draft-to-actual. And I’ve stared at the line items and tried to tie them to the high level stuff, and I’ve stared at the actual year-end revenue and expenses and tried to compare it to our projections for future fiscal years, pretty much until my eyes bleed. And I’ve asked an awful lot of questions of fellow Board members and the Executive Director and the Financial Strategies Task Force (its report [PDF] is illuminating). And I am just not smart enough to make these numbers make sense.

As a Board member I have a duty of care toward the association, and I believe the single most important element of that is ensuring the financial health of the association, so that it can continue to serve its thousands of members for many years to come. But I see financial year closes that show us running deficits most years, and I’m a startup girl: I know that everyone has a burn rate and a runway, and if your runway isn’t growing at least as fast as your burn rate is eating it (and ours is not), there comes a time when you are not aloft, when your wings are wreckage on the ground.

I’m a Board member and I love you, our members, all. I am not allowed to let there be wreckage.

I don’t know, yet, how to change the burn rate or runway. I’m mulling that over but I’m not a big enough picture thinker yet. What I do believe is that prior to that, the budget has to be an effective instrument for operationalizing our strategic priorities, and the Board has to be more effective at using it thus.

(Disclosure: I voted against sponsoring Emerging Leaders at the last meeting. I think this sponsorship is one of the best things we do, but I simply don’t know if we have the money to do it, and I cannot in good conscience appropriate money I am not confident we have. I chant “duty of care” to myself a lot some days.)

We on the Board, we’re not elected for our budget experience. Some of us have it, some of us don’t; some of us are numbers people, some of us aren’t. And we’re librarians; we’re not into conflict. We’re not into telling hard truths. And so over many years we’ve ended up with a culture of shirking our oversight responsibilities, of telling ourselves this runway looks good. And it shows.

We have begun to charge a Financial Advisory Committee, and we’ve found some really good people to serve on it, and I’m very optimistic about the work they’ll do. We need people specifically selected for financial expertise to help the Board perform its oversight role effectively, and to help us weigh the tradeoffs in implementing the Financial Strategies Task Force’s recommendations, or in other ideas that will from time to time arise. I think they’ll be a great help once they become a regular thing.

In the meantime, though, I have to keep on trucking with my own understanding of duty of care, my own drive to make the numbers make sense to me, to be able to look at the budget and see answers to my questions about whether our hopes can be implemented. Whether we will or won’t, in the end, have had the money to sponsor our Emerging Leaders in FY2015. Little things that make up big ones.

I myself, I wasn’t elected for budget expertise, and I’m happier with hugs and innovation and kittens than I am with hard truths. But I believe that when you elected me, part of the deal was that my own feelings and inadequacies became secondary to the good of the association. When I think of leadership I think of how I can be the person that you, that circumstances, need me to be. How can I rise to the level of the task you’ve entrusted me with.

How can I serve you better?

ITAL: A Diversity of Voices?

The latest Code4Lib journal had an editorial addressing the gender balance of c4lj authors. That sounded like fun, so I have replicated the analysis on LITA’s journal, Information Technology and Libraries. (With thanks to the LITAns who made it open access as of volume 31, issue 1 – that made this much easier!)

I did author counts back through 2007, thus covering approximately the same period as c4lj’s graphs. Over this period there were 239 (nondistinct) authors of 133 articles, communications, and tutorials. (There were also editorials, presidents’ messages, and book reviews, which I excluded.) I have not replicated c4lj’s editorial board counts.

As with all counting-based exercises, I am nervous about the exclusion or erasure of non-counted types of diversity (which are important, but not always doable with the available data) and the possibility of error in gender guessing, particularly given that the graphs impose a binary that doesn’t actually represent gender reality. (Again, a data set of author names doesn’t allow for better accuracy.) So please apply lots of grains of salt and take this as an approximation.

So…what does this mean?

It’s consistent with my subjective impression that LITA is 50/50 ish …but I don’t entirely trust that subjective impression, because I know that people tend to overestimate the percentage of women once they have any visibility at all. I don’t have data on the gender breakdown of LITA membership (do you?).

And I still don’t know how I feel about 50/50, even if true. Is it good, because it represents the culture at large? Is it bad, because librarianship is 80% female? Is it good, because it’s less male-dominated than Code4Lib or the broader technology industry? Should I be creeped out by that, on the theory that LITA is less male-dominated because it has more of a mix of hard and soft skills, and the gender ratio tracks with that ratio? (It’s not like it isn’t obvious that the more I do code and leadership and public speaking — technical things, things that put me on a stage, things that pay well — the fewer women I see around me.) Does 50/50 mean we’re doing something right, something that points toward a possible future, or does it mean we’re tangled between poles of wrong?

And while I’m asking questions, does anyone who knows statistics want to take a stab at the shift in author gender ratios over time? Circa 2009 issues went from being generally male-dominated to generally female-dominated, but I have no idea if that’s statistically meaningful.

thoughts from Toronto on teaching code to librarians

I’m writing this on a plane back from Toronto, where I spent a few days teaching librarians to code as part of the Mozilla Foundation’s Software Carpentry program (which was basically the funnest thing ever, and Mozillans are smart and nice, and Toronto makes a spectacular case for itself, and Canadian librarians are 100% high-grade awesome).

Teaching this clarified for me some of the difficulties I had with my online Python course (where by “clarified” I meant “I sat bolt upright at 3am wondering why I hadn’t realized this before and had to spend the next hour writing it all down and trying to figure out how to get back to sleep”). So let me try to put that into words — but first I need to back up and explain an important paradigm I have for understanding the programming learning curve.

I believe, from personal experience and talking to people at different places on the programming learning curve, that the kinds of problems you are engaged with fundamentally change with every order of magnitude of the size of program you write. (Yes, lines-of-code is a bad metric, but it’s a good ballpark, so let’s roll with it.) They’re all important, complex, meaningful problems (though it can be hard to remember that you ever needed to solve them when you get too many orders of magnitude past them). They go roughly thus:

  • 0 → 1 line. “What the heck is this?!” What is a programming language; if applicable, how does it differ from other related things you may be familiar with, like markup languages or Excel formulae; what do “function” and “control flow” mean and why do you care.
  • 1 → 10 lines. “How can I do something useful with a programming language?” And by “something”, I mean one atomic task, but one that runs from beginning to end with correct syntax and employs those fundamental conceptual building blocks.
  • 10 → 100 lines. “How do I break a task down into subtasks?” Modularity, reuse, DRYness, planning.

I’m not going to articulate the next few orders of magnitude, both because they are not relevant to beginner or intermediate programmers, and because I’m climbing the 1K → 10K transition myself, so I’m not able to articulate it well. But they have to do with elegance, abstraction, performance, scalability, collaboration, best practices, code as craft.

The 3am realization is that many, many “introduction” to programming materials start at the 1 → 10 transition. But learners start at the 0 → 1 transition — and a 10-line program has the approachability of Everest at that point.

This is why the CodingBat exercises that Boston Python Workshop developed are such a big deal. From this side of the 0 → 1 transition they look meaningless — they’re functions, with the def function_name() part already written, that require you to write, in many cases, one line of code to accomplish the goal. One. Line. And they’re not meaningless at all. They’re where students discover what they did and didn’t understand from readings and lectures and messing around with the shell. They’re where students discover that they may have vocabulary and syntax, but they don’t yet have a conceptual model of what a function is. And in practicing writing one-line functions, they develop that conceptual model. It’s absolutely critical.

And this is going to be the next big thing I struggle with in teaching this better. Because the fact is, you want to be teaching examples that are grounded in real-world tasks. They’re motivational; they’re more comprehensible than abstract examples; they make it easier for students to connect course material to their actual work, meaning they’re more likely to be able to keep using it, to climb more of the learning curve on their own — to get to a place they can actually use this stuff, which is not a place you can get people in a day or two.

But I don’t know how to do a real-world task as a one-line function. I know how to write a ten-line function that does something real-world-useful, and how to walk students through discussing it and modifying it. And that is great for the students who have already climbed the 0 → 1 learning curve. But it’s baffling for the ones who haven’t.

I think I can do this, with thoughtfully chosen examples. I think I can come up with one-line things that can be wound into ten-line things, so students leave a course with a working program that does a thing they can imagine using (or, at least, a working program that’s a close enough cousin to something useful that it suggests where to go next and gives them a head start in getting there). But this is going to be hard. This is totally, “I apologize for the length of this letter; I did not have time to make it shorter” territory. Simplicity is brutal. And one-day intensives, or four-week onlines, do not have time for unnecessary things.

At any rate. I came out of the last two days with this to mull over, plus a stack of books and articles of research on code pedagogy, plus a bunch of good memories and tasty food experiences and new people to follow on Twitter and face-to-face encounters with people previously followed, so it’s just made of win. But I welcome your thoughts.

#libtechgender: conference codes of conduct as seen from your world and mine

In discussing ALA’s Statement of Appropriate Conduct with ever-wider audiences, I get the growing feeling that we stand at different starting lines, and it affects our understandings of the words in the statement.

So if you looked at the Statement and your first reaction was “but…free speech?” or “nanny state” or “political correctness”, this is for you. Let me attempt to explain some starting points. (Trigger warning: graphic violence, rape, rampant misogyny.)

Proponents of these codes are not concerned that people might disagree with them (even disagree passionately). We aren’t concerned that people might not be nice. We aren’t wanting to run to some hammer of authority every time someone says a group we’re in might be other than pure unicorns and roses.

Here is the world I live in:

I live in a world where famed game developer and technical writer Kathy Sierra disappeared entirely from the internet for years after she received a series of death threats, including publishing of her home address, social security number, and false allegations that she had abused her children.

I live in a world where Anita Sarkeesian ran a Kickstarter to support a project on sexism in video games, and as a result someone created and distributed a video game consisting solely of clicking on her face until you had beaten it to a bloody pulp.

I live in a world where merely having a female-gendered nickname on IRC (a chat network important in the technology world) makes you 25 times more likely to receive unsolicited malicious private messages, even if you never say a word.

I live in a world where I have zero interest in going to CES because I don’t want to have to deal with the naked booth babes (and am therefore cutting myself off from the biggest trade show relevant to my interests). Where a friend of mine takes for granted there will probably be naked women on conference slides in her field. Where people complaining that a joke about being “raped by dickwolves” in a comic about gaming isn’t funny leads to its creators selling dickwolves t-shirts and large numbers of people to this day defending this as a reasonable position to hold. Where a hackathon sponsored by a major tech news web site gives time on stage to an app intended solely for sharing photos of women’s cleavage, with a nine-year-old-girl in the audience. Where a major tech news discussion site is so prone to misogyny many women never bother to spend time there, at the same time as it is suspected of repeatedly quashing discussion critical of misogyny.

I live in a world where I treat it as great and inexplicable good luck that no one has yet threatened to rape or kill me just because I blog and speak publicly about technology and sexism under an obviously female name, and I have the backup plan in my head of how to moderate comments and log IPs if it’s ever needed, and the list of which friends have my back enough that I’d ask them to wade through that kind of cesspit for me. I live in a world where using my own name on github and IRC was a specific conscious choice that required actual bravery from me, because I know that I am statistically exposing myself to retribution for doing so.

Let’s say that again: I live in a world where being myself in public, talking about things I care about under my own name in public, is a specific choice which requires both courage and a backup plan.

In this world some people choose not to be themselves in public. They choose not to speak, or to speak only under disguises – ones they can’t wear at conferences, face-to-face.

That is my concern about free speech. That right there.

That is the aim of conference codes of conduct. To clarify the threats — not to eliminate them, because you can’t ever do that, but to state that this is a place where silencing people through graphic threats of sexual violence or open and regular degradation is treated as unacceptable, that if it happens to you there’s a place to go, and to (crucially) say that the bystanders care too. That you’re not in a place where a lot of people are decent but indifferent and someone somewhere might attack you and it’s all on you to cope, but you’re in a place where a lot of people are decent and affirmatively have your back.

And by clarifying the threats, by publicly affirming the decency of the bystanders, we create a world where you don’t have to be quite so brave to speak up. A world where the uncertain, the new, the outsiders have a voice too. A world where maybe the barrier for being a woman in tech — or an outsider coming in — is not the ability to say “fuck you”, but merely the interest in saying something, anything.

If you have been reading the statement of acceptable conduct from the frame of mind that you haven’t encountered problems and things seem fine and the only speech you can imagine it chilling is the edgier end of the perfectly fine, please go back and reread it from my world. It reads differently.

The ALA Statement of Appropriate Conduct: a FAQ

If you’re here from Library Journal, welcome!

For regular readers, I have an article in today’s Library Journal about ALA’s new statement of appropriate conduct for conferences. It covers the history and context behind this sort of statement as well as why it’s valuable. Go have a read.

Now that you’re back: I get a lot of questions about the statement. I’d like to answer some of them here, and invite you to ask other questions you might have in the comments. A disclaimer first, though — here are some things I am not:

  • ALA’s lawyer
  • a lawyer at all
  • an ALA staffer
  • an HR expert
  • possessed of the sole or definitive interpretation of the statement

Just so we’re clear on that. I was involved with drafting the statement and I am somewhat familiar with other conferences’ policies and some of the incidents that have motivated or been addressed by them, but I am not the final word on this, and I encourage you to do your own research and analysis. I think the statement is most valuable when it serves as a beginning – a point of departure for us to have conversations about who does and doesn’t feel included in ALA and why and what we can do about that, how our backgrounds and experiences differ and what we can learn from that. How to, in the statement’s words, exercise our “shared responsibility to create and hold [the conference] environment” we want to have. So let’s talk.

And now, some questions!

What happened to impel people to adopt this statement?

The statement was not prompted by any incident of harassment at an ALA conference.

There have been a lot of incidents of harassment in the worlds of technology, science fiction, open culture, gaming, etc., and in response to those, conferences in those worlds have increasingly been adopting statements of this type (usually called codes of conduct or anti-harassment policies). Quite a few librarians who are also involved in those worlds have asked me and others over the past year whether ALA has such a policy; the statement is in response to this interest, and in advance of future need (though of course I hope it will never be needed!).

This does not mean that there has never been harassment at ALA or other library conferences. I had heard of some incidents of sexual harassment in the past (although Sarah Houghton is the only person I know of who has blogged about them). (Edit: I’m wrong; Lisa Rabey has blogged about this, too. Which I knew and should have remembered; I apologize for the oversight.) In the course of drafting this policy, I have heard about more incidents, rooted in race and gender identity/expression as well as sex. (Please note that the language of the statement, following existing ALA language on anti-discrimination, is not just about sexual harassment but specifically names a variety of groups which might be targets of hate speech or discrimination.) Some of these incidents were addressed quietly by conference services; some of these were unaddressed and unreported.

This, to me, is one of the most important aspects of the statement. If people are being harassed, let’s make sure they know they have recourse. And let’s talk about it. Let’s not quietly assume that conferences are good places for everyone when they’re not.

Isn’t this an attack on free speech?

I have lots of feelings on this, but the short version is, “no; the opposite, actually”.

One: I do think there are valid intellectual freedom concerns, particularly since it’s impossible for a statement of this type to delineate permitted and forbidden conduct with absolute clarity. (I invite you to try sometime; it’s hard! We argued a lot about this in the drafting. Any bright-line rule you state will have situations where it is unambiguously wrong, and any attempt to be comprehensive will fail. A policy can do no more than state principles and provide guidance. That said, I do wish the statement had clearer language on the process of investigation and resolution, how far the discretion of conference services goes; I think due process safeguards are especially important when you can’t state absolute rules.)

Two: The statement is fundamentally about being a socially competent human being. There are lots of things that you and I think but don’t say, all the time, because we recognize that they would be inappropriate for the context we’re in. This isn’t an imposition on free speech; it’s a recognition that we live in contexts with other people, that our words affect them, and that it’s incumbent upon us to speak in ways that treat others with dignity and promote the kind of world we’d like to live in.

Three: I believe a statement of this type, on balance, promotes free speech.

Yes, it may discourage some people from saying some things of particular types.

But it also articulates, to everyone who might have felt marginalized or disenfranchised in this context, that their perspectives are welcome. It encourages whole classes of people to attend and to participate.

I had been active in code4lib for perhaps a year before they adopted their anti-harassment policy. And I did not realize until that point that I had spent the whole time looking over my shoulder waiting for the attack to come. Being a woman in tech is sufficiently dangerous that mere consistent decent behavior by the overwhelming majority of my colleagues was not enough to dispel the feelings of threat; I needed to actually see these values articulated and see prominent members of the community (including men) rise in defense of them. Now I feel like I’m not just someone who hangs out in code4lib – I’m a code4libber, and my voice matters as much as anyone’s.

I’ve never feel threatened at ALA, but I know that not all my colleagues feel comfortable there. And I am guessing there are many more people whose voices we never even hear. They matter to me, and I’d like to hear them.

Four: If you’ve never had a problem at a conference and you’ve never heard of people having a problem, I imagine this feels like it makes things worse: everything was fine, and now there are limits that there weren’t formerly.

But that is a big if. If you’ve previously experienced conferences as unsafe or unwelcoming — if your starting point is not “everything’s okay” — then an explicit statement that you are welcome and that you have recourse if threatened makes things better.

If you are feeling like the only implications of this are negative, I encourage you to seek out people who feel differently, and to listen generously to their experiences.

Does this mean ALA is now a nanny state?


ALA has neither the staffing nor the inclination to run around policing everything you say.

Does the statement allow for [action]?

Remember, I am not the definitive interpreter of ALA policy. I think if you’re wondering if [action] is legitimate, you should talk to the actual audience for that action. How do they react? Are they laughing at your funny joke, or laughing in that nervous way that people do when they don’t want to admit they’re uncomfortable? Do they say go for it, or call you out for proposing something dumb or tone-deaf? Do they seem okay with it except then you realize over time your audience has become more and more homogeneous because everyone unlike you is drifting away? Do they say, ohmygosh that rad, or, you know, I’m not okay with this because…

Me personally, I’ve rolled with it as a Battledecks speaker when an underwear slide came up (and I was damn funny, too). And I’ve been at a dinner with remarkably copious bourbon flights where one of my companions had to leave early to go to a burlesque show featuring bedazzled junk. And while I’m at it I can’t make social plans locally in late August because all my friends are at Burning Man. So me, personally? I am probably okay with anything you want to do, as long as the people with you are okay with it too.

So talk to them. Ask. And if you’re in public space and just anyone might wander by and so you can’t ask? Well. Think.

The statement has [problem].

It may well! I don’t think it’s perfect, and I doubt anyone involved in drafting or adopting it does, either.

I’m a startup technologist. I believe in getting the minimum viable product out there quickly. You can spend all the time you want adding and polishing bells and whistles, but fundamentally you don’t know what’s going to work until you put it out there in front of people and see how they react. So you make your MVP. And you see how it goes, and you iterate.

Here you go. That’s the google doc that was used to draft this thing; you can see the entire process. Anyone with the link (that means you!) can comment.

There are also traditional venues available to you, like ALA Council, or its executive board or conference services committee. (Remember, all ALA meetings are open.) So talk! (And don’t forget that ALA staff have to be able to actually implement the policy.)

#libtechgender: the dangers of a single story

Let me tell you some stories.

One of my favorite TED talks is this, Chimamanda Ngozi Adichie, “The danger of a single story”:

“The discovery of African literature saved me from having a single story of what books were,” she said — a single story that could be gripping and wonderfully written, that inspired her to be a writer, but also made it unthinkable that girls who looked like her and lived like her could exist in stories. (But watch the whole thing.)

One of the stories I’m following today is Andy Woodworth’s airing of grievances about where we should stop wasting our energies in libraryland, and Cecily Walker’s (excellent) follow-up post on intersectionality and the librarian image — quite rightly calling Andy to task for using language that implies librarians come from a single story, and therefore have a burden of proof on ourselves to prove competence when we depart from that story.

We are not, of course, one story. We are many stories, overlapping and crisscrossing through “librarianship”, but pulling a million threads in along the way, and pulling the threads of librarianship out into many places. Nor is stepping outside the expectations of a single story always a choice. I can’t choose to stay inside the dominant story of tech by being male; Cecily can’t choose to stay inside the dominant story of librarianship by being white. We never stepped outside. We just are.

Another of the stories I’ve been following (part of) for longer has been that of conference codes of conduct. In talking about them with ALA leadership these last six months I’ve found that the stories evoked by the term “code of conduct” vary quite a bit depending on the listener’s background. Those of us whose threads include the broader world of technology have a particular set of (deeply held, terribly important) stories we bring to the table, a context that people from other worlds lack and may find surprising; sometimes they have their own stories (often, in turn, surprising to me).

ALA is committed to telling the code of conduct story more widely, and hence has asked me to moderate a panel on #libtechgender issues. I’m still finalizing the panelists (not least pulling strings in hope that Cecily can be one of them) — but it’ll be Saturday at 4:30 in the convention center, room 201C.

One of my guiding principles in constructing this panel has been that talk above, the dangers of a single story. It would be so, so easy for me to assemble a libtechgender panel which gave the impression that there is only one story of gender in library technology, and it is the story of white, cis, straight, thirtysomething (-appearing) women (such as myself). So easy.

And I would turn down the request to moderate sooner than I would run such a panel. Because libtechgender is not a single story; it is many stories, overlapping and diverging and sometimes in conflict. I cannot conceivably fit all those stories in a panel of reasonable size or in an hour. I’m already struggling to hold all the moving parts together. I’m already frustrated that the whiter, straighter, cis-er, and thirtysomething-er my prospective panelists are, the more likely they are to say yes — to have availability, funding and release time or the ability at least to manufacture it (or, alternatively, less competition for their time from the million other people who would also like to hear their stories at a conference). But we can and will scratch the surface of more than one story. We’ll be messy and provocative and leave unresolved threads so you can repair to a bar (or blogosphere) and argue afterward. And we, and you, I hope, will resolutely take all those stories seriously — to recognize that even if they conflict with our own experiences or assumptions they ring true for someone — and to ask, what would the world look like if I took it to be this way? What would that imply about everything else?

Saturday, 4:30, convention center, 201C (scheduler link). I hope to see you there.

reflecting on Introduction to Python for Librarians

I’ve asked my students to reflect on their experience in my Introduction to Python Programming for Librarians class (now in its last week). I’m going to reflect on mine too, but I’ll do so publicly. 🙂

First off, the course sold out and had to turn people away. So I guess people really do want to learn this. Hooray! I felt like I could’ve done more to publicize it, but maybe that wouldn’t have a ton of ROI, considering.

And now for my torrent of categorized thoughts. (And then I want to hear yours, too!)

Boston Python Workshop and true beginners

The course is based on the intro to Python workshop at ALA, which in turn is based on the Boston Python Workshop, a one-day+evening sprint through Python fundamentals geared toward beginners. At ALA we covered the material in 7 hours, minus a break for lunch, plus time in advance for students to install Python and a text editor independently, so I used that to gauge how much to cover in the course.

And the thing is? That’s totally inaccurate.

In the one-shot version, students are often confused, but that’s not surprising because of the pace, and they generally accept that it’ll be intense and persevere through those feelings. Also, they have tons of help due to a great student-teacher ratio.

When you spread it out over a month, though…I think people expect to get to a place where they’re not confused. They have lots of time to think through the hard parts — which is great — but I think it means they also spend a lot of time confused (on which more later) and it’s harder to persevere, because they have different expectations about how things should feel.

I also think this has exposed how poorly these coverage goals work for true beginners. BPW has some wonderful beginner-friendly aspects to it (e.g. it’s good about identifying and defining jargon). But it takes a lot of time and practice to build mental models of these concepts, and the one-shot format (in which no one really expects to build those models) obscures how hard it is. You can frog-march people through a lot of exercises in a few hours, but that doesn’t mean you’ve got more than a cargo cult.

I expected to see a difference in how students with and without prior programming experience handled the course, but it’s a wider difference than I’d guessed, and not shaped like I expected.

I’ve started to think it’s not possible, outside of a truly intensive situation to cover enough material in four weeks to enable true beginners to program short scripts unsupported. So I’m turning over in my mind, what could one cover in that amount of time that would be useful? Going to have to mull that over for a while.

Feelings of confusion

Over the weekend, I came across this good essay on learning to code. It was tweeted with a pull quote about how you don’t have to fit the coder stereotype to be good at coding (I wholeheartedly agree), but the quote that stood out to me was this:

I’ve found that a big difference between new coders and experienced coders is faith: faith that things are going wrong for a logical and discoverable reason, faith that problems are fixable, faith that there is a way to accomplish the goal. The path from “not working” to “working” might not be obvious, but with patience you can usually find it.

Anyone who’s done much coding takes for granted that things will be really confusing (where am I, and why is this floor covered in yak hair and broken razors?). We get that, as you learn more code, you don’t actually spend less time confused — you just spend it confused about more abstract things, and with a bigger toolkit of better yak-razors.

But confusion is uncomfortable. And especially when you’re a beginner, the line between “this is confusing because it’s hard” and “this is confusing because I’m hopeless at it” is not clear (and yes, I did tell people explicitly about impostor syndrome). And I think some students have an expectation that things will become not confusing, that you do the exercises and at the end you are un-confused.

And it…doesn’t work that way. Maybe it never really did for any subject, but it’s a especially acute in programming. You get these total flashes of insight where it works and you feel like a genius and you’re standing atop a flaming wreckage of tracebacks totally triumphant, booyah…but you truly had to spend time climbing those tracebacks first.

I need to be way, way more explicit about this. How it’ll be confusing and that’s okay. How everyone who codes spends a lot of time confused, including experts, and confusion doesn’t mean you can’t do this stuff, or even that you don’t have a good grasp of it. How if you persevere you will get better tools, and you will find that the things that confuse you become more complex, at least. How some days, the best you can do is make code that reliably works and you don’t know why, but it works, and that’ll do.

Seriously, I still have no idea how some of the things I encountered in my first semester computer science class in college work. I literally emailed my professor about one of them just the other day. But I can also do lots of awesome stuff I couldn’t do when I was 17. It’s okay.

Be explicit about your nontraditional course formats!

A few students have indicated that they expected a more traditional course format – lectures and stuff.

I do not have those. I have lots of interactive reading (prompting them to do various things in the Python shell and asking questions about inputs, outputs, and expectations). I have sample scripts to read and modify. I have discussion forums, with questions that ask students to consider important functional elements of programs — trying to lead them to think like programmers, to identify the salient parts and reason about them.

And I have these on purpose. Regardless of people’s overall learning preference, everyone I know who’s learned how to code has done so in a hands-on way. I want them to get their hands dirty — to encounter actual errors, to be walked through how to recover from them in practice before encountering them in the wild. To test the differences between general ideas and pseudocode (which is what you’ll build in your head during a lecture) and actual running code, every step followed with blind literalism by a persnickety computer.

And the forums. And the fact that I sacrificed some coverage goals to ensure that everyone had a Python shell and a text editor, rather than looking for some online interactive shell. And the fact that I spelled out how you ask a good question, and what the canonical reference documents are. And the fact that the bibliography links to lots of online and face-to-face communities that do libtech and Python, and I’ve explicitly asked students to look into these.

Because — lone-wolf-in-the-basement stereotype be damned — code learning is social. We have this pipeline whereby you don’t get to the advanced parts if you couldn’t hack the lone-wolf gauntlet when you were ten, but in practice everyone I know who’s an advanced programmer has gotten there in part by working with other people. You collaborate on a codebase and you see someone else’s approaches to a problem, and they aren’t yours, and sometimes they’re better, and you learn. You shoulder-surf a colleague and see a tool you didn’t even know existed that makes some part of your workflow ten times faster. You get frustrated and ask a question and someone says, “did you try X?” And you hadn’t even known X existed and damned if it isn’t a revelation. You work together, and your strengths are this part of the codebase and theirs are that part, and suddenly you have something so complex it couldn’t fit in a single person’s head, and far better than either of you could have made alone.

Code-learning is social, and I want my students to be doing that early, so that when the class ends, when they’re on their own to take the material beyond the class, they are not, in point of fact, alone.

So. Reasons. I have them. But I need to be more explicit about them, because otherwise for some students it will feel like a violation of expectations.

Also I expect the class would benefit from some video of me thinking out loud about some of these problems, modeling a way to go about it.

Craft knowledge and non-beginners

So I had expected that beginners would get more out of this course, because the programming material is new to them, and non-beginners would be frustrated by some of the review and mostly be getting “oh, that way that PHP does a thing, Python spells it this way, cool”. Yeah. Totally wrong.

One of the things I have discovered, to my surprise, is how much I value craft knowledge. Like I said above, this stuff is social. The craft knowledge is all transmitted socially. And I’m being really explicit and intentional about surfacing it. I ask people to reflect on what a good comment looks like and why we do that. I talk about reusability and maintainability and modularity. I talk about it more than I expected to.

And I’m finding the non-beginners get a ton out of it. They have enough background that they don’t need to spend much time on if and for, and so they’re picking up on all these hooks about quality and style, and internalizing them.

That part is awesome.


Yeah, so I made some humiliating errors in my code samples. Which my students were clever enough to find and fix, but really, the educational benefit of that discussion was less than the educational detriment to others of stuff not working. Note to self: just because it’s a simple program doesn’t mean you get to skimp on testing. You are error-prone about details and always have been.

(Related note: every single class, you need to make a clean virtualenv and develop new scripts in it, so that you will discover what your students need to install. If you are developing outside of a virtualenv the program will not complain when it relies on a module you installed in 2011 and forgot about. And then your students will be confronted with yaks, and maybe not armed with razors.)

Encourage more discussion earlier

My students have been doing a more and more awesome job as the course goes on of helping one another. And this is great, not just because they’re helpful, but because they detail their thought processes, and they come up with solutions that are different from the ones I would have come up with (there are lots of right answers!). I’d like them to do more of that earlier, though, both because it’s great, and because as a practical matter I can’t provide sufficiently prompt and thorough feedback when I get a couple dozen emails per day from my class. (Not all of which require feedback, but some do.)

Will have to do some thinking to the architecture of forums. A lot of them are set so that you don’t see others’ posts until you post, because I want people to think about the answer independently, and because I’ve been a student posting the 10th nearly-identical answer on a forum where I can read everyone else’s content and it feels pretty pointless. At the same time, though, this format discourages discussion. I think I can get there with a more carefully crafted mix of open troubleshooting-and-discussion forums and more locked-down think-about-the-answer forums. (And then also be clearer about the visibility settings, and encourage people to at least skim their classmates’ answers, particularly if they were unsure of their own.)

Affective goals…?

I thought going into this that the hardest part of making the leap to an online forum would be preserving the outstanding affective quality of BPW. It’s so strong in creating a welcoming, inclusive culture, in naming impostor syndrome so it loses some of its hold over people, in having tons of help available. I feel like I should have a lot more thoughts about this at this point, and yet I don’t, and I’m not sure what’s up with that.


This is the part where I invite comment from my students, and from other code-teachers and online-teachers (and especially online-code-teachers). What do you think does and doesn’t work here? What should I keep? What should I change?