I’ve completed my second week since joining the Recurse Center (RC).

As I mentioned in that announcement, I’ll be posting about the process and my projects in support of my goal of writing more and RC’s self-directive to learn generously. This is the second weekly installment.

You can see all posts about RC by filtering for posts with the Recurse tag.


I’m experimenting heavily with the format this week. I’m trying to produce something with a high return on reader investment, good structure for skim-readers, and lower time-commitment from me than last week’s post. Feedback is welcome!

Daily tldrs

If you want a sense of what an ordinary (but not typical) week of RC could be like, here are the tldr summaries I wrote for each day. I wrote much longer check-ins on Zulip along with these.

  • Monday: No calls or meetings. Evaluated and organised resources. Deep dive on my motivations and goals, which helped streamline and stackrank my project ideas. Lots of writing.
  • Tuesday: A good day! I finally got stuck in to my first major project with some tool research and Rust setup + exercises, and was only mildly nerdsniped with lots of interesting demos and conversations.
  • Wednesday: A day of group work and conversations. Wore my teaching hat again. Shipped a cool browser simulation experiment and learned about Three.js in the process. Fixed Rust tools.
  • Thursday: I spent most of my day reading the Rust Book and writing my own simple programs in Rust. Plus a coffee chat and enjoying the excellent presentations.
  • Friday: Low energy and sleep, but attended some good group meetings and shared ideas. Some LeetCode, organising, and blogging.

What I made

(Excluding Leetcode, copious Obsidian notes, and these blog posts.)

Pointy birds

Gianluca on Zulip:

Another fun #creative coding meetup with the bizarre prompt: “O pointy birds, o pointy pointy,\ Anoint my head, anointy-nointy.” Had good fun riffing on ideas with the group and then got stuck into building a dynamic swarm / flock simulation of “birds” that follows the mouse and gradually multiplies. You can try it here. It’s kinda cool finding sets of parameters that cause stable orbits vs ones that collapse to a frenzied mosh pit. Also, it’s kinda crazy just how much quicker and easier Three.js is compared to building graphics from scratch.

Visit pointy birds on codepen

Embedded version below: try moving the sliders about to see how it affects the behaviour. You can click/tap somewhere on the screen to move the centre of attraction (the red sphere).

Memoised recursive Fibonacci in Rust

Gianluca on Zulip:

Went down various rabbit holes implementing a recursive Fibonacci generator in Rust — my first tiny personal project. But it got slow around n=40 (for the usual reasons), so I implemented memoisation which ended up taking an hour of fiddling because I hadn’t yet learned about usize indexing. But I figured it out eventually and also managed to handle the ownership of the memo Vec just fine even with recursive calls. Overall, it was a great way to work at the edge of my abilities and learn to make good use of the compiler feedback and great documentation that Rust has — especially with it all coming through in neovim now that I fixed the LSP issues. It’s such a nice workflow!

I ended up getting to something that could generate the largest Fibonacci number to fit inside a u128 in the blink of an eye. Performance is hot!

Fibonacci in Rust in NeoVim

What I’ve learned and realised

Some partially-formed thoughts that have percolated up to awareness this past week…

To learn generously, you first have to learn

I’ve tried most group activities once or twice now, which gives me the info to prioritise. I could literally stack every day with 6-8 hours of interesting groups, coffee chats, and group co-working. But then I’d never actually do anything.

It’s the explore-exploit trade-off rearing its head again. Trying most things and meeting most people is valuable in the first couple weeks, but thereafter, bias towards more focussed and deliberate commitment to a few projects and groups. I expected this, but now I need to act on it.

Just pick a project and start

I settled on my first major project: mtop, a Rust CLI tool that monitors Apple Silicon (M-series) GPU usage. You can monitor my progress here. Let me know if you’re interested in working on this too! This is a good project as it is tractable, limited (but flexible) in scope, and requires me to learn one big thing (Rust) along with some smaller things (using MacOS APIs, CLI graphics, Homebrew).

Legacy goals considered harmful

I had to revise some of my “legacy goals” this week. These are goals I set some time back that have sat on a list (and in the back of my mind) and are now surfacing as “oughts” during RC. Many of these are no longer relevant, exciting, or the same level of priority.

Example: Years ago, before I had tried React, I heard about React Native — which supposedly let you use familiar webdev tools to also target native applications across major platforms. In particular, I heard that PyTorch, the leading deep learning library for Python, was integrating with it. That got me excited to learn React Native because I could easily deploy my machine learning models on mobile devices without having to master multiple different ecosystems and languages. Naturally, I joined the React Native group meetup at RC, as I’d had “learn React Native” on my list for 3+ years.

Whilst the group is a great bunch of enthusiastic newcomers who are keen to dabble in React Native together, I realised that this was part of a “legacy goal.” The landscape has changed, I’ve since used React a bunch, and my reasons for learning React Native might now be better met by new technologies like WebAssembly.

I’ve come across a number of these legacy goals in the past few weeks and now realise that part of growing my volitional muscles means identifying and pruning out the ones that don’t excite the hell out of me.

Some groups involve a lot more homework than others

Gianluca on Zulip:

Wrote out an overview of all the weekly groups I’m a part of and what the required “homework” is for each (reading chapters, watching videos, etc.) so I could prioritise and make sure I plan those tasks ahead. I recommend doing this if you’re feeling overwhelmed or are overcommitted!

There are simple too many textbooks and courses that I want to work through: SICP, DDIA, AOCP, USD, NN:Z2H, Nand2Tetris, etc. Most of them have weekly groups too. So it’s a few hours to cover the material, a few hours to do the exercises, and then an hour of group discussion every week. That’s a major commitment! There’s probably only room for one of those at a time.

But other groups are casual drop-ins that only require time and energy when attending. These hang-outs can be a waste of time if you all sit around chitchatting, but can be the best learning environment if you come prepared with something to share or questions to ask. I’ve also found these to be the most fun!

I’m going to maintain a couple of the drop-in groups, but limit myself to only one “homework group.” All those great books will have to wait their turn and become serialised into chunks in the future. Perhaps RC is best spent just building?

You gotta do the reps

Being remote, I’ve over-compensated and spent most of my time and energy on writing, talking, sharing, and helping. But I need to give myself room to focus and ship.

Like real muscles, growing your volitional muscles requires more than a plan. At some point, you have to just hit the gym and put in the reps.

Some reps are better than others — Leetcode has limited utility — but just write more code already!

Things I like about (learning) Rust so far

  • The Rust book is superb and delightful to read.
  • The tooling is outstanding! I didn’t quite realise how much trauma Python dependency management and JavaScript debugging had inflicted on me until I spent a couple hours with Cargo and the Rust compiler.
  • Sane and useful macros (and clear syntax for them).
  • egui looks great and seems to have outsized utility.
  • Everyone in RC who is currently doing Rust projects seems to be enjoying themselves. Even Jesse, who’s submitting fixes to the Rust compiler.
  • It seems like additional work, but the returns kick in surprisingly early and then people ship rapidly! Sharp built a working modular synthesiser in a few days!

Gianluca on Zulip:

Spent a while fighting with my neovim setup to get Rust to play nicely. Turns out I had it all set up correctly yesterday, but most advanced LSP functionality only activates if you’ve done a cargo init, not just on any .rs file, which is how I’m used to LSPs behaving. Thanks @Sharp for the sanity-check with your setup yesterday!

How I’m planning on learning Rust: Read the first 8 chapters of the book fast (don’t take notes, just prime the brain), then work through some of Rustlings and Rust by Example, then dive into a real project (with the resources as references). I’ve already deviated from this slightly, though.

Thanks to everyone for suggestions, resources, and tips!

Personal websites are personal, so share them

Justin organised the first group meetup for personal website enthusiasts (and those who want to be). It was great! Instead of us nerdsniping each other with technical details, he had us start with clearly defining what our goals and motivations were. I hadn’t explicitly considered that before.

My motivations for this site:

  • I’m trying to create my own sovereign part of the web, but I want it to be fun and cozy and unique.
  • I write (1) to think and (2) to share. I want to write more, more often, about more topics (technical and essay). My site helps encourage and facilitate that.
  • I’d like my site to be a reflection of my values and personality and interests in the world.
  • It’s also a professional portfolio.

But everyone else had very different goals and intentions. Some were primarily looking for a job and wanting a portfolio / landing page, whilst others wanted to demo interesting web experiments they’d built or art they had made. Some people just wanted to blog as much and as simply as possible about their own life and interests. For some, the engineering of the site is the project. For others, it’s all about having something with the lowest possible friction to posting.

It was non-obvious at first, but personal sites are personal.

Once we’d established what someone’s goals were, it was much clearer what they needed and what kind of suggestions were helpful.

It’s also amazing how in under a minute of watching someone interact with a site for the first time, you instantly know what’s confusing or needs to be improved. So share your site and actively seek out feedback! (Feedback on this site is welcome!)

Vibes and tacit knowledge

I’m often learning the most when just watching someone who knows a lot about a thing do that thing. There is an abundance of tacit knowledge to be absorbed from diving into the deep end with someone much further along the learning curve. Fortunately, many stupid questions aren’t actually stupid and are helpful in guiding the experienced person to clarify their own thinking.

Gianluca on Zulip:

Rust Beginners Club and then Rust Study Group organised by @Nicholas, where things escalated quickly from sharing beginner learning resources to debugging the Rust compiler with @Jesse. It was great and I picked up a lot of tacit knowledge by observing and was able to ask a few questions

I feel like I saw both sides of that this past week…

You don’t know what you know

Gianluca on Zulip:

Caught up on Karpathy’s NN-ZtoH course to join #machine learning study group, which was a good learning experience for me. I hadn’t realised just how deep my everyday machine learning / neural net world had gone and how much I take a lot of tricky concepts and foundational knowledge for granted. Seeing the topics through the perspective of newcomers and revisiting fundamentals was really good for helping consolidate and update my own understandings. It was also good practice at trying to learn generously without falling into lecturing


If you’ve read this far, I’d love to hear your thoughts! Please do reach out.

Intentions for week 3

For week 3, my focus will be on getting competent at Rust and building my primary project, mtop.