Wednesday, December 23, 2015

Combining coding and teaching into a career

 I had a chat yesterday with a college junior who’s facing a conundrum: she realizes she loves computer science and teaching, and she’s not sure how she should combine those into a career. I both hope and think that there are many others thinking about that, so I thought I’d share my thoughts here.

First, let me go into the ways that I’ve personally managed to combine coding and teaching in my decade-long career.

Combo #1: Developer relations

Don’t know what that is? Most people don’t, and I definitely didn’t know what it was in college.  It’s a job where you spend your time helping third party developers understand how to use your company’s API - like by writing documentation, making demos, giving talks, and answering forum questions.

I struggled in my senior year of college with trying to find a job that appealed to my mix of interests, but when I happened upon a description of that role, it sounded like a perfect fit. And it was pretty damn cool. I spent nearly half a decade at Google, helping developers with the Google Maps API, Google Wave API, and other fun APIs like spreadsheets, gadgets, and even a 3d chat client.

Photo of Pamela speaking about Google Maps API
Giving a talk on sweet ways to visualize data with the Google Maps API

In what ways wasn’t the role perfect for me? Well, I didn’t love that I was spending my time promoting proprietary technologies. I wanted to give talks about open-source technologies and not feel limited to just Google’s. I also missed having in-the-flesh students, like I’d had as a TA in college. That was when I started a GirlDevelopIt chapter, which helped me with that need. (Tip: a job doesn’t always have to fill all your needs).

Combo #2: Engineering in EdTech

After Google, my next job was as one of the first frontend engineers at Coursera, a MOOC company. I treated it very much as an experiment, because I didn’t know if I’d enjoy a job were coding was my role 24/7 (or 30/7, since it was a startup).

As it turns out, it was a lot of fun. I really loved working on features to improve the learning experience for students, like better forums and clearer grading policies. I also loved working with professors and hearing their ideas for more engaging courses.

Screenshot of pages
Some of the student-facing features I coded in my year at Coursera

I was definitely missing teaching though. I got a bit of my urges out in a few ways: by giving talks about the technologies I used at Coursera (like Backbone, a hot topic then), by writing blog posts and documentation, by delivering internal trainings, and by continuing to teach GirlDevelopIt workshops.

I eventually got too jealous of the professors that I was working with: I didn’t want to just help them get their courses online, I wanted to try putting courses online myself. It just seemed so damn fun!

Combo #3: Teaching Online

That’s when I started eyeing Khan Academy. They didn’t actually have a job listed on the careers site for teaching coding, but that didn’t stop me (and shouldn’t stop you, either). I emailed them with a proposal of what my job role would be, went through a custom interview process that was 50% coding and 50% content creation, and began my job a few weeks after.

For the past few years, I’ve spent my time at KA creating courses and coding the platform that delivers those courses. Oh, plus my favorite part: interacting online with our community of creative coders, ages 7–70.

Screenshot of Khan Academy coding course webpages
The talk-throughs, challenges, and random programs that I make while teaching for Khan Academy

I still give workshops on the side, for GirlDevelopIt, CoderDojo, and GirlsWhoCode, but now I get to use my KA curriculum to power those workshops — so my full-time job and my on-the-side teaching gigs are very well aligned. I learn a lot from using my online content in physical settings, so I even consider those workshops to be a part of my job.

So, is there anything missing? As it turns out, yes. I still miss being inside a classroom with students that I see every day over a long period of time. I got close to that when I taught for GirlsWhoCode, but a 60 minute weekly club isn’t enough time to really get to know the students.

I’m going to look into opportunities for a more classroom-like teaching experience in 2016 - perhaps camps that are many weeks long and all day, or a class that’s several days a week with dedicated students.

What did I learn?

Okay, so I’m not there yet — I haven’t figured out exactly the combination of coding and teaching that I like. And in fact, I haven’t even talked about my attempts to integrate other hobbies - like art, writing, and myriad forms of creativity. But I’m getting closer. Here are a few tips to help you get closer:

  • Reflect on what you like and don’t like. Whenever you try on a new role or hobby, observe what makes you happiest about it, and what makes you saddest, and why. Build up a list so you can remember it for future decision.
  • Don’t feel tied down to a decision. It’s okay to take a wrong turn, like picking a job that you end up not liking as much. If you have a CS background and a good portfolio of your skills, you should probably be able to change jobs more easily than most. In this industry, it’s normal for folks to change jobs every few years, so future employers likely won’t look down on you for that. And you don’t need to regret the job - you can just think “well, the point of that job was to help me see what I don’t like” and thank the job for serving that purpose.
  • Don’t feel limited by the jobs that are listed. You can make up your own! My colleague calls this “job crafting.” Companies are good at listing the standard jobs that similar companies have, but there might be a job role they don’t have listed that they’d actually benefit hugely from. Write up a proposal of what that job role would entail and why you’d fit it well, and send it over to them. They might decline, but they might also say yes. Either way, you will have a better understanding of what you’re looking for in a job role.
  • Negotiate for your needs, whatever they are. A lot of times, when people talk about negotiating, they talk about negotiating salary and benefits. However, you can also negotiate for other needs that are important to you. For example, maybe it’s important that you’re able to spend one month every summer at a camp, or one day a week teaching. Tell your potential employer that, and see if you can put that in your employment agreement. It might mean less pay, but maybe that’s okay with you. Or maybe the employer will be willing to consider it a valiant work of charity. You won’t know until you ask.

What are all the options for combining coding and teaching?

I’ve only been out in the job market for 10 years, so I have not done an exhaustive search of all the many possible ways to combine coding and teaching. To recap, here’s what I tried:

  • Developer relations. There an increasing number of API companies out there looking for people to help them teach their APIs. See the APIStrat proceedings or browse ProgrammableWeb for ideas. Also check out my Developer Support Handbook for a better understanding of the role.
  • Engineering in EdTech: If you like teaching, you’ll likely enjoy thinking about creating online educational experiences. Check out EdSurge jobs board to see which EdTech companies are looking.
  • Teaching online: Anyone can create content on sites like Youtube, Udemy, or Lynda. You can also apply to be a creator at companies like TreeHouseCodeSchool, and Codecademy.

Here are other ways you might try:

  • Starting a CS education company. Jeremy Keeshin loved TAing at Stanford CS classes, so he co-founded CodeHS. Now he gets to spend some time touring classrooms to have them try out CodeHS while spending the rest running and coding CodeHS.
  • Doing CS education research. Colleen Lewis and Shuchi Grover are two women doing that today. You can get a much longer list by checking the proceedings of conferences like SIGCSE and ISTE. Some researchers teach themselves, like Colleen, others may just do a lot of observation.
  • Teaching at bootcamps. My friend Liz teaches at Galvanize, where she also gets to spend some time on content creation. My other friend Bianca started Telegraph Academy, a bootcamp for minority students. They don’t get to spend a ton of time on coding their own things, but they spend a lot of time helping students with projects.
  • Teaching in traditional schools. An increasing number of K-12 schools are looking to integrate CS into their curriculum, so I expect to see a spike in CS teacher job listings in the coming years. CS is also a popular major at many colleges. Teaching jobs likely won’t pay as much as other jobs, due to the sad state of teaching budgets, but they might be the most satisfying, depending what you’re looking for. (Update: I tried this myself, years after writing this post, and ended up leaving largely for salary reasons. Read my post for more details.)
  • Running internal training classes. Big companies have so many engineers that they often have their own internal trainers to help get those engineers up to speed with the technology they use. You might enjoy that if you like teaching professional topics to adult audiences.
  • Teaching on the side. There are a ton of clubs and organizations dedicated to teaching coding — global ones like GirlDevelopItCoderDojo, and GirlsWhoCode — and there are probably local groups near you like MissionBit in SF and ScriptEd in NY. There’s also the TEALS program, where software engineers can teach an AP CS class in an actual classroom for a semester. You might also enjoy tutoring a local student or wannabe-programmer.

I hope that helps y’all in your search for the role that will fit your needs and desires best. If a job is the best fit for you, it’s probably the best thing for the world for you to have that job, too. Good luck!

No comments: