Apprenticeship Community

Ask-Me-Anything with Sarah Mei

March 10, 2015 5:00PM PDT to 6:00PM PDT

Sarah Mei took more than an hour of her time to answer questions from the Apprenticeship Community in our Slack channel.

Sarah Mei is a software engineer, consultant, and teacher from San Francisco. She co-founded RailsBridge, a nonprofit that teaches women programming using the web framework Ruby on Rails in two-day workshops. RailsBridge has led more than 150 events, reaching more than 3,000 women.

Mei works as chief consultant at DevMynd Software, where she spends most of her time working with clients’ developers, helping them build their skills.

She is also a director of Ruby Central, a nonprofit that runs the two largest Ruby conferences in the world: RubyConf and RailsConf.

The full AMA follows, lightly edited for punctuation and style.

What is your proudest professional accomplishment?

The thing I’m most proud of is probably my involvement in conferences, both speaking and organizing. I used to have incredible fear of speaking in public. Now I can emcee an event with very little preparation, which is awesome.

In general, I think conferences are the lifeblood of a technical community, and therefore I’m pretty motivated to make sure they get stronger and better over the years. My Github contribution graph is essentially blank, but I feel like the non-code conference contributions I make are probably more significant.

@kmanion: What helped you get over your fear of speaking in public?

It was a gradual process. I started by doing conference talks on topics that were very familiar and easy for me. I did non-technical topics at first (my first talk was on teaching Ruby to high school girls).

I gradually worked up to technical topics. For those I was mostly afraid of there being that one person who would stand up during Q&A and ask me a question that I didn’t know the answer to, or basically say, “You’re wrong and here’s why.”

I also did some talks at local meetups, where I’d definitely know people, before I tried conferences

If your company is open to it, a 5-minute lightning talk on something interesting at lunch one day is another way to get started amongst friends. Also talking about it with people often gives you ideas for longer talks.

How do you prepare for talks?

Time-wise, I budget about an hour of prep for each minute of talk. My approach is that I write out everything I’m going to say, as a monologue, imagining the slides I need, then I make the slides. It’s messier than it sounds because making the slides often inspires changes in the monologue, which necessitate changes in the slides … and so on

Day-of, I go over the talk once in the morning, giving it to my empty hotel room.Then I try to go and be present at the event as much as I can before my talk.

@aresnick: I often find myself working on developing the technical skills of young women (middle and high school) and adults. In those contexts when we’re developing technical skills, my experience is that the biggest obstacles are rarely technical, but often a matter of internalized ideas about “I’m not a {math, computer, smart} person.” Could you share a bit about your sense of the landscape of the common obstacles you see in contexts like RailsBridge?

The myth we’ve constructed that you have to be really, really into math to be a good programmer is a) not true and b) the biggest obstacle I see to opening this field up more widely. I have found that people who are good with language, especially multilingual people, often are fantastic programmers.

Often if they’re the younger generation of a family of immigrants, they are used to translating things between languages. And it’s not such a stretch to think about programming as translating concepts into computer speak

@aresnick: Do you find yourself attempting to confront those myths head-on? And if so, is that effective? What’s your experience of some of the most effective ingredients in deconstructing that myth?

I do talk about that directly in the class I teach for high schoolers. Because the students often are exactly that, the younger generation from immigrant families. When I’m teaching RailsBridge, I often try to find what they’re doing now that is programmer-like, and point it out.

For example, I once had a paralegal in one of my classes. The law is really just application of rulesets, the same way that programming is. Some people make ridiculously complicated excel macros but don’t think of it as programming.

I do think it’s effective to try and draw parallels between what folks are doing now, and different aspects of programming.

@ltrainpr: How do you approach learning new programming languages or tools? How do you choose what to learn?

Well, for learning new languages/tools, I’ll have to admit that I don’t do it very often. When I do, it’s usually because someone I’m working with is excited about it and they can show it to me. I don’t get a lot out of solo studying. I learn better when I’m talking to other people.

That’s also how I got involved in all the open source I’ve ever written – because someone paired with me on it. I suspect if we as a community found a way to put less emphasis on self-study and more emphasis on communication we’d get a more diverse contributor base.

You’ve spent a large part of your career as a consultant (Pivotal, your own consultancy, now DevMynd) what do you like about consulting compared to working as an employee on a product or project?

I have a fairly short attention span for projects. I learn a lot when I first roll on to a project – I meet a bunch of new people, I see a lot of new approaches and opinions, but once I’ve been on a project for a while that learning slows down and I start getting antsy.

So the best thing about consulting for me is that projects are like 6 months max, so I’m constantly getting that rush of new information.

Earlier in my career, when I worked at product companies, I thought something was wrong with me that I couldn’t stick on a project for longer than 6 months. Usually I’d get to a company, and then 6 months in start wondering when I could leave (because people tell you you have to stay for a year).

Consulting is a way for me to work with that tendency, rather than against it.

Also you totally don’t have to stay for a year by the way. That is a fiction told by HR departments who just get annoyed that they have to keep hiring all the time. The average tenure at a programming job in SF is somewhere around a year. It’s an absurd market to be in, in many ways.

Tying that back in to apprenticeship, do you see a longer tenure for people who went through a formal apprenticeship program, either at Pivotal or at DevMynd?

DevMynd is a bit separate because they’re based in Chicago, which has a more stable market in general.

2-3 years is not uncommon there, and some folks have been there what seems to me like aaaaages, like 4 years

The longest I’ve ever stayed at a job was about 4 years, and that was Pivotal.The apprenticeship definitely does move the average a bit. Which is good, because it’s a longer ramp-up period, particularly for consulting.

@aresnick: Are there common pitfalls or anti-patterns you see in folks who’re just striking out in software engineering consulting?

The biggest problem I see is usually not technical – it’s client management. You don’t have to learn how to do that (as much) in a product job.

By client management I mean staying visible to the customer, helping them figure out what they want to build (which is never what they say they want to build), and making sure they know where you are on the timeline at all times.

It’s really easy to just go heads-down on code and feel really productive but end up building the wrong thing. This comes back to the myth of “the zone” when programming.

@merc: You mentioned having a 6-month attention span for projects - other than consulting, are there things you do to help motivate you when feeling unmotivated or stuck on projects?

That’s a dangerous point for me, because it’s there that I might decide to try a new technology just to inject some novelty into the project. And the project might not exactly “need” said new technology.### If it’s open source or something volunteer-ish, I will often just take a break from working on it.

Identifying what I’m learning on a particular project helps. I’ve had projects where I really had to search for what I was learning.

On one particularly bad one, I decided that what I was learning was “how to deal with difficult people.” And weirdly enough that actually did help, because it gave me the sense that there was a purpose to all the terribleness.

@kmanion: What do you enjoy about teaching?

Teaching helps me recapture some of the beginner’s mindset that I have lost. That, over time, gives me a stronger grasp on fundamentals.

For example at the first RailsBridge, I was talking about variables for a few minutes, and then I realized that many of the folks in the room didn’t know what a variable was. Explaining to someone what a variable is sounds weird, but it’s a concept that I had internalized many years earlier, and I didn’t realize I needed to explain it. But having to do so gave me a much better grasp on what a variable actually is.

I also sort of like the challenge of trying to connect with all the different people in the class. Small classes are great for this. Not everyone is motivated the same way, or learns the same way.

I think I would hate traditional school teaching, though, because the best thing about teaching programming is that I don’t have to stick to the script, and I don’t have to finish the curriculum. We can go in whatever direction people are enjoying. And/or, spend an entire day on the first exercise if people are really getting a lot out of it.

A shortcut to teaching that I did for a while was to answer stack overflow questions. People would ask basic Ruby stuff and I would research and post an answer.

@eruditelijah: To me, coding is boring, or at least not nearly as visually interesting as I thought it would be. This often impacts how I learn and my ability to teach code to my siblings (and other folks). How would you suggest making it more engaging and intuitive?

I think one of the reasons I’ve been drawn to web development is that it is (or can be) very visual. You make a change, you refresh the page, you see it right away.

For my high schooler classes, I’ve been using shoes, which is a windowing toolkit for Ruby, and we make a paint program. All of the code makes something happen on the screen. I think that link is key to keeping their attention.

We used to teach a more traditional ‘programming’ class in which we made some command-line programs, but for a lot of people, that just isn’t compelling.

I am also not particularly motivated by code for code’s sake; I am motivated by what I can do with it. So keeping that in mind helps me when I’m not doing visual-change-style programming. For me coding is more like the thing I have to do in order to make something useful.

And over time, as I learned tools and migrated away from C/Java towards higher-level languages like Ruby, it got less rote/boilerplate, I started to understand all the error messages, and I could focus more on what to me is the interesting part of a project.

@eruditelijah: What can Ruby do? I am a complete novice in all of this, and I have a hard time explaining (or even understanding) exactly what Ruby is for in everyday terms. When I learned HTML and CSS I could show people easily … but Ruby is something different.

Ah, interesting question. Ruby is mostly used for web app development, like if you have a form in HTML and you want to store those values somewhere on a server. Server meaning something centralized, so everybody’s browser is storing their info in the same location even if the browsers are on different machines. The advantage of that is that the user can go to a completely different computer (or to their phone, etc.) and access the same data, because it was stored somewhere central.

Sarah Mei has generously asked us to donate her portion of this month’s revenue to Liberating Ourselves Locally, a people-of-color-led, gender-diverse, queer and trans inclusive hacker/maker space in East Oakland.

Add To Your Calendar