As you might have heard, I’m spending the summer at at the Recurse Center, a three month self-directed computer science education program in NYC.
I just wrapped up my first week and thought I’d share my thoughts so far.
What is RC?
It’s a program based in New York where roughly 20-30 people are chosen to attend either 12 week, 6 week, or 1 week sessions. It’s a self-directed program, meaning that it’s up to you to decided what you want to learn, and how you want to learn it. There are no classes, suggested courses, or teachers. There aren’t any exams or tests, and there isn’t a piece of paper you get at the end certifying anything. It’s unlike any other educational environment I’ve ever been in, and most importantly, it’s the first where learning, rather than getting good grades or getting a degree, is the priority.
I’m really excited to be back in New York, and to have this opportunity to just focus on becoming a better programmer. And also to work on stuff nobody would ever pay me to do :-)
How did week one go?
The first week was pretty overwhelming in terms of meeting people, figuring out how I want to be spending my time, and getting re-oriented here in New York. Despite that, I still feel like it ended up being really productive.
- I decided to choose a broad theme for the projects I’ll be working on–“Machine Learning for Systems”, and wrote a blog post fleshing this out in more detail
- Formed a machine learning study group with Jenn, Nick, and Kevin that met two hours a day and finished this tutorial
- Had a bunch of awesome coffee chats
- Paired with Emanuel on his automatic image captioning project and learned a lot about RNNs
- Started digging into how computer networks work by getting set up with smoltcp, and wrote this post
Some reflection
RC is truly a fascinating place. I knew that it was “self-directed” before starting, and prepped myself by coming up with some lists of things I want to work on and build. It wasn’t until I got here that I started to fully grok what that meant practically. In school environments, there are curriculums and a sense of progress you get from completing courses and proving mastery of subjects with exams, papers, and final projects.
You don’t get any of that here, and that’s psychologically challenging. For anything that you do, there’s a nagging sense of “am I actually learning anything by doing this activity?”, and then even if the answer is yes, the question “but do I actually care about learning this?” pops into your head.
The interesting thing is that some of that sense of progress that school provides is a little fake– there’s nothing to say that just because you completed some coursework and passed a test that you are actually going to retain any of that knowledge. Even though I did pretty well in school, sitting in lectures definitely was not optimal for my learning style. I’m learning more calculus through building a neural network than I did in any of my courses, for instance.
So while it comes along with some self-doubt, the benefits of being able to decide for yourself what you care to learn and how you want to learn it make it worth it.
Also, the great thing about doing this at RC is that there is an awesome community of people who are also wrangling with the same questions that you can lean on. A lot of people have asked me “Couldn’t you just spend three months working on stuff at home?”, and this is the real answer.
Deprogramming and things to work on
There are definitely a lot of habits I’ve learned in the school/work environments that I’ve learned that will require some unlearning to really take advantage of RC. The overarching theme here is learning how to think about productivity differently.
Having something to show for your time
In both school and work environments, all your “working” time is typically spent working towards some tangible deliverable. Either it’s a school paper or a good grade on a test, or some work-related project. When the goals are changed and the objective is “learning”, all of a sudden, there is no longer a specific tangible deliverable. I think that having become very accustomed to being in work/school environments, spending time in a way that doesn’t produce a tangible deliverable doesn’t make me “feel productive”. However, a lot of really good potential learning opportunities don’t come with a specific tangible–for instance, helping somebody else debug something with the project they are working on or explaining a concept. I think making the adjustment to acknowledging that activities that produce a deliverable are not the only ones that are “productive” is a pretty crucial one to make.
That being said, I think that understanding this about myself is also important, and will definitely be spending most of my time working towards some tangible deliverable to avoid going insane (also, building stuff and writing are great ways to learn), hence the blogging (stay tuned for the Github repos).
Going down rabbit holes
Another aspect of having to produce tangible deliverables is that if there are concepts that you don’t understand, or sections of code that are totally mysterious, you have to timebox the time that you spend on those. At work, I’d typically note things down as I worked, like “Learn more about why doing X with Y technology works at some point”, continue working, and then never get around to addressing the things in my notes. One of the core reasons that I’d never get around to things is not because I didn’t have the time, but because once the moment of confusion is passed and I’ve gotten on with my life, my curiosity and motivation to follow that rabbit pass.
Again, once the motivations are flipped and the goal is learning, with the tangible deliverable being a means of getting to that goal, you don’t have to table the opportunities to learn about some random topic that emerged from whatever you were working on. Especially since one of my goals for this summer is better understanding how computers work, I definitely need to learn to let myself get distracted (by the right things, not my phone), and let curiousity be the guide as I get deeper into the projects I’m working on.
Other learning opportunities
RC has also provided other opportunities that I didn’t really think about. Notably, having to organize study groups and other social events has offered an opportunity for leadership that I wasn’t really expecting. In the study group I’m in now, we’re are doing “group programming” where somebody projects their computer screen and we collaboratively program. I think this was pretty effective and am proud of what we’ve accomplished, but I’m sure there are also other effective approaches and I’m curious what other study groups look like.
What’s next?
RC is definitely going to be a challenging, but hopefully rewarding experience. I’m very thankful to be here, and have been blown away by everyone I’ve worked with and met so far.
Over the next couple weeks, I’m going to be splitting my time between working on some ML-related projects and understanding computer networks (not neural networks) in more detail.
Will keep y’all updated on how this goes–expect more blog posts in the coming weeks!