RC W2D3 - Economic empowerment

On writing

I'm very happy to have blogging be sustained as a daily practice, and amused how expectations contrast against reality. I expressed to a friend:

I started a blog to write about the stuff at RC. I'm a perfectionist when it comes to writing, so worried at how it comes across. Then I learned what I imagine a lot of startup founders and writes [sic] encounter - it's people caring too little rather than too much is the problem.

I was similarly worried about my first comment for an open source project, made available to the whole world. I guess it's a bit like going to a party and worried how people think of you, when in fact most are too worried what others think of them.

Elixir

The day kicked off early with an event with José Valim, the BDFL of Elixir. I came away thinking how Elixir was inspired by Clojure but built on top of the Erlang VM. What I know about Erlang is (1) the language was designed at Ericsson, and (2) WhatsApp's Erlang code supported ~500 million users with ~30 engineers and the company got acquired by Facebook for ~$20 billion. Clearly something got built right.

I asked José what he thought about using Go for concurrency at the time he started Elixir. He emphasized immutability - the guarantee that data not change under our feet (achieved via functional programming) helps developers write robust concurrent software. He also said that, at the time, Go marketed itself as a replacement to C/C++ (as opposed to Java). He shared the following article which I haven't had the chance to read, but the blog itself is a real find.

José also super nice - he set aside time at the end for people who didn't get a chance to ask questions.

Content: Jack Dorsey

Now going on a tangent, my first role in San Francisco was at Square. It was privilege being in a company led by Jack Dorsey. He genuinely believed Square's products helped small business owners put food on the table, and worked hard to ensure they had access to the same tools that big businesses had. I was based in Berlin prior to moving to the Bay Area; I specifically remember reading a New Yorker profile of him, in a copy of the magazine that an ex-flatmate left behind after moving out.

https://www.newyorker.com/magazine/2013/10/21/two-hit-wonder

It's funny how things work out.

RC W2D2 - Be a chef

Open source

I started taking a closer look at open source projects today, starting with urllib3. I've used it before, it's in Python and a fellow RC batchmate Andrey is a maintainer.

The issue I focused on involved type checking, so I spent a bit of time on a mypy refresher. In my previous role I had to make the existing py2 codebase compatible with py3, which means introducing lots of type comments. TIL type stubs can only be used to check clients of the stub, but not the code itself.

I also had a quick look at Kubernetes. I've used it before, it's a chance to practice my recently-acquired Go skills and there'll be a presentation on it later in the week. Fine, it's also the hottest thing right now...

I was expecting a large group of maintainers, I wasn't quite expecting this large. There's a set of videos for new contributors. There's even an agreement you have to sign before contributing - gives me the same feeling as signing an NDA to hear a startup idea.

Content: Be a chef

Following up the brief discussion on Jiro last week, Oz wrote this excellent piece on why you should use (the developers analogue of) a chef's knife and not a Thermomix.

https://blog.bradfieldcs.com/cutting-through-to-what-matters-48baf397806f

That summer at culinary school continues to pay dividends.

RC W2D1 - Work hard

Twitter API

It’s Open Source Week at RC! Today I attended a few events to kick off the week, and spent time closing the circle on things I started looking at last week.

First, the Twitter API. The API doesn’t have a /bookmarks endpoint, so instead I looked at the /friends endpoint which returns the list of users you follow. The idea is to find new users to follow i.e. a ‘user recommender’. The algorithm I used was:

1. Find all users I follow (let’s call this group A)
2. Find all users these users follow (group B)
3. For every user in group B, count the number of users in group A who follow that user

I follow 291 users, so the maximum number of ‘votes’ each user in group B can get is 291. While this seems simple, there’s a rate limit of 15 API calls every 15 minutes for that endpoint i.e. 291 calls takes about 5 hours. In descending order of votes, the top 3 are:

1. Elon Musk (116 votes)
2. Barack Obama (110)
3. Bill Gates (105)

WebAssembly

The second item I looked at last week was WebAssembly. I can’t help but find it amusing how this optimization looks to shave off milliseconds off a job that takes 5 hours...

The simplest way to run WebAssembly I found was actually out of the browser with Wasmtime (Rust example here, Python here). It probably makes sense to revisit running in the browser once there's more sensible use case, or at least after the events this week.

Content: Wisdom beyond your years

Re: extra content, I absolutely adore this post Sam Altman created when he turned 30. The wisdom here is way beyond his years.

https://blog.samaltman.com/the-days-are-long-but-the-decades-are-short

On work: it’s difficult to do a great job on work you don’t care about.  And it’s hard to be totally happy/fulfilled in life if you don’t like what you do for your work.  Work very hard—a surprising number of people will be offended that you choose to work hard—but not so hard that the rest of your life passes you by.  Aim to be the best in the world at whatever you do professionally.  Even if you miss, you’ll probably end up in a pretty good place.

RC W1D5 - Think clearly from first principles

Content: End of the énarques

I spent a summer in London, staying in Holborn. Every weekend I would walk over to the Royal Opera House to pick up a complimentary copy of the FT Weekend. Reading the cover article would be the highlight of my week.

The articles featured these days don’t seem to be as hard-hitting as they used to be; fortunately I managed to save up my favorites. Top of the list is an article by Jo Johnson on ‘the end of the énarques’. It’s no longer available on the FT (and nothing pops up on Google), so I’ve enclosed the article below.

Content: Goldberg Variations

Since we’re heading into the weekend, let’s include even more content. I came across Glenn Gould’s masterful performance of Bach’s Goldberg Variations in Walter Isaacson’s biography of Steve Jobs. Comparing the 1955 version (his first recording) with the one in 1981 (his last) is truly inspiring. It's a meditation on the passage of life.

Content: Jiro Dreams of Sushi

On the theme of achieving mastery, I’m reminded how Bradfield School of CS had a framed picture of Jiro on its walls. I learned a lot from the classes at Bradfield, but perhaps the most valuable lesson was a constant refrain from the instructor Oz telling us “think clearly from first principles”.

Nix

Getting back on topic i.e. RC, I looked into rebuilding my dev environment with Nix today as the issue with macOS Catalina has now closed. For context, Nix here is just the package manager (vs NixOS or the Nix language).

Nix lets you build environments in a declarative way. You write all the packages you need in a shell.nix file to create your environment. When you have a new machine, simply use the same shell.nix file and it’ll recreate the same environment. Another plus is much easier rollbacks.

On the flip side the Catalina issue is now closed because there’s a workaround, but this involves partitioning your drive. It was relayed to me how this can be "quite painful”. Also “the learning curve is really intense” when installing something that’s not in nixpkgs.

Since I’m juggling a few things, maybe rebuilding my dev environment can be pushed back a bit. It makes me wonder what things will be like further down the road when we have ARM MacBooks...

Week 1

I’m pretty spent from attending lots of events in the first week, didn’t do that much coding today and doubled down on more events - mathematical thinking, software design, ML theory. Presentations at 4 pm ET marks the end of the week quite nicely.

What can I say? Week 1 of RC has been a blast! It’s affirming seeing the diversity of backgrounds and knowledge. As a self-taught programmer, this week helped illuminate how the path towards mastery is not linear. It’s multi-dimensional.

Content: The Alchemist

I’ll end this post with one more piece of content. There are a few books that I’ve read and re-read, especially in moments of self reflection. I especially enjoy Paulo Coelho’s The Alchemist for this purpose, and particularly this quote:

"What is the world's greatest lie?" the little boy asks.

The old man replies, "It's this: that at a certain point in our lives, we lose control of what's happening to us, and our lives become controlled by fate. That's the world's greatest lie."


RC W1D4 - Advice for data scientists

Twitter API

It's very convenient how a HTML/CSS/JS project on repl.it is automatically hosted, so there's no need to explicitly set up a back end (Hello World example here, viewable here).

I've been wanting to play around with Twitter's API, and thought setting up the client JavaScript to make the API call keeps things simple. Annoyingly .env files for HTML/CSS/JS projects get exposed and the more interesting parts of the API is behind the auth.

OK so I'll need my own back end. It turns out this is not too complicated. I stitched together a minimal Flask web server that dumps the response in the HTML (project here, viewable here).

Content: Data science

Today I also presented on applying machine learning to payments use cases - this flows nicely to the content of the day.

https://multithreaded.stitchfix.com/blog/2015/03/31/advice-for-data-scientists

I came across this Stitch Fix blog post when I was first interviewing for a data science role. The advice to choose (or perhaps, give considerable weight to) a company on whether data science makes-or-breaks the business is fantastic - if it's any one article I'd recommend on the topic, it's this.

RC W1D3 - Are computers making society more unequal?

Events

I committed to attending all events in the first week. It's Day 3. I'm wiped out.

Today I added OS and compilers to the list of things to play around with. I was also reminded of a command line course I started in the past but only got half of the way through - it's going on the list...

Content: Technology and inequality

Featured content for today is an insightful Tyler Cowen interview in the New Yorker titled "Are computers making society more unequal?". Feel free to ping in case there's a paywall.

https://www.newyorker.com/business/currency/are-computers-making-society-more-unequal

It's a reminder that it's a privilege to be able to continually work on self-development. Thank you RC for bringing us together.

RC W1D2 - The aspiring polyglot full stack developer

On learning new things

Prior to RC, my exposure had largely been Python and the back end. In the spirit of learning new things, I wanted to learn other languages and the front end.

I curate my Twitter bookmarks lovingly. As a project idea, I thought it would be useful to build a web app to extend its functionality. Suppose I'm logged on to Twitter on one browser tab, my web app in a different tab piggybacks the existing auth to get (and later manipulate) my bookmarks.

Taking a closer look, I discovered Twitter's API doesn't have a /bookmarks endpoint. I could use Postman to get the necessary tokens and spoof the web request. Perhaps v1 won't be the most user friendly of apps.

This discovery prompted me to commit to learning "how the browser works", which alas I only got as far as a Google search. The shiny object of the day? Compiling Rust into WebAssembly. I've been curious about WebAssembly hearing how it makes web apps run as fast as native apps, say at Figma. Well... I guess this still fits in the theme of 'the front end'.

Content: Design of Go

Carrying on with my practice of padding up my blog posts with other content (and the theme of 'other languages'), enclosed below is Rob Pike's talk on Go at the SPLASH 2012 conference (link to video here, not as detailed but tad easier to follow).


I had a bit of time between my previous role and RC, which I spent looking into Go. I was fascinated to learn various tools we used in production for Python (Bazel to avoid circular dependencies, Jenkins for cross compiles, yapf for formatting, futurize for upgrades, mypy for types) comes built in into Go. Having spent considerable time migrating Python 2 to 3, gofix seems magical.

RC W1D1 - Recommit yourself to lifelong learning

Day 1

When I first picked up Python, everything was new, everything was fun. Somewhere along the way work happened. I became more efficient at solving problems, by cherry-picking the things that are 'important'.

It's my first day at Recurse Center. Now's a good time as any to switch that off momentarily, and explore a bit more. To paraphrase Dave, one of the co-founders, it's time to "recommit yourself to lifelong learning".

I'm also taking this chance to try out blogging. I've tried it a couple of times, which have mostly failed on the back of perfectionism (including the one that resulted in payments.posthaven.com).

Content: Develop your potential

While I haven't created much content, I've collected quite a bit over the years. I'll include them here, starting with Justine Musk's wonderful answer to the question "Will I become a billionaire if I am determined to be one and put in the necessary work required?".

https://www.quora.com/Will-I-become-a-billionaire-if-I-am-determined-to-be-one-and-put-in-the-necessary-work-required

Ask yourself what you have the potential to offer that is so unique and compelling and helpful that no computer could replace you, no one could outsource you, no one could steal your product and make it better and then club you into oblivion (not literally). Then develop that potential.