Some thoughts on starting your Recurse Center batch

This morning, our Fall 1 batch joined us, and us Summer 2s were invited to share a piece of advice. I have been thinking about this for about six weeks, and there are a number of things that have felt important to my own path here. I shall now attempt to enumerate some of them.

There is an incomprehensible amount of freedom here. Maybe this is familiar to you, in which case enjoy!

But maybe you’re like me, and this is new and weird. That’s okay. You will spend a lot of time here doing programming-related things, and it’s okay if some of the rest of your time is spent exploring what it means to choose your own path. Does it feel scary and overwhelming? Also okay. This is one of the best places you will ever find to struggle. You will get stuck a lot as a programmer, and that’s not a reason to stop working at it; it’s just part of the process. You’re not alone, and there’s help all around you, if you want it.

Seek out what excites you, and chase it. It does not matter whether it would excite someone else.

Ignore what bores you. You will rarely have the opportunity to do this in life, and it supports the above.

Take time to take care of yourself. Some of the things this has meant for me:

  • Take a walk.
  • Do something tiny you can succeed at (I still go back to Codingbat sometimes for little quick wins).
  • Remember to drink water.
  • Remember to eat food.
  • Take a nap in the library nook, or in Church (the room, not the institution).
  • If you have a terrible awful night of sleep and Cannot Even, it is okay to go back to bed, even if you usually hate to do so. Being here on no sleep won’t be very productive anyway.
  • Ask for help when you’re stuck. This includes, but is not limited to, code and feelings. (Don’t mind sad stories? Ask me about the time I sauntered up to Tom and Mary and said, “soooo, who wants to talk about grief and creativity?” It was the exact right thing to do.)

Write a little every day about what you’re doing. You will be amazed at what you got done while you didn’t think you were “doing anything.” Write it in a little notebook (you can get a cool one for cheap right downstairs at Muji!), write it on a blog, write it in a text file on your computer, write it in emails to a friend or parent or yourself…a little goes a long way.

Jeff suggested writing down what you did, what you learned, and what questions you have each day, and I’m thinking I’ll adopt the same scheme for my own notes from here on out.

Plus, it’s really handy when someone (including you!) says, “so, uh, what have you been working on?” A coworker caught up on a month+ worth of my news without me having to say anything extra, and it felt terrific.

To the best of your ability, do not compare yourself to other people here (I struggle with this one constantly). There are people who are more experienced and people who know more than you, even if you are used to being one of The Smart Kids. But guess what? You are one of these people, too, and you have things to offer and share. It’s okay if it takes a while to figure out what these things are. Be open to the possibility that you are awesome.

You have twelve weeks. Do you want to do something big and impossible-seeming? Maybe you really want to work through a particular book or project. If you do a little every day (or even most days), you can get through all kinds of massive things. A couple of the summer 1s, April & Caroline, read the whole Learning Python book while here, one morning hour at a time. That thing is a beast! I’m so impressed (and inspired!) by their tenacity and commitment.


And of course, this: all advice is autobiographical. If someone gives you advice that doesn’t seem relevant to you, throw it out for yourself.

Building a LEGO model is like learning programming

Last night, I finally started putting together my LEGO birds set. I mentioned this in a Recurse Center post recently, and now I have put together the robin (a proper one, as one finds in Europe, not the North American one, which Nathan taught me was so named because of its superficially similar appearance, and it turns out the similarities end there). Two more birds to go.

Also, it’s awesome. Check it out! You can also enjoyed horse-tailed desert-ponytail mustachioed person, who is hanging out on the robin’s tail! (What’s the fun of awesome minifigures if you don’t mix them up in ways not originally intended?)

And then I opened my mouth and said this:

And it turned out that people were curious about this thing I find fascinating.


As I was putting together this first model last night, the first of my adult life, but also the first LEGO kit I have ever built in my whole life (although we had a big bucket of LEGO as kids; my brother and I fought over them regularly), the following kinds of thoughts kept occurring to me:

  • I should be learning more about how these pieces fit together. There are techniques I could use later.
  • Something isn’t quite right. Oh crap; did I just forget a piece? I did. Time to take another look and check my work.
  • I’m just copying what someone else has already made, but it feels like I am building something myself?
  • I can’t possibly learn all of these methods tonight. I don’t even remember what I did two pages ago.
  • I am definitely missing a necessary piece. I’m completely blocked. Oh no, wait, it’s right there.
  • I don’t know how to make a bird. I only know how to snap two pieces together at once.
  • Holy crap; I built a bird?

All of the italicized ones above are thoughts I have had while learning to program, too (especially at the Recurse Center, where it is cool to understand why and how things work, not just that they work). Some of them are a little more metaphorical when we bring them back to programming (I have yet to build a literal bird in code), but they’re still true, and this occurred to me by the time I was building the bird’s invisible innards.

What’s interesting is I felt very sure about the fact that I was building something myself, and that when it was done, I would feel confident saying, “hey, yeah, I made this thing!”

I often don’t have this feeling with programming (at least, not yet). When I build something, it’s because I’ve taken someone else’s instructions and made more or less the same thing (lately).

I’ve done a bunch of awesome tutorials lately (I built a Pebble Time watchface that tells the weather! I set up a Twilio number that I can text! I set up a Heroku app, and now the Twilio number talks to it!). But I still have this nagging suspicion that I’m cheating somehow, because I didn’t greenfield them.

The analogy is easy, though: this is essentially the same experience with a LEGO kit.

I’ve been ruminating on why it’s so hard to take the LEGO lessons and let myself feel more accomplished with what I’ve built in Python (and C/JavaScript) so far. Perhaps because it’s not a physical thing, because it feels like something that I could have sloppily copied without any input of my own, it’s hard to take ownership.

But LEGO? I touched every one of those pieces, and I made them work together, and it did not end in a maelstrom of suffering.

And I know that I made something.

Now to figure out how to replicate that feeling with computers.

Recurse Center: week 6, day 5

Came in on my second Friday and am using it to make myself feel accomplished about this week. (So far, it’s mostly been feeling feelings.)

Took a while to get started, but my tiny “hello world”ish app is still working, and I modified it to send an image as well, and it feels sort of impossible to have created something that does this. And then I got it to message me back with my name by telling it my phone number first, and then I fell down the rabbit hole of “why do my git commits without -m open in Sublime, instead of in vim, which I’ve been practicing lately?”

And so I have changed my global git config to open vim, instead of Sublime, for commits that didn’t have the message specified inline (e.g. `git commit -m “mega cool commit message`). Fun! `git config –global core.editor “vim”` does the trick.

Why did I need to do this? Because it’s very important that I make my commits blink, because Ann is my code twin and is an inspiration in terms of “you can learn a lot by doing things for giggles.”


Finally properly participated in RC Crafternoon, with a fresh friendship bracelet kit (seriously!) from Purl Soho down the street (thanks for the recommendation, Rachel!). I started AND finished a bracelet in RC colors. What! I don’t tend to think of myself as a person who finishes things, and yet here we are:

Went for a walk with Tim to accomplish Secret Mission Things, and came back to tie up my loose ends for the day and get ready for RC karaoke. I’m super excited about this, and not only because it means I get to do karaoke with 1) people I like, 2) not drunk randos, 3) any song that can be found on the internet.


Recurse Center: week 6, day 4

I didn’t actually write a word on this day. But I bet I can still remember the salient parts!

I went out with coffee check-in group, and got back and had “bagel conversation time,” which now reliably follows coffee check-in group for me. This means my “do computer things” days start a little bit later, but also I feel more ready to start.

During this particular morning’s conversation, aside from rambling on and on about a lot of OPINIONS I HAVE ABOUT WORK AND CULTURE AND AGHHHH, I also mentioned that I was pretty awesomely stuck with a Heroku issue. Steven kindly offered to pair with me (after patiently listening to me ramble), and so we had a totally unscary time working through what was going on.

With the previous day’s Heroku errors long since resolved, we were free to figure out what was wrong on this end. Got lots of `gunicorn.errors.HaltServer: <HaltServer ‘Worker failed to boot.’ 3>` (me: “computer, that is not the way we write a heart <3”), which was interesting, because I didn’t think I had a worker. 

It was also interesting, because `pip install gunicorn` actually, uh, installed things. In retrospect, this all seems terribly obvious, which is probably because we talked about the error afterwards, and how to catch it faster next time (or prevent it entirely!).

Things then worked just fine locally, with `heroku local`, but NOT on my actual Heroku app.

Long story short, installing gunicorn locally (in my virtualenv) but NOT adding it to my requirements.txt file (of the packages needed) made this happen.

Steven finally asked me to try `pip freeze` (which prints out all the currently installed packages, and their versions), followed by requirements.txt, and lo and behold, they were one letter different.

`pip freeze > requirements.txt`, a new push to Heroku, and voilà! A test app is born!!

It lives here, in my least-favorite of the three random names Heroku’s given me so far, and is prone to be changing swiftly, but hey! It works! Something is there!

I then could not manage to get a single computer thing done for the rest of the day. Some days are like that, though, right?


The afternoon had early Thursday presentations, followed by Not Graduation for the Summer 1 batch.


Mostly, this involved each of them getting a printed envelope full of nice things people here said about them, a t-shirt, and a request to please return their keys now, which frankly sounds way better than actual graduations. Someone had collected some niceties about the faculty here, too, and the summer 1s were going to read some out, but then decided to make a markov chain app so we could, you know, simultaneously read all the compliments at once. Just. Mixed up. It’s amazing.

I can’t believe they’ve actually finished their batch. The Fall 1s are so close to being here now!

The lot of us (mostly) headed to Brooklyn Bridge Park for a snack-y picnic, lots of hugs, spontaneous nail polish (which I instigated), and five thousand mosquitoes. (I counted 12 bites this morning and probably missed some.)

I’m sad that they’re all heading to their next adventures, and that I now have even more friends who are far away, but this ALSO means I have friends in more places now.

Recurse Center: week 6, day 3

Did not have a productive morning, but did have good conversations! Also had delicious food from Jess, who appears to have become my food fairy this week. She brought lentil taco fixin’s on Monday, some gingerlicious garlicky shredded beet salad yesterday, and herb-crusted tofu + pesto + avocado sandwiches today, plus cupcakes. The latter was the result of me stating that most of the grief symptoms were mellowing, and my feelings were starting to have shapes again, except I kept not being hungry and/or forgetting to eat — so she asked me what I liked to eat. And you know, I still love good sandwiches.

Went out with walkgroup, partly because walks are good, and partly because April’s leaving a little early (today!  🙁 ), and we quested in the streets of SoHo with a GIGANTIC RC contingent, and it was amazing.

Came back and continued grinding on my Twilio/Heroku tutorials. The Twilio tutorial is so rad, and then you get to this point:

At this point in the tutorial, you will need to find a way to expose your server to the public Internet.

Here are some tutorials that may be able to help you:


For the rest of the tutorial, we will assume your server is available at

Which, to me, sounds like, “I know you came here to learn things by having them explained, and that’s been going really well, but I was thinking you could just, like, go do a internet at yourself if that’s cool. kbye.” (Me: “no, I’m not sure that is cool, but let’s find out.”)

I am sure that if you are a 1337 web h4x0r type person, this all sounds awesome and simple, but also probably you are not following along with a beginner’s tutorial. This plunged me into the glorious deep end of Heroku resources, and spinning up dynos (what even is? not yet totally sure, despite reading about them), and I have a bunch of tiny apps locally and on Heroku that do tiny little things, and it’s kind of neat. The challenge is just how to blend them together.

As a side note, Heroku and Twilio also have different guidance about how to create a new virtualenv, so that’s interesting.

Heroku suggests `virtualenv venv` for the initial setup, and then `source venv/bin/activate` to start things up each time.

Twilio, meanwhile, suggests `virtualenv –no-site-packages .` for the first part, and then `source bin/activate` thereafter.

Who is right, in this battle of style? One of them is easier to set up, from my perspective, and one of them is easier to run each time you’re working.

Finally, I had both an independently successful Twilio test app, plus an independently successful Heroku app, and put them together…and a spectacular fire resulted.

I persisted for a while, and eventually ran into this:

$ heroku logs --source app
 !    Internal server error.
 !    Run `heroku status` to check for known platform issues.
$ heroku status
Installing plugin heroku-status... done
=== Heroku Status
Production:   No known issues at this time. 
Development:  No known issues at this time.

Doubting that this was right, I ran it again:

$ heroku status
=== Heroku Status
Production:   Yellow 
Development:  Yellow 

=== Potential API Issues 8:59:15 PM UTC (
[Investigating] 8:59:15 PM UTC (less than a minute ago) 
Our automated systems have detected potential issues with the API.  We are investigating.

Updates were swift and helpful, but once we hit this one:

Until this API issue has been resolved, you will be unable to log into your Heroku account and unable to contact support.

I gently flipped the table and decided that was a good signal to head out to the LEGO store to meet up with Ann and Steven.

Beyond “time spent with Ann and Steven,” here are two more reasons this was awesome:

8:36pm: today I finally got to go to the LEGO store with @anyharder & I got some mystery minifigs & omg unicorn & science woman

I also picked up the positively gorgeous LEGO birds set, which was one of those “vote on the things online and then maybe we’ll make it into a thing” projects (LEGO Ideas). This might be the first actual “make some particular things” LEGO set I have ever owned. Not just as an adult — ever. (For the purposes of this sweeping statement, we are ignoring the giant box of assorted plain LEGO I bought myself as a college freshman, and also the rad Klutz book with a packet of awesome parts, because those didn’t build A Thing.)


As a side note, you may remember another LEGO Ideas set, the Research Institute, which featured a bunch of women casually doing science, but which now has a note about how it “was overwhelmingly popular and is no longer available for purchase.” Do the LEGO people not understand how capitalism works? You can continue to sell popular things in exchange for money.

Outside of LEGO adventures, this week is full of feelings, because the summer 1s continue to have ever-decreasing amounts of RC time left before they Never Graduate. FEELINGS.


Spoiler alert: Thursday I get Twilio + Heroku = <3, with excellent help and encouragement from Steven.

Recurse Center: week 6, day 2

Coffee check-in group was the check-in-iest it’s been since I started going to it, which was super fun. It also means I spend a bunch of dollars, but then I have coffee and a delicious bagel, so hey.

Ann and I started speccing out Red Flag, which she’d told me about this weekend. We’re going to try to implement a command-line period tracker this week, before she heads back to SF. I’m psyched about this.

I also resolved some exciting environment variable problems (I know enough to know I don’t want my API keys anywhere in my git history!). Got some help from Rob, who I keep describing as “my unofficial mentor,” and I was right that he had the quickest route to an answer (since I knew we’d walked through this months ago, and I had the credentials for another service to prove it — I just didn’t know how to USE those).

For the curious, I set my Twilio creds up in their own directory and was using `chpst -e ~/twilio/ python`, then moved them over to my .bashrc file to minimize having to do that EVERY TIME I ran something.

Continued working through the Heroku Python tutorial. Spent way too long in a gruesome battle with some gnarly errors that appeared to be maybe psycopg2, maybe something with gcc, maybe god knows what oh goodness why are there eight lines of red text, and finally found that some benevolent individual had 1) encountered this problem, 2) found the solution, 3) blogged about it. Not before baffling Mary the facilitator here, but I learned some small things about virtualenv, too, and made a terrific mess that I think I mostly undid. If not, it’ll be a new thing to learn later.

This is when I write badly about how other people’s clear writing helped me tremendously. Anyway. I was grateful. I will endeavor to become one of these people in the future.

Got home kind of late, and tried to write some nice parting words for the Summer 1 batch (their last day is Thursday, and then a new batch will start on Monday, and we’ll share the second half of our batch with them). Everyone’s invited to share some compliments with them directly, whether anonymously or attributed, and I really wanted to write whatever I could, and I was hoping I could get it done kinda quickly. Turns out writing articulate feelings is just always hard, and I haven’t practiced it in a few months, really.

I also described my gnarly exciting problems to Nathan, who happily jumped in to help — the “apparently it was this one line in my .bashrc file” problem was followed by a new one, wherein this `foreman start web` thing gave me the following error:

rbenv: foreman: command not found

The `foreman' command exists in these Ruby versions:

Reasons why this is exciting: I haven’t touched rbenv in probably a couple + years, and also I am not doing anything directly with Ruby right now, and also this is the page RIGHT after the one I got stuck on earlier.

Ran `ruby –version`, and it turns out I’ve got ruby 2.0.0p247. Sigh.

Nathan told me that there is some python tool that was inspired by rbenv, and he’s familiar with the python version, so on a hunch, he had me try `rbenv shell 1.9.3-p125`. Tried the foreman command again, and lo and behold, it worked!!

That sets the ruby version, but only for that particular shell session, and since I know I’m likely to open this in another shell at some point, I’ve now set it for the directory as a whole with `rbenv local 1.9.3-p125`. Neat!

Maybe now I can get through this Heroku tutorial…

Recurse Center: week 6, day 1


The other part of this is “what do you mean, it’s the last week with the Summer 1 batch?” The Fall 1 batch gets here next week (!), and I know I am going to like them, too, but I don’t know them yet, so it feels very abstract for now. I know a number of the Summer 1s, and so I know that I am going to miss them.

Made it in in time for a little bit of morning sitting group today, which was a nice return to routine. After being there every day for the first few weeks, it’d been almost two weeks since I participated.

Continued with coffee-walk check-in group today, and continued the pattern of “learn more about what fewer people are up to,” which is a fun change of pace (not necessarily better or worse than the more traditional check-ins).

Was planning to pair with Ann in the morning, except she didn’t make it in, so went back to my bud Codingbat and worked through some more exercises. It’s weirdly satisfying to just drill basics; they come to mind quicker and quicker with a bit of practice.

Ran with an idea I’ve been meaning to run with, and started trying to reimplement one of Ann’s Ruby projects in Python. This means learning how to do things with Twilio! I’m kind of excited. I made my computer text me. Next up: not sure yet! But I feel like I’ve found my path into the weeds for now.

Recurse Center: week 5, day 5

Came in “late” and felt like I was getting away with something. It is terrifically difficult to feel rebellious at Recurse Center, so I suppose that it’s fortunate I don’t tend to go for rebellion. I mean, how are you supposed to rebel against “do whatever feels worthwhile and meaningful and enjoyable for you”? Do something you hate? Ha!

Fridays are optional at RC, which means I hadn’t yet been to one. I had every intention of coming in last Friday, until I got news of Nóirín’s death, and then it turns out that I didn’t feel like doing much of anything for a while. But this Friday? This felt like something doable, especially since it could be whatever I wanted to make it.

Forgot that there was a job fair in the evening, so decided to carpe diem and stick around. Turns out a friend on the Etsy data team had mentioned me to her coworker, who found me and introduced himself (!), which made me feel that feeling that is Other People Probably Think I Am Smarter Than I Do. Ann insisted on introducing me to Stripe people, too (read: Jack), because Stripe also seems to have this serious mutual-fanclub thing going on (Jack: “Ann is awesome!” Ann: “Jack is awesome!”), and it’s really encouraging to see.

Didn’t get very much “done” (at least not that I can remember now, on Monday), but had a really emotionally rad day, so cheers to that.

Recurse Center: week 5, day 4 (kinda)

The day kind of floated by today, but I did a bunch of little Codingbat exercises, and had a nice check-in with Tom about what I’d been looking at.

Ended up in a super distractible state towards the end of the evening, and had forgotten that presentations would start at 17:30, so accidentally cut myself out of some extra time, but I worked through little logic puzzles and I completed them and there are a BUNCH of alums in the space today. There are some I’ve met previously (hi Rachel!) and some I’ve only heard really good things about (hi Nat!), and it’s fun to get their perspectives on RC, being a little or a lot never-graduated (the Recurse Center motto is “never graduate”).

Thinking I’ll actually come in tomorrow (Fridays are optional, I haven’t been to one yet, and I’d meant to go last Friday until the bad news came), and considering I’m wrapping up this wee post on Friday, at RC, I suppose I succeeded at that!

Recurse Center: week n+1 (5?), day n+1 (3?)

It’s weird and good to be back at RC. My friend is still gone, and they’d understand that grief is a curious beast, but they’d also be quite disappointed if I just dissolved.

Joined coffee-walk check-in group that I’ve been hearing so much about — didn’t check in with everyone in this group, but did talk about what I’ve been working on (not programming, but I still have done things recently!), and what other folks have been working on, and I went outside and walked and got coffee.

And what have I been doing in the last week?

  • Thursday, Nathan and I watched Mad Men all day long. We didn’t get dressed, we didn’t go outside (not counting the deck), and we tried to remember to drink water (and occasionally succeeded). This was the most radically productive day we could have possibly had.
  • Friday, we went to the Morgan Museum & Library, because it was outside of the house and also there’s a 150th anniversary exhibition about Alice in Wonderland (it’s quite a bit of fun). We saw extraordinarily old books from one of the very first printers (Caxton).Also now I have private library envy (check out the picture at the top here). I have always thought that one neat thing about being disgustingly rich is that you could be all, “hey, you know what is important? Secret staircases in my bookshelves. Heck, let’s have several.”We met a woman who used to work there, who taught us all kinds of incredible facts about the art around the ceiling (Caxton is on it!), and the zodiac women (there’s a woman with, I am not kidding, a rainbow and a unicorn and they’re on a cloud and she’s some zodiac sign?? babeadelic), and where you can see one of the secret staircases.

    We took the East River Ferry to get there, too, which I can now highly recommend as a good use of four dollars (or six, if it’s the weekend). It gave me a new physical understanding of Manhattan, which feels useful.

  • Saturday, if I remember correctly, we were mostly useless (hi, feelings; hi, Mad Men) but pulled ourselves outside to go to Brooklyn Contra with RC friends (it was walking distance this time!). We even got a walk outside with Jess. My ankle still seems mad about this, but it was a terrific night. I love contra, and I only feel that way in New England, and that’s where we are, so.
  • Sunday probably had things. Probably a lot of them were television.
  • Monday, we headed to Cambridge for Nóirín’s memorial, which was too much to fit into one bullet point. Their family is positively lovely, and I’m glad to have met all of them, and so f*cking sad about the circumstances. It felt really right to celebrate life and grieve loss with old and new friends, and I’m deeply grateful that we were able to make it.
  • Tuesday we did not head out mega-early as intended, but we did head out early enough to escape the monster hail and also the possible tornado (no joke, I got a tornado warning on my phone).
  • And now it’s Wednesday.

Spent, honestly, most of the morning catching up on whatever seemed important or interesting in chat, plus reading a few linked blog posts. Put off eating for too long; my hunger-o-meter is, predictably, malfunctioning a ton, even when I think I’m otherwise okay. (It was one of the first grief effects I remembered and anticipated this time, which makes it a little easier to remember I need to eat food in order to do anything else.)

Finally went to a couple of the facilitators this afternoon, said “who wants to talk about grief and creativity?” and had a really good chat with Tom about some ideas. (Of course, he was entirely unprescriptive, because seriously no one here seems capable of trying to pressure anyone to do anything they don’t want to do for their own reasons.) I don’t want to just mope around here, but it’s also not reasonable to expect to pick up where I left off a week ago, so I was glad to be able to ask for help.

Ideas about what to do when you’re in a tough emotional spot, to be adopted or discarded as appropriate:

  • Do easy things. Hard things might be too discouraging right now. That’s okay. Solve little puzzles. Write. Whatever seems accomplishable. Games can also be easy, but may or may not make you feel like you “did” anything later. (Depends on the game, depends on the circumstance, depends on the person.)
  • Do repetitive things by hand. You could write a script for it, sure, but sometimes e.g. going through HTML by hand is a good meditation.
  • Do things whose results you can see. Maybe that’s a tiny Flask app. Maybe it’s handcrafted HTML. (I haven’t touched it in years! It could be fun.) Maybe that’s something on the command line. Some people love one, and aren’t excited by the other. (Some people are me and love the idea of visually manifested things AND the command line.)

Meant to go to my ol’ pal Codingbat again (which Tom suggested again, and mentioned that Sumana had originally mentioned it to him!), but I accidentally fell into Google Translate’s new (?) Community feature, and spent a bunch of time translating little French things into English and validating translations. Really satisfying, and made it hard to leave.

But I did! Had a reasonably good-feeling end-of-day, and heading to dinner at our friends’ place. (eta: also I did one Coding Bat.) I am going to pet their dogs so much.