Notes After 8 Weeks at the Recurse Center

I just finished week 8 of a 12-week "batch" at the Recurse Center, which is a diverse community of people who come together to help each other become better programmers. The community includes both current attendees and "alums" who stay connected in various ways.

Each week I've been here has been better than the last. Yesterday, for example, I learned more than I do on an average day:

  • I learned some Python.
  • I saw a neat algorithm using matrix multiplication.
  • I got an explanation of Markov chains.
  • I attended an excellent talk that was an introduction to dynamic programming.

All this learning was unplanned except the talk on dynamic programming, which I had signed up for in advance. For example, yesterday morning I noticed some people were working on a problem on HackerRank. I got the urge to tackle it myself, and used it as an opportunity to practice Python coding, which I've been meaning to "get around to" for years. (In case you're wondering, my solution passed all of HackerRank's automated tests, but only after a bunch of fixing and reworking.)

All learning at the Recurse Center is attendee-driven. There is no lesson plan, there are no formal deliverables, and there is no certification at the end. Indeed, RC's motto is "Never graduate." We attendees show up on day 1 with some idea, possibly vague, of what we want to work on. It is perfectly fine, even encouraged, to change our minds about this over time, as long as we stay ambitious. We spend most of our days coding, studying, "pairing", doing self-organized workshops and presentations, and socializing.

RC occupies an office space in Soho, a stone's throw from Chinatown. It's a quick subway ride from my apartment, and I can walk home in less than half an hour. I think there's about 50-60 of us here during peak hours, including staff.

The interior resembles a typical open-plan tech startup office. I'm generally against open-plan design, but I like it in this case, because it serves one of RC's goals, which is to encourage us to interact with each other. I don't feel like the activity around me is intrusive; on the contrary, I like overhearing what people are talking about. Also, since there is no pressure, competition, or judgment regarding what I'm working on, I don't feel the exposed anxiety I would feel in an otherwise similar workplace setup.

Besides, the space isn't 100% open. There's a library with books on all kinds of programming topics, and there are rooms where people can hold meetings or just sit and program quietly when we don't feel like working in the open area. Every room is named after a famous computer scientist. Right now I'm sitting in Lovelace. The biggest meeting room is called Hopper. Various parts of the open area also have names: Dijkstra, Ritchie, etc.

Another nice aspect of the physical facility is that the WiFi is very fast and reliable. This means one less hassle in our day-to-day lives getting in the way of progress.

The Recurse Center strongly emphasizes diversity and support for groups that have been underrepresented in tech. I've met attendees from countries including Poland, the UK, and Singapore. All experience levels are represented. We skew pretty young, as in like 20's or 30's, but there are middle-aged folk like me as well. The community includes gay people, trans people, and black people — all in small but still, to my mind, significant numbers.

By design, roughly half the attendees are women, and WOW does that make a difference. I've worked with and for women before, but never alongside this many, not by a long shot. It changes things in a way that I'm not sure yet how to describe, except that I feel more comfortable being myself.

Speaking of comfort, there are four gentle "social rules" we're expected to observe:

  • No "well actually's".
  • No backseat driving.
  • No subtle "-isms" (sexism, racism, ageism, etc.).
  • No feigned surprise (as in "I'm surprised you didn't know X", which can have the effect of belittling relative beginners).

I suspect I was the first person in my batch to break one of these rules. On the first day, I brought some batch-mates to Chinatown for dim sum. I caught myself assuming I was the only one proficient with chopsticks. Subtle racism — mea culpa.

The Recurse Center selects attendees through an application process that includes two Skype interviews. You don't have to be a genius or a rock star to get in, although there are definitely people here who impress the heck out of me. My application process felt like the best "job interview" experience I've ever had, in terms of both making me feel understood as a person and making me feel like these were people I wanted to work with.

Attendance is 100% free. RC supports itself through job placements for its attendees. There are lots of support activities for people preparing to go job hunting, including interview practice sessions. There's no obligation to go through RC to get a job or even to be on the job market. And job-related activities should not distract from the primary business of learning and improving as programmers.

I hope to keep sharing more about this place. The staff, for example, is terrific. I might try to think of some complaints; nothing's perfect, after all. Until then, I'll just say this is the best thing to happen to me in a long time.

ChessFidget

I'm halfway through a 12-week stint at the Recurse Center. One of the first things I did was to write a silly chess app called "ChessFidget" to help myself learn Swift. Here's more about it, including the source code. There's a link in the README to a double-clickable binary you can run without having to compile the code.

Here's a 5-minute presentation I gave about it:

The Incredible Shrinking Docs

Wouldn't you know, I was wondering about documentation in Xcode 8, and indeed it has fundamentally changed. The DevPubs team has hugely reduced the size of the docs and apparently integrated them with Xcode so that there is no longer a need for a separate download step.

Running the Xcode 8 beta, I find I'm able to browse the docs with WiFi turned off. I know I'm looking at the Sierra docs, because NSGridView is there. Furthermore, docsets are no longer listed in the Downloads pane of the prefs panel. It's like magic — kudos to the DevPubs team!

I'm guessing this news about the docs was announced during the Platform State of the Union. I missed that session when it was live-streamed, so I'll have to watch it later. I'll see if it confirms my understanding, and I'll think about implications for AppKiDo.

The Developer Tools people at Apple have a lot of momentum lately. I can't remember when it felt so much like they were working hard to connect with us, to show that they hear us (the culture around Swift seems incredibly positive), to create cool tools, and to take away pain points.

I wonder if squashing the documentation size was important not only for Xcode but for the Swift Playgrounds iPad app and/or future possibilities for using iPads for development.

The New Adventures of Old AppKiDo

I have been making progress on a reboot of AppKiDo, which is a Mac app that I wrote for browsing the Cocoa documentation that comes with Xcode. AppKiDo stopped working in 2014, during the betas of Xcode 6, because of changes in the structure of Apple's docsets.

I now have it up and running again, in a preliminary but usable form. (The code is in a private repository; I will push it to the public one after ironing some things out. [UPDATE: Eh, why wait? The code is public at https://github.com/aglee/appkido. Remember, it's very much a work in progress.])

The best news, aside from having it run at all, is that it's launching much more quickly than it used to. There's still a lag, but it's much shorter now, because instead of laboriously parsing all the HTML files, I get almost everything I need from the Core Data store inside the docset.

There are serious limitations in the current version that will take time to address:

  • Still Objective-C API only. For example, if you search for "string" the search results won't include the Swift String class.
  • Xcode must be at /Applications/Xcode.app.
  • You have to pick the docset you want to browse at launch time.
  • Window states aren't saved between launches.
  • The "ALL" options are missing (as in "ALL Class Methods", "ALL Instance Methods", etc.).
  • And more.

As I write this, the keynote for WWDC 2016 is hours away. For the first time in a long while I am experiencing an old familiar feeling of suspense. Will there be some change to the docs in Xcode 8 that will upend everything I've been doing?