<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="http://ryantolsma.com/feed.xml" rel="self" type="application/atom+xml" /><link href="http://ryantolsma.com/" rel="alternate" type="text/html" /><updated>2026-06-06T15:55:59+00:00</updated><id>http://ryantolsma.com/feed.xml</id><title type="html">Ryan Tolsma</title><subtitle></subtitle><entry><title type="html">Symmetry Representations and Fourier Transforms</title><link href="http://ryantolsma.com/thoughts/2026/05/28/translations-fourier-transforms-harmonics.html" rel="alternate" type="text/html" title="Symmetry Representations and Fourier Transforms" /><published>2026-05-28T00:00:00+00:00</published><updated>2026-05-28T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2026/05/28/translations-fourier-transforms-harmonics</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2026/05/28/translations-fourier-transforms-harmonics.html"><![CDATA[<p>There are many ways to motivate Fourier analysis, and recently I discovered a new one: fourier transforms are what happens when you diagonalize translation symmetry.</p>

<p>For a function \(f:\mathbb{R}\to \mathbb{C}\), define the translation operator</p>

\[T(a)f(x) = f(x-a)\]

<p>where \(a\in\mathbb{R}\) represents the amount we shift our function. These operators form a Lie group under composition, since \(T(a)T(b)=T(a+b)\) and \(T(0)=I\). The natural representation-theoretic question is: what are the irreducible modes of this group action?</p>

<h2 id="the-generator-of-translations">The Generator of Translations</h2>

<p>Since translations vary continuously with \(a\), they should have an infinitesimal generator. Expanding around \(a=0\), we get</p>

\[\begin{align*}
T(a)f(x) &amp;= f(x-a) \\
&amp;= f(x) - a\frac{d}{dx}f(x) + O(a^2)
\end{align*}\]

<p>which suggests that the translation operator can be written as</p>

\[T(a) = \exp\left(-a\frac{d}{dx}\right)\]

<p>so \(\frac{d}{dx}\) is, up to sign convention, the generator of the translation group. Now that we have the generator, to understand how translations operate, it suffices to understand the eigenfunctions of \(\frac{d}{dx}\). These are exactly (using the arbitrary factor of \(ik\) instead of a different constant, because I like physics)</p>

\[\frac{d}{dx}e^{ikx} = ik e^{ikx}\]

<p>and therefore</p>

\[T(a)e^{ikx} = e^{-ika}e^{ikx}\]

<p>meaning each Fourier mode (with eigenvalue \(e^{-ika}\)) is an eigenfunction of every translation operator. Notably, you immediately derive through the eigendecomposition (since translations are an \(L^2\) operator) that the Fourier modes are an orthogonal basis.</p>

<p>With this new basis, for a generic function \(f\), the Fourier transform is just computing its coordinates in this diagonal basis:</p>

\[\hat{f}(k) = \int_{\mathbb{R}} f(x)e^{-ikx}dx\]

<p>with the inverse transform reconstructing the original function by summing over translation eigenmodes:</p>

\[f(x) = \frac{1}{2\pi}\int_{\mathbb{R}}\hat{f}(k)e^{ikx}dk\]

<h2 id="commuting-with-symmetry">Commuting with Symmetry</h2>

<p>The representation-theoretic framing comes when we look at other operators that respect translation symmetry. Suppose \(L\) is some linear operator acting on functions and it commutes with translations:</p>

\[\left[L, T(a)\right] = 0\]

<p>for every \(a\). As a consequence of Schur’s lemma, an operator that commutes with a group action preserves the irreducible pieces of that representation (via isomorphism) or degenerately vanishes. On each irreducible piece, it acts by a scalar; when multiple equivalent copies appear, it can only mix those multiplicities. So once we’ve decomposed into translation eigenfunctions, \(L\) acts by scalar multiplication on each mode, up to the usual degeneracies.</p>

<p>This is why translation-invariant operators are diagonalized by the Fourier basis. If \(L\) commutes with all \(T(a)\), and \(e^{ikx}\) spans an irreducible translation mode, then \(L e^{ikx}\) must transform under translations in the same way as \(e^{ikx}\). So \(L e^{ikx}\) is proportional to \(e^{ikx}\):</p>

\[L e^{ikx} = \lambda(k)e^{ikx}\]

<p>This principle more broadly applies to any form of operator symmetry. The irreducible representations form subspaces over which we can cleanly diagonalize and understand the operator’s behavior over. For example, in quantum mechanics, you frequently utilize the symmetries of the system to decompose the Hamiltonian over the corresponding irreducible representations, which lets us more tangibly understand dynamics within those subspaces.</p>

<h3 id="example-harmonics-want-fourier-modes">Example: Harmonics Want Fourier Modes</h3>

<p>We can apply these insights to the Laplacian, an operator that’s frequently found in common PDEs:</p>

\[\nabla^2 = \sum_i \frac{\partial^2}{\partial x_i^2}\]

<p>which commutes with translations in Euclidean space. Shifting a function and then taking its second derivatives gives the same result as taking its second derivatives and then shifting. So by the symmetry argument above, the Laplacian must be diagonal in the translation eigenbasis.</p>

<p>In E&amp;M we learn that plane waves are non-normalizable (translation symmetries!) and represented by \(e^{ik\cdot x}\), with which we have</p>

\[\nabla^2 e^{ik\cdot x} = -\vert k\vert^2 e^{ik\cdot x}\]

<p>which is exactly the diagonalization. In Fourier space, differential equations involving the Laplacian become algebraic equations involving \(-\vert k\vert^2\). This is why harmonic analysis, PDEs, and Fourier transforms are so tightly bound together. The method works because the operator and the geometry share the same symmetry.</p>]]></content><author><name></name></author><category term="thoughts" /><category term="math" /><summary type="html"><![CDATA[There are many ways to motivate Fourier analysis, and recently I discovered a new one: fourier transforms are what happens when you diagonalize translation symmetry.]]></summary></entry><entry><title type="html">Fun Discrete Calculus Tricks</title><link href="http://ryantolsma.com/thoughts/2026/04/17/discrete-calculus.html" rel="alternate" type="text/html" title="Fun Discrete Calculus Tricks" /><published>2026-04-17T00:00:00+00:00</published><updated>2026-04-17T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2026/04/17/discrete-calculus</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2026/04/17/discrete-calculus.html"><![CDATA[<p>I’m not sure why, but high school calculus traditionally jumps straight into the continuous setting completely ignoring the fact that most of the computational methods have clear discrete analogues.</p>

<h3 id="discrete-derivatives-and-integrals">Discrete Derivatives and Integrals</h3>

<p>For discrete functions \(f: \mathbb{Z} \to \mathbb{R}\) the derivative is pointwise defined as</p>

\[\Delta f(x) = f(x) - f(x-1)\]

<p>Like \(\frac{d}{dx}\) the \(\Delta\) is linear, \(\Delta(af + bg) = a\,\Delta f + b\,\Delta g\), and kills constants, \(\Delta c = 0\).</p>

<p>Looking at monomials, we  see that
\(\Delta x^n = x^n - (x-1)^n\)</p>

<p>expands out into an ugly sum of terms through binomial expansion. This isn’t that nice to work with, and so instead we can look at a better set of monomials that behave more like the continuous versions. These are the rising factorials:</p>

\[x^{\overline{n}} = x(x+1)(x+2)\cdots(x+n-1) \quad (n \text{ factors})\]

<p>which when we apply \(\Delta\) we get</p>

\[\Delta x^{\overline{n}} = x^{\overline{n}} - (x-1)^{\overline{n}} = \big[x(x+1)\cdots(x+n-2)\big]\big[(x+n-1) - (x-1)\big] = n\, x^{\overline{n-1}}\]

<p>just like with \(\frac{d}{dx}\). There’s a product rule too, with one discrete wrinkle, just requiring a shift on the second factor: \(\Delta(uv) = v\,\Delta u + u(x{-}1)\,\Delta v\). Summing both sides gives summation by parts, the analogue of integration by parts: \(\sum_{x=a}^{b} v\,\Delta u = uv\big\rvert_{a-1}^{b} - \sum_{x=a}^{b} u(x{-}1)\,\Delta v\), which resolves terms like \(\sum x\,2^x\) exactly the way \(\int x e^x\,dx\) yields to parts.</p>

<p>The chain rule is the one place the analogy breaks: \(\Delta f(g(x)) = f(g(x)) - f(g(x-1))\) won’t factor unless \(g\) is affine (e.g., shifting \(g(x) = x+c\) just reindexes, \(\Delta f(x+c) = (\Delta f)(x+c)\)) since differences care about integer steps and most \(g\) don’t preserve them.</p>

<h3 id="integration-is-just-summation">Integration Is Just Summation</h3>

<p>Suppose we want \(\sum_{x=a}^{b} g(x)\). The trick is to find an <em>antidifference</em>, a function \(F\) with \(\Delta F = g\), just as we’d hunt for an antiderivative. The sum telescopes:</p>

\[\sum_{x=a}^{b} \Delta F(x) = \sum_{x=a}^{b} \big[F(x) - F(x-1)\big] = F(b) - F(a-1)\]

<p>Every interior term is added once and subtracted once; only the ends survive, an analogue of the fundamental theorem of discrete calculus:</p>

\[\sum_{x=a}^{b} g(x) = F(b) - F(a-1), \qquad \text{where } \Delta F = g\]

<p>And we already have the antidifference of a rising factorial. Reading the power rule backwards:</p>

\[\Delta\!\left(\frac{x^{\overline{n+1}}}{n+1}\right) = x^{\overline{n}}\]

<p>which is the discrete twin of \(\int x^n\,dx = \frac{x^{n+1}}{n+1}\).</p>

<h4 id="quick-applications">Quick Applications</h4>

<p>Once you have the power rule and the fundamental theorem, a surprising amount falls out with no cleverness required.</p>

<p><strong>Power sums.</strong> For \(\sum_{x=1}^N x\) we have \(g(x) = x = x^{\overline{1}}\), so the antidifference is \(x^{\overline{2}}/2 = x(x+1)/2\) and</p>

\[\sum_{x=1}^{N} x = \frac{x(x+1)}{2}\Big|_{x=0}^{N} = \frac{N(N+1)}{2}\]

<p>For higher powers, we just rewrite the monomial in the rising-factorial basis. e.g. for \(k=2\) we get \(x^{\overline{2}} = x^2 + x\), and \(x^2 = x^{\overline{2}} - x^{\overline{1}}\), and antidifferencing each piece gives</p>

\[\sum_{x=1}^{N} x^2 = \left(\frac{x^{\overline{3}}}{3} - \frac{x^{\overline{2}}}{2}\right)\Bigg|_{x=0}^{N} = \frac{N(N+1)(N+2)}{3} - \frac{N(N+1)}{2} = \frac{N(N+1)(2N+1)}{6}\]

<p>The same recipe handles \(\sum x^k\) for any \(k\): expand \(x^k\) in rising factorials (the coefficients turn out to be the Stirling numbers) and integrate term by term.</p>

<p><strong>Geometric series.</strong> In ordinary calculus the exponential is special because it’s nearly its own derivative; the same is true here. For a constant \(c\), \(\Delta c^x = c^x - c^{x-1} = c^x\!\left(\frac{c-1}{c}\right)\), so \(c^x\) is its own difference up to a constant, with antidifference \(c^{x+1}/(c-1)\). The fundamental theorem then hands you the geometric series for free:</p>

\[\sum_{x=1}^{N} c^x = \frac{c^{x+1}}{c-1}\Bigg|_{x=0}^{N} = \frac{c^{N+1} - c}{c-1} = \frac{c\,(c^N - 1)}{c-1}\]

<p><strong>Recurrences, and solving Fibonacci.</strong>  Recurrence formulas are the discrete analogues of ODEs:
\(\Delta a_n = g(n) \quad\Longleftrightarrow\quad a_n = a_{n-1} + g(n),\)</p>

<p>To solve a constant-coefficient ODE in school you’re taught to guess \(e^{\lambda x}\) and solve a characteristic polynomial; since \(c^x\) is the discrete exponential, the discrete move is to guess \(a_n = r^n\). Take Fibonacci, \(F_n = F_{n-1} + F_{n-2}\). Substituting \(r^n\) and dividing by \(r^{n-2}\) leaves the characteristic equation</p>

\[r^2 = r + 1 \quad\Longrightarrow\quad r = \frac{1 \pm \sqrt{5}}{2},\]

<p>the golden ratio \(\varphi\) and its conjugate \(\psi\). The general solution is \(F_n = A\varphi^n + B\psi^n\), and the initial conditions \(F_0 = 0\), \(F_1 = 1\) pin down \(A = -B = 1/\sqrt{5}\) to give Binet’s formula</p>

\[F_n = \frac{\varphi^n - \psi^n}{\sqrt{5}}\]]]></content><author><name></name></author><category term="thoughts" /><category term="math" /><summary type="html"><![CDATA[I’m not sure why, but high school calculus traditionally jumps straight into the continuous setting completely ignoring the fact that most of the computational methods have clear discrete analogues.]]></summary></entry><entry><title type="html">The Optimal Amount of Illiquidity is Non-Zero</title><link href="http://ryantolsma.com/thoughts/2026/03/19/information-markets.html" rel="alternate" type="text/html" title="The Optimal Amount of Illiquidity is Non-Zero" /><published>2026-03-19T00:00:00+00:00</published><updated>2026-03-19T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2026/03/19/information-markets</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2026/03/19/information-markets.html"><![CDATA[<p>Prediction markets have been taking off. Unsurprisingly, the casino-ification of everything with sports betting, election betting, etc. often gets framed as an information access democratization project with all of the fuzzy happy social good vibes that verbiage bestows. The usual framing is that markets are the best information aggregator we’ve ever built, so making them bigger, more liquid, and more accessible is an unambiguous social good. This is obviously incorrect with diminishing marginal returns in the extreme, but even more so, actually perpetuates inequality.</p>

<h3 id="information-is-only-valuable-when-its-asymmetric">Information is only valuable when it’s asymmetric</h3>

<p>The value of information is tied to its asymmetry of access: knowledge is counterfactually worth something only insofar as not everyone has access to it in an efficient market hypothesis world.</p>

<p>Today’s access asymmetry isn’t randomly distributed. Excutive insiders know about the acquisition first. The donor families hear about the policy shifts in real time. The 20B quant fund has the earned access from colocated serveris and proprietary data feeds. Access to information has always been a function of where you sit in the existing hierarchy of capital, power, and connection.</p>

<p>So “the value of information is its asymmetry” is also saying that the returns to information accrue to people who are already networked into the existing hierarchy, implying that when information becomes <em>more</em> valuable, by expanding  markets volume and liquidity, can entrench existing power rather than democratize it. The frictions we have in markets both regulated (insider trading rules, halts, leverage caps, market cap mins) and emergent (pace of information exchange, capital access, etc.) are actually desirable as they regularize the net value extraction possible from information asymmetry.</p>

<h3 id="why-i-dont-like-prediction-markets">Why I don’t like prediction markets</h3>

<p>The idea that markets <em>should be</em> the primary channel for disemmination is a recent phenomena within the last fifty year. Historically, for most things that matter to people’s lives like local news, economy, foreign policy etc., the marginal value of a real-time price over ordinary reporting and news outlets is small. Fundamentally, equity markets are a growing asset class and so there’s value creation in expanding access: we’re willing to have retail pay to play (via lower information) because fundamentally the pie is growing and so over a sufficiently long time horizon of investment the EV is positive.</p>

<p>Prediction markets don’t allow for this. Fundamentally these assets are zero sum and the EV of retail trades is always negative, just like gambling, bringing along all of the other severe negative social effects and behaviors associated with it as well. Its hard for me to see how pursuing liquidity here is justified or worth any investment in as a society.</p>]]></content><author><name></name></author><category term="thoughts" /><category term="thinky" /><summary type="html"><![CDATA[Prediction markets have been taking off. Unsurprisingly, the casino-ification of everything with sports betting, election betting, etc. often gets framed as an information access democratization project with all of the fuzzy happy social good vibes that verbiage bestows. The usual framing is that markets are the best information aggregator we’ve ever built, so making them bigger, more liquid, and more accessible is an unambiguous social good. This is obviously incorrect with diminishing marginal returns in the extreme, but even more so, actually perpetuates inequality.]]></summary></entry><entry><title type="html">IVF Selection is Mid</title><link href="http://ryantolsma.com/thoughts/2025/10/24/genome-screening-mid.html" rel="alternate" type="text/html" title="IVF Selection is Mid" /><published>2025-10-24T00:00:00+00:00</published><updated>2025-10-24T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2025/10/24/genome-screening-mid</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2025/10/24/genome-screening-mid.html"><![CDATA[<p>IVF embryo selection is having a moment. Companies like Orchid Health are pitching parents on the promise of optimizing their future kids for IQ, height, disease resistance, and other desirable phenotypes with celebs and politicians (quietly) leaning in. The tech is real and improving, but the actual upside and long-term vision is limited by some pretty basic math.</p>

<p>The ceiling on selection power is … low. There’s fundamental constraints on what you can do with \(N\) samples from a highly polygenic distribution.</p>

<h3 id="selection-power-grows-logarithmically">Selection Power Grows Logarithmically</h3>

<p>In a typical egg harvest, you get maybe 10-15 viable embryos if you’re lucky, rarely more than 50-100 even in aggressive scenarios.</p>

<p>With IVF selection effectively choosing the max of \(N\) samples based on some objective function, and given our sample sizing that translates to just 3-7 bits of selection power.</p>

<p>But it gets worse when you account for how these traits actually work genetically. Height is controlled by thousands of genetic variants. IQ is even more polygenic. They’re sums of thousands of small effects with few if any big hitters. We can model each embryo’s genetic potential distribution \(X\) for a polygenic trait as a sum of \(K\) i.i.d variables contributing to the phenotype effect, which by the Central Limit Theorem implies \(X\) can be modeled as a normal distribution. Depending on the polygeneity of the phenotype, the variance of \(X\) can already be quite small across samples, as \(\sigma \sim O(\frac{1}{\sqrt{k}})\).</p>

<p>The question then becomes, can we improve on \(E[X]\)? How much better can we do by selecting \(N\) samples from \(X\)?</p>

<p>Rescaling \(X\sim N(0,1)\), take \(X_1, X_2, \ldots, X_N \stackrel{\text{i.i.d}}{\sim} N(0,1)\), we want to understand \(\mathbb{E}[Z]\) where \(Z = \max(X_1, \ldots, X_N)\).</p>

<p>To bound \(E[Z]\) we can use the CDF:</p>

\[\begin{align*}
P(Z \leq z) &amp;= P(X_1 \leq z, \ldots, X_N \leq z) \\
&amp;= \Phi(z)^N
\end{align*}\]

<p>where \(\Phi\) is the standard normal CDF. For the tail bound, note that for large \(z\):</p>

\[P(X_i &gt; z) \approx \frac{1}{\sqrt{2\pi}z}e^{-z^2/2}\]

<p>By union bound: \(P(Z &gt; z) \leq N \cdot P(X_1 &gt; z)\). Setting \(z = \sqrt{2\log N}\):</p>

\[\begin{align*}
P(Z &gt; \sqrt{2\log N}) &amp;\leq N \cdot \frac{1}{\sqrt{4\pi \log N}} e^{-\log N} \\
&amp;= \frac{1}{\sqrt{4\pi \log N}} \to 0
\end{align*}\]

<p>Similarly, we can show concentration below this threshold is exponentially small, giving us that \(Z\) concentrates around \(\sqrt{2\log N}\) and therefore \(\mathbb{E}[Z] \approx \sqrt{2\log N}\).</p>

<p>The math here is unforgiving. Selection power scales incredibly slowly as \(\sqrt{2\log N}\), and you’re at best getting a tiny constant factor improvement on \(\sigma\) which is low from \(\frac{1}{\sqrt{K}}\).</p>

<h3 id="conclusion">Conclusion</h3>

<p>Selection upside is fundamentally limited by information theory and biology. The traits you sample are highly concentrated due to polygenic effects and you can’t improve on it by scaling sampling.</p>

<p>The technology right now shines at screening out rare genetic diseases, which are extremley sparsely distributed, requiring very few bits of selection power to remove.</p>

<p>For polygenic trait optimization – smarter, taller, more athletic kids – the ceiling is low and already here.</p>]]></content><author><name></name></author><category term="thoughts" /><category term="thinky" /><summary type="html"><![CDATA[IVF embryo selection is having a moment. Companies like Orchid Health are pitching parents on the promise of optimizing their future kids for IQ, height, disease resistance, and other desirable phenotypes with celebs and politicians (quietly) leaning in. The tech is real and improving, but the actual upside and long-term vision is limited by some pretty basic math.]]></summary></entry><entry><title type="html">Fun Derivative Eigenfunctions</title><link href="http://ryantolsma.com/thoughts/2025/07/06/discrete-derivative-eigenfunctions.html" rel="alternate" type="text/html" title="Fun Derivative Eigenfunctions" /><published>2025-07-06T00:00:00+00:00</published><updated>2025-07-06T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2025/07/06/discrete-derivative-eigenfunctions</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2025/07/06/discrete-derivative-eigenfunctions.html"><![CDATA[<p>I came across <a href="https://thenumb.at/Functions-are-Vectors/">this article</a> today on top of Hackernews which reminded me of some quant interview questions requiring some clever discrete derivative matrix tricks. I realized after reading the article, that you can construct a new clever proof that \(\frac{d}{dx} \phi(x) = a\phi(x) \iff \phi(x) = e^{ax}\) in the discrete perspective.</p>

<p>The article takes a different basis approach, representing functions as vectors of polynomial coefficients, which simplifies the picture. However, with a cute reframing you can generalize this to the standard positional basis, where functions are infinite-dimensional vectors with coordinates representing evaluations \(f_n = f(x_n), x_n \in \mathbb{R}\).</p>

<p>To start, consider a circular permutation matrix of dimension \(N\):</p>

\[P_N = \begin{pmatrix} 
0 &amp; 1 &amp; 0 &amp; 0 &amp; \cdots &amp; 0 \\
0 &amp; 0 &amp; 1 &amp; 0 &amp; \cdots &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1 &amp; \cdots &amp; 0 \\
\vdots &amp; \vdots &amp; \vdots &amp; \vdots &amp; \ddots &amp; \vdots \\
0 &amp; 0 &amp; 0 &amp; 0 &amp; \cdots &amp; 1 \\
1 &amp; 0 &amp; 0 &amp; 0 &amp; \cdots &amp; 0
\end{pmatrix}\]

<p>As a permutation matrix of size \(N\), the eigenvalues are the \(N\) roots of unity \(\varphi_a\) and the eigenvectors from the single permutation cycle are represented by the \(N\) periodic Fourier Modes \(v_a = \frac{1}{N}\left(1, \omega^a, \omega^{2a}, \ldots, \omega^{(N-1)a} \right)\) where \(\omega = \exp\left(\frac{2\pi i}{N}\right)\).</p>

<p>Now, let’s view the derivative as an infinite dimensional operator</p>

\[\begin{align*} A  = \frac{d}{dx} = \frac{1}{\epsilon}\begin{pmatrix} 
1 &amp; -1 &amp; 0 &amp; 0 &amp; \cdots \\
0 &amp; 1 &amp; -1 &amp; 0 &amp; \cdots \\
0 &amp; 0 &amp; 1 &amp; -1 &amp; \cdots \\
0 &amp; 0 &amp; 0 &amp; 1 &amp; \cdots \\
\vdots &amp; \vdots &amp; \vdots &amp; \vdots &amp; \ddots
\end{pmatrix} \end{align*}\]

<p>where, in the linearized view, “rows” correspond to discrete evaluations of a functional at a point, spaced \(\epsilon\) apart as we take \(\lim \epsilon \to 0\).</p>

<p>Next, note that we can decompose \(A\) into the following:</p>

\[\begin{align*}
A =  \lim_{\epsilon\to 0}\frac{1}{\epsilon}\left(I - P_\infty \right)
\end{align*}\]

<p>where \(P_\infty\) is the operator of all ones above the diagonal, and satisfies convergence in operator norm \(\lim_{N\to\infty}\|P_\infty - P_N\| = 0\) to the permutation operator in \(\mathbb{L^2}\).</p>

<p>Then, it becomes clear that the eigenvectors of \(A\) are exactly the eigenvectors of \(P_\infty\) which map exactly onto the Fourier Modes now continuously indexed by \(a\), which directly corresponds to the eigenfunction basis \(e^{ax}\).</p>]]></content><author><name></name></author><category term="thoughts" /><category term="math" /><summary type="html"><![CDATA[I came across this article today on top of Hackernews which reminded me of some quant interview questions requiring some clever discrete derivative matrix tricks. I realized after reading the article, that you can construct a new clever proof that \(\frac{d}{dx} \phi(x) = a\phi(x) \iff \phi(x) = e^{ax}\) in the discrete perspective.]]></summary></entry><entry><title type="html">Some Thoughts on Robotics</title><link href="http://ryantolsma.com/thoughts/2024/07/10/robotics-thoughts.html" rel="alternate" type="text/html" title="Some Thoughts on Robotics" /><published>2024-07-10T00:00:00+00:00</published><updated>2024-07-10T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2024/07/10/robotics-thoughts</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2024/07/10/robotics-thoughts.html"><![CDATA[<p>Last fall, I spent a couple of months actively researching the robotics space for problems to solve or good companies to join. My background from working on RL research with Dorsa and Chelsea’s labs during undergrad, and the rapid capability improvements we’ve witnessed in the last three years had me pretty excited. A lot has changed, but I thought it would be useful to share with others a draft of some of the high-level insights and frameworks I arrived at after talking to researchers, founders, VCs, suppliers, and clients in the industry before deciding for myself not to re-enter the field yet.</p>

<h2 id="draft-notes">Draft Notes</h2>

<h3 id="where-can-a-vc-scale-business-be-built-in-robotics">Where can a VC scale business be built in robotics?</h3>

<p>Like in any industry, you drive by scale by finding broad horizontal problems with sufficient pain to warrant pricing, or select verticals with large enough scope to integrate into. Large verticals that are currently viable for robotics mostly include manufacturing, warehouse logistics, big agriculture, precision surgical/medicine, and fast-food restaurants. This list is constantly expanding as the tech improves and pushes COGs lower, increasing the surface area of accessible markets.</p>

<h3 id="what-can-be-solved-horizontally">What can be solved horizontally?</h3>

<p>At a high level, you need broadly replicable pain points that are also not viewed by companies as core competencies. Core competencies will be brought in-house eventually (case studies: Scale AI AV labeling, Applied Intuition simulation infra sales, Zendesk AI agents, Tecton, and other marginal ML ops providers) and will be resilient to durable sales relations.</p>

<h3 id="what-are-the-high-level-problems-robotics-startups-face">What are the high-level problems robotics startups face?</h3>

<p>I’ve sorted the following list by my personal opinion of most to least solved and labeled whether it’s primarily a vertical or horizontally solved problem:</p>

<ol>
  <li>
    <p><strong>Distribution</strong> (Vertical)</p>

    <ul>
      <li>
        <p>For most companies, this is likely to be viewed as a core competency and remain so in the future. The playbook here feels similar to the wave of vertical SaaS OpenAI wrapper companies, where distribution and domain expertise are the primary moats and value drivers.</p>
      </li>
      <li>
        <p>An additional differentiator to AI SaaS providers is that the hardware stack for robotics is not unified across use-cases, which prevents distribution from scaling horizontally well in general.</p>
      </li>
    </ul>
  </li>
  <li>
    <p><strong>Hardware</strong> (Vertical now, Horizontal in ~5-10 years)</p>

    <ul>
      <li>Outside of large verticals where the hardware stack is likely to unify, this is typically viewed as a core competency by most incumbents and new players in the space.</li>
      <li>
        <p>As better general use-case hardware develops, this will decrease in relative importance from a core function (“we need custom hardware to solve the problem”) to a competitive operational advantage (“we need custom hardware to reduce costs or drive efficiency compared to competitors”). Similar to the open-source platform and AI model communities, once more effective general use-case hardware hits the markets, the cost scaling benefits of standardized manufacturing will eventually dramatically drive down the marginal value of custom hardware.</p>
      </li>
      <li>Together, hardware production and physical distribution are the two main components contributing to fragmentation and stickiness of distribution. Lack of standardization contributes heavily to higher switching costs, both from physical replacements and the operational adjustments required to integrate it (ever tried the same prompt and swapping GPT and Claude?). This has implications for centralization (like any fab-style production: GPUs, CPUs, LLM pre-training, etc.) unless effective horizontal platforms and OSS communities develop (everyone is still custom hacking ROS internally…).</li>
    </ul>
  </li>
  <li>
    <p><strong>Perception</strong> (Horizontal)</p>

    <ul>
      <li>
        <p>Vision models have gotten surprisingly good at the edge over the last three years, and edge compute and specialized chips are really pushing the frontier on what robots can now do in real time.</p>
      </li>
      <li>
        <p>Other modalities of perception (LiDAR, radar, ultrasonic sensors, and infrared cameras) have less accessible public data, which might be limiting useful adoption from new players.</p>
      </li>
      <li>
        <p>Outside of niche applications and modalities, perception is a pretty well-understood problem, and the majority of recent focus has been on tail edge cases. Finding instances of serviceable edge-cases seems like a promising approach to sourcing customers. For example, real-time vision safety modules to help prevent heavy machinery/robotics accidents in factory environments.</p>
      </li>
      <li>
        <p>Currently, perception seems primarily internalized as it’s heavily coupled with hardware choice and power/latency tradeoffs and linked to safety, which has severe downside risks if not appropriately managed internally. I expect this to change over the next couple of years as horizontal providers reach acceptable thresholds/tradeoffs in both, as it’s clearly not viewed as a defendable moat.</p>
      </li>
    </ul>
  </li>
  <li>
    <p><strong>Data</strong> (Vertical but with horizontal infra plays)</p>

    <ul>
      <li>
        <p>As LLMs have started to dominate media, it’s growing awfully apparent that data will become a core competency and moat for traditional platforms.</p>
      </li>
      <li>
        <p>In robotics, data has significant barriers to access. It’s coupled to your hardware sensors and on-policy control procedures, and can require time-consuming physical interactions to extract realistic environments.</p>
      </li>
      <li>
        <p>The real2sim gap still exists but is slowly getting better. The reality of long-tail edge cases, however, limits the effectiveness of iterating too reliantly on simulations as your ability to safely extrapolate to real-world deployments is dubious at best.</p>
      </li>
      <li>
        <p>Simulations are clearly horizontal infrastructure, and I’m optimistic that in the near term new players can exist somewhere in-between to augment or curate physically gathered data (i.e., through data augmentation, scene analysis filtering) in a way that doesn’t compete with the existing bloated field of traditional ML ops providers.</p>
      </li>
    </ul>
  </li>
  <li>
    <p><strong>Control</strong> (Vertical now, Horizontal in ~5-10 years)</p>
  </li>
</ol>

<ul>
  <li>
    <p>Control is by far the least resolved component in the technical stack and might better be referenced as environment modeling in its current state. In the short term, this is a strongly differentiated capability (Waymo vs. everyone else?), but I suspect like with most software/algorithmic progress eventually this will change or centralize like in the case of foundation model labs.</p>
  </li>
  <li>
    <p>Traditional control methods work extremely well as functional primitives, supplied with environment model inputs and called with intent from an intelligent orchestrator (often a tokenized action transformer). A primary bottleneck is gathering sufficient data to test automated control on the long tail of edge cases. For this reason, controlled environments or those with limited human interaction are currently the primary targets.</p>
  </li>
  <li>
    <p>Compared to the other components, this is the purest “algorithmic” problem with low capital barriers to access. The physical economies of scale associated with distribution, hardware development/production, and data gathering might not necessarily apply here if algorithmic unlocks can be found.</p>
  </li>
</ul>

<h3 id="conclusion">Conclusion</h3>

<p>There’s a ton to expand on here across the stack, including a lot of key components I’m leaving out, but I’m hoping that others interested in starting or evaluating robotics companies will find this useful. While I’m not currently involved or actively looking right now, I’m still very excited and interested in the five-year horizon, and would love to hear any pushback or new insights you might have.</p>]]></content><author><name></name></author><category term="thoughts" /><category term="thinky" /><summary type="html"><![CDATA[Last fall, I spent a couple of months actively researching the robotics space for problems to solve or good companies to join. My background from working on RL research with Dorsa and Chelsea’s labs during undergrad, and the rapid capability improvements we’ve witnessed in the last three years had me pretty excited. A lot has changed, but I thought it would be useful to share with others a draft of some of the high-level insights and frameworks I arrived at after talking to researchers, founders, VCs, suppliers, and clients in the industry before deciding for myself not to re-enter the field yet.]]></summary></entry><entry><title type="html">Topological Problems in Voting</title><link href="http://ryantolsma.com/thoughts/2024/06/14/topological-voting.html" rel="alternate" type="text/html" title="Topological Problems in Voting" /><published>2024-06-14T00:00:00+00:00</published><updated>2024-06-14T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2024/06/14/topological-voting</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2024/06/14/topological-voting.html"><![CDATA[<p>Back in college, I developed an interest in unexpected impossibility proofs applied to real world systems. The fact that certain abstract mathematical structures inherently have limitations which profoundly impact actual applications is both captivating and sobering. Here’s a cute instance of topological properties applied to voting systems a friend shared with me through <a href="https://youtu.be/v5ev-RAg7Xs?si=X1LY6Qc_s-HDqI3S">this video</a> (we’ll take a slightly different approach).</p>

<h2 id="background-arrows-theorem">Background: Arrow’s Theorem</h2>

<p>Arrow’s Theorem<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> is the most famous impossibility theorem applied to voting systems – lots of articles and papers have spent time introducing and discussing its implications. In essence, Arrow’s Theorem states that a voting process which ranks candidates in an absolute total order cannot simultaneously satisfy:</p>

<ol>
  <li>
    <p>Non-Dictatorship - no single voter dominates the output preferences</p>
  </li>
  <li>
    <p>Pareto Efficiency - if all voters rank candidate A over B, then the resulting rankings support \(A \succcurlyeq B\)</p>
  </li>
  <li>
    <p>Independence of Irrelevant Alternatives - if \(A \succcurlyeq B\) and a new candidate C is introduced, then the new ranking still requires \(A \succcurlyeq B\)</p>
  </li>
</ol>

<p>While this applies to discrete rankings and voter preferences, one might wonder if it’s a unique property of its discrete nature in how candidates are only ranked by ordering. Instead of discrete rankings, could a continuous preference ranking satisfy similar conditions? Unfortunately, a similarly flavored impossibility result holds even in the continuous setting! It seems there’s no getting around the fact that voting is pretty hard to get right.</p>

<h2 id="chichilnisky-impossibility-theorem">Chichilnisky Impossibility Theorem</h2>

<p>The Chichilnisky Theorem <sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup> extends Arrow’s Theorem to the continuous setting, but with slightly different constraints.</p>

<p>Suppose that you have a set of \(K\) voters choosing between \(N\) candidates. Considering only relative preferences, we can represent the preference profile of each voter over the candidates \(p_k \in S^{n-1}\) as a unit vector on the sphere, with each coordinate \((p_k)_i\) representing the allotted relative preference for candidate \(i\). Denoting \(P = S^{n-1}\) as our preference space, then our voting function \(\phi\) becomes a map \(\phi: P^K \to P\) taking some set of preferences \(\phi(p_1,\ldots, p_K) \to u\) to a resulting unit vector preference profile.</p>

<p>The Chichilnisky Theorem states the following cannot be jointly satisfied:</p>

<ol>
  <li>
    <p>\(\phi\) is smooth <sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup> - small changes in voter preferences should result in small changes to \(u\)</p>
  </li>
  <li>
    <p>\(\phi\) respects anonymity - e.g \(\phi(p_1, \ldots, p_K) = \phi(p_{\sigma(1)}, \ldots, p_{\sigma(K)})\)</p>
  </li>
  <li>
    <p>\(\phi\) respects unanimity -  if \(p_1 = \cdots = p_K= u\) then \(\phi(p_1,\ldots,p_K) = u\)</p>
  </li>
</ol>

<h3 id="topological-proof">Topological Proof</h3>

<p>We’ll prove the simplest case of two voters and two candidates, which can be naturally generalized. In this scenario our preference space \(P = S^1\) forms a unit circle and \(\phi: S^1\times S^1 \to S^1\) maps the torus to a circle. The high level idea, is to form two different paths along the torus that have different degrees modulo 2 under \(\phi\) and show that these paths can actually map onto one another forming a contradiction.</p>

<p>For the first path, consider the diagonal \(D = \left \{ (\alpha, \alpha) : \alpha \in S^1 \right\}\) which visually loops around the torus at an angle, such that it rotates along the inner and outer loops exactly once by the time it closes. If we restrict \(\phi \vert_D\), then by the unanimity condition we know that \(\phi\vert_D(\alpha,\alpha)=\alpha\) is one-to-one which satisfies \(\deg \phi\vert_D = 1\).</p>

<p>For our second path, let’s take \(A = \{\alpha\} \cup S^1\) and its symmetric counterpart \(B = S^1 \cup \{\alpha\}\) for some \(\alpha\in S^1\) which form an orthogonal figure-eight, with \(A,B\) representing circles rotating directly on the outer and inner loop respectively. If we look at the restriction \(\phi \vert_{A\cup B}\), then again by symmetry, we see that \(\deg \phi \vert_{A\cup B} = 0\ \text{mod}\ 2\) at any regular value by pairing points in the preimage from both components of the figure-eight. Clearly \(A\) and \(B\) intersect at just the one point \((\alpha,\alpha)\in D\) non-smoothly but otherwise form a connected path. So if we take a small \(\epsilon\) sized smooth deformation at \(D\cap (A\cup B)\) to shift away from the intersection at \((\alpha,\alpha)\) to form a non self-intersecting loop \(L\), then \(\deg \phi \vert_L = 0 \ \text{mod}\ 2\) at all of its regular points as well.</p>

<p>Finally, we can find a homotopy to smoothly deform \(L\) into \(D\) (they’re both just loops now) which produces a contradiction as \(\deg \phi\vert_D \neq \deg\phi\vert_L\)!</p>

<p>This notion of taking the diagonal and paths in \(P^K\) naturally generalizes when you look at degree mod 2. Here, we had to rely on smoothness for our path homotopy invariants to apply, but some heavy machinery homological approaches also extend this result to continuous settings.</p>

<h4 id="footnotes">Footnotes</h4>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p><a href="https://en.wikipedia.org/wiki/Arrow%27s_impossibility_theorem">Arrow’s Theorem</a> <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p><a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1367741">Chichilnisky Theorem</a> <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>Only continuity is actually required, but you can approximate the continuous map arbitrarily closely with a smooth one, and this simplifies the proof <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="thoughts" /><category term="math" /><summary type="html"><![CDATA[Back in college, I developed an interest in unexpected impossibility proofs applied to real world systems. The fact that certain abstract mathematical structures inherently have limitations which profoundly impact actual applications is both captivating and sobering. Here’s a cute instance of topological properties applied to voting systems a friend shared with me through this video (we’ll take a slightly different approach).]]></summary></entry><entry><title type="html">Modelling Counterfactual Impact</title><link href="http://ryantolsma.com/thoughts/2023/06/06/counterfactual-impact.html" rel="alternate" type="text/html" title="Modelling Counterfactual Impact" /><published>2023-06-06T00:00:00+00:00</published><updated>2023-06-06T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2023/06/06/counterfactual-impact</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2023/06/06/counterfactual-impact.html"><![CDATA[<p>You’re a bright young kid striving to change the world. As a pure bred rationalist, you of course seek to maximize your counterfactual altruistic impact, but in practice, what does that mean?</p>

<p>I’ll attempt to convince you, based on a simplified mathematical model, that seeking counterfactual impact implies prioritizing fields which have opportunities for heavy-tailed contributions regardless of the talent distribution.</p>

<h1 id="being-average">Being Average</h1>

<p>Let’s start with a simple model of the world. For a given altruistic field \(F\) (e.x medicine), assume talent is distributed from some underlying distribution \(\mathcal{D}\), and that \(F\) is supplied constrained with a fixed number \(N\) of contributors.</p>

<p>Let \(X_1, \ldots, X_N \stackrel{\text{i.i.d}}{\sim} \mathcal{D}\) represent the impact of the \(N\) contributors to \(F\), and being humble for now, we assume that in expectation we’re identical to everyone else throwing their hat in the ring, letting \(X_{N+1}\sim \mathcal{D}\) represent our own impact. What is the counterfactual impact in this scenario?</p>

<p>Well, taking the difference between the worlds where you do and don’t contribute, we see that the counterfactual impact \(I\) is expressed as:</p>

\[\begin{align*}
I &amp;= \mathbb{E}[ \sum_{i=1}^{N+1} X_i - \min(X_1, \ldots, X_{N+1}) ] - \mathbb{E}[ \sum_{i=1}^{N} X_i ] \\
&amp;= \mathbb{E}[ X_{N+1} - \min(X_1, \ldots, X_{N+1}) ]
\end{align*}\]

<p>When is this value large?</p>

<p>Well, if the distribution \(\mathcal{D}\) has a heavy left tail, then the difference between the average and minimum values will be large, and so the counterfactual impact will be large. But, generally speaking, impact is a non-negative quantity, so the counterfactual impact here is upper bounded by \(\mathbb{E}[X_{N+1}]\), which naively represents a maximum relative change of \(\frac{1}{N}\) percent to the field!</p>

<p>For any significantly sized field, this implies that your <em>relative</em> counterfactual impact is negligible if you don’t expect to significantly outperform the average. For many, relative impact is also a proxy for how much pride and value you can derive from your work, so this is a fairly pretty depressing result when the peer group is \(F\) itself.</p>

<h1 id="being-the-best">Being the Best</h1>

<p>Well now, of course no self-respecting ambitious altruist aims to achieve <em>just</em> an average impact. So, let’s graciously assume that we’re the top of the top, best of the pack, and implicitly condition on \(X_{N+1} = \max(X_1,\ldots, X_{N+1})\). What does this imply for our counterfactual impact?</p>

<p>Again, taking the difference between the worlds where we do and don’t contribute we find:</p>

\[\begin{align*}
I &amp;= \mathbb{E}[ \sum_{i=1}^{N+1} X_i - \min(X_1, \ldots, X_{N+1}) ] - \mathbb{E}[ \sum_{i=1}^{N} X_i ] \\
&amp;= \mathbb{E}[ \sum_{i=1}^{N+1} X_i - \min(X_1, \ldots, X_{N+1}) ] - \mathbb{E}[\sum_{i=1}^{N+1} X_i - \max(X_1,\ldots, X_{N+1})] \\
&amp;= \mathbb{E}[ \max(X_1,\ldots, X_{N+1})  - \min(X_1,\ldots, X_{N+1})] \\
&amp;\leq \mathbb{E}[\max(X_1, \ldots, X_{N+1})] \quad \text{since  } X_i \geq 0
\end{align*}\]

<p>As expected, our counterfactual impact in this scenario is strictly greater now that we’re the best. Intuitively, distributions for which this maximum can be large relative to average is what we’re looking for – effectively, heavy right-tailed distributions. Here, we easily see that the relative impact is now instead given by</p>

\[\begin{align*}\frac{\mathbb{E}[\max(X_1, \ldots, X_{N+1})]}{N \mathbb{E}[X_i]}\end{align*}\]

<p>Interestingly, for distributions in which</p>

\[\begin{align*}
\lim_{N\to \infty} \max(X_1, \ldots, X_{N+1}) - \max(X_1, \ldots, X_N) &gt; \mathbb{E}[X_i]
\end{align*}\]

<p>we see that it’s actually better to choose fields with <em>larger</em> \(N\), where our assumption of being the best is stronger and utilized with greater effect.</p>

<p>To help give some intuition where this phase transition might apply, consider \(\mathcal{D}\) explicitly as the Pareto Distribution<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup> with parameter \(\alpha\), which is widely used for modelling talent and real world output distributions. For \(\alpha &gt; 1\) (required for finite mean), a quick lookup indicates that \(\mathbb{E}[X_i] \sim \mathcal{D}_\alpha = \frac{\alpha}{\alpha-1}\) and the CDF and inverse CDF are given by</p>

\[\begin{align*}
F(x) &amp;= 1 - \frac{1}{x^\alpha} \\

\implies F^{-1}(x) &amp;= \frac{1}{(1-x)^\alpha} \quad \text{Convex on } [0,1]
\end{align*}\]

<p>Now since we can view \(X_1,\ldots,X_{N+1}\sim \mathcal{D}_\alpha\) as first sampling uniformly in <em>percentile</em> space, and then applying the inverse CDF \(F^{-1}\), this gives us a very simple route to determining the counterfactual impact for a given \(N\) and \(\alpha\). From properties of the uniform distribution, we know that \(\mathbb{E}[\max(F(X_1),\ldots, F(X_{N}))] = 1 - \frac{1}{N}\), and so applying some harmless trickery (to avoid real math), we see that</p>

\[\begin{align*}
I &amp;= \mathbb{E}[ \max(X_1, \ldots, X_{N+1}) - \max(X_1,\ldots, X_{N})] \\
&amp;= \mathbb{E}[ \max(F^{-1}(F(X_1)),\ldots, F^{-1}(F(X_{N+1}))) - \max( F^{-1}(F(X_1)),\ldots, F^{-1}(F(X_{N})))] \\
&amp;= \mathbb{E}[ F^{-1}(\max(F(X_1)),\ldots, F(X_{N+1})) - F^{-1}(\max( F(X_1),\ldots, F(X_{N})))] \\
&amp;\geq F^{-1}(\mathbb{E}[ \max(F(X_1)),\ldots, F(X_{N+1})])- F^{-1}(\mathbb{E}[\max( F(X_1),\ldots, F(X_{N}))]) \quad \text{ by Jensen's} \\
&amp;= F^{-1}(1 - \frac{1}{N+1}) - F^{-1}(1 - \frac{1}{N}) \\
&amp;= (N+1)^\alpha - N^\alpha \\
&amp;&gt; \alpha N
\end{align*}\]

<p>Surprisingly, even for the Pareto Distribution we see that for \(N \geq \frac{\alpha}{\alpha-1}\) that it becomes <em>better</em> for us to choose fields with larger \(N\) in terms of relative impact! Notably, for most reasonable values of \(\alpha\) this phase transition begins at surprisingly low values of \(N\).</p>

<h1 id="being-the-z-th-percentile">Being the z-th Percentile</h1>

<p>Now, sticking with the Pareto Distribution, let’s consider a slightly more realistic scenario . Suppose that we’re not the best, but instead the \(z\)-th percentile of the field, and we enter regardless of whether or not we’re worse than everyone else. What does this imply for our counterfactual impact?</p>

<p>To start, note that this implies \(F(X_{N+1}) = z\). Manipulating our previous result to use \(F^{-1}(z)\) instead of \(\max(X_1,\ldots,X_{N+1})\), it’s easy to see that the counterfactual impact is now given by</p>

\[\begin{align*}
I &amp;= F^{-1}(z) - \mathbb{E}[ \max(X_1,\ldots, X_{N})] \\
&amp;\geq \frac{1}{(1-z)^\alpha} - F^{-1}(1-\frac{1}{N}) \\
&amp;= \frac{1}{(1-z)^\alpha} - N^\alpha 
\end{align*}\]

<p>So in terms of \(N\), the phase transition at which it becomes better to choose fields with larger \(N\) for maximizing relative impact is specified by</p>

\[\begin{align*}
\frac{1}{(1-z)^\alpha} - N^\alpha  &amp;&gt; \frac{\alpha}{\alpha-1} \\
\implies z &amp;&gt; 1 - \left( \frac{1}{N^\alpha + \frac{\alpha}{\alpha - 1}} \right)^\frac{1}{\alpha} \\
&amp;&gt; 1 - \frac{1}{N} \quad \text{ for } \alpha &gt; 1
\end{align*}\]

<p>which effectively equates to being the best in the field. This has the surprising conclusion, that unless you really are going to be the best at what you do, the relative impact of your work will be maximized in smaller, less competitive fields, even for common heavy tailed distributions.</p>

<h1 id="conclusion">Conclusion</h1>

<p>These are pretty simplified models, but still further advance my intuition towards seeking tail upside opportunities (confirmation bias, possibly?) to maximize net impact, and pursuing less competitive, smaller contexts to maximize relative impact. Reality is, however, that most of the time, tail opportunities and performance aren’t particularly accessible to most and aren’t nearly as random as I’d like, and so these insights should be taken with a grain of salt.</p>

<p>In the future, some simple extensions of this model to that would be fun to look into include: sampling \(K\) people applying to join field \(F\) and only choosing the top \(N\), introducing multiple competitive fields to choose from, and adding uncertainty to your own performance estimates.</p>

<h4 id="footnotes">Footnotes</h4>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p><a href="https://en.wikipedia.org/wiki/Pareto_distribution">Pareto Distribution</a> <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="thoughts" /><category term="thinky" /><summary type="html"><![CDATA[You’re a bright young kid striving to change the world. As a pure bred rationalist, you of course seek to maximize your counterfactual altruistic impact, but in practice, what does that mean?]]></summary></entry><entry><title type="html">Reflections on a Stanford Journey</title><link href="http://ryantolsma.com/thoughts/2023/06/05/stanford-reflection.html" rel="alternate" type="text/html" title="Reflections on a Stanford Journey" /><published>2023-06-05T00:00:00+00:00</published><updated>2023-06-05T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2023/06/05/stanford-reflection</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2023/06/05/stanford-reflection.html"><![CDATA[<p>It’s now been almost two years since graduating from Stanford, and I wanted to carve out a post to reflect deeply on how well I spent my time there, now with the benefit of hindsight, and with the additional goal of informing my future self to bias towards activities that matter longer term. There a variety of ways to measure quality of time, but the core aspects that I’ve grown to appreciate can be broadly categorized within: social life, health, career, and academics<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>.</p>

<p>Since at any given time, I found myself optimizing between these categories simultaneously, I’ll present a quarter by quarter rating of each with some brief commentary and use (*) to highlight particularly high quality experiences or activities.</p>

<h1 class="bigh" id="fall-2017">Fall 2017</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 6/10</li>
  <li>Health: 5/10</li>
  <li>Academics/Career: 7/10</li>
</ul>

<p><strong>Coursework</strong> (20): Econ 1, CS 106X, Math 113*, Freshman Writing Seminar (ESF)</p>

<p>Adjusting to Stanford was fairly difficult my first quarter. As a natural introvert and lifetime cynic, finding social groups outside of dorm activities or in clubs was tough, and I ended up having large blocks of free time by myself which was undesirable.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Despite mostly restricting social life to my dorm, I’ve met many of my closest lifetime friends there</li>
  <li>Engaging philosophical discussions with dormmates which helped solidify awareness of my own lack of understanding and consistency</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Not taking the standard Math/Physics courses to meet other freshman</li>
  <li>Not joining non pre-professional clubs (like sports, etc.) to meet friends</li>
  <li>Not finding a consistent fun physical activity to engage with people in (does Ping Pong count?)</li>
</ul>

<h1 class="bigh" id="winter-2018">Winter 2018</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 9/10</li>
  <li>Health: 8/10</li>
  <li>Academics/Career: 7/10</li>
</ul>

<p><strong>Coursework</strong> (22): Math 62CM*, CS 161, CS 107, CS 43, CS 22, PHIL 120</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>My friendships within the dorm community expanded and deepened significantly</li>
  <li>Taking Math 62CM, significantly developed my abstract reasoning skills, and also introduced me to a lot of friends from the Math major community</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Didn’t touch grass enough (a recurring mistake throughout most of my collegiate experience)</li>
  <li>Naively thought socializing a lot meant drinking a lot. This was mostly corrected in future quarters, but is one of the first examples of “Ryan is a sheeple”</li>
</ul>

<h1 class="bigh" id="spring-2018">Spring 2018</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 2/10</li>
  <li>Health: 3/10</li>
  <li>Academics/Career: 10/10</li>
</ul>

<p><strong>Coursework</strong> (22): Math 120, Math 147, Physics 65, CS 166*, CS231N*, CS142</p>

<p>One of my goals throughout freshman year was to find my intellectual/productive limits, which I aimed to accomplish by upping my course load difficulty each quarter until I broke. This quarter was by far my most taxing and difficult throughout college, due to the quantity of work and my own lacking academic maturity, which firmly had me reach the goal of breaking. Most of my memories from this quarter are whirlwinds of psetting in the dark on limited sleep with friends or alone, with little sunlight or external social activity outside of the first week of classes.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Deepened relations with close friends in the Math and CS communities, and finally met the Physics kids in the honors sequence which was nice</li>
  <li>Found my academic limits, learned a ton of cool material, and drank the firehose of knowledge with the highest density of intellectually fun classes I’ve taken at Stanford</li>
  <li>Realized pretty clearly, that being a great theory PhD in Math was out of the question – the classmates in my twelve student Differential Topology course somehow self-selected quite strong that quarter, to the point where I felt talent-wise near the bottom quartile of the class. This was a great wake-up call looking back (at the time, was quite upset), as it really helped me bias towards more realistic paths</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Didn’t touch grass enough or see the sun in beautiful Spring weather</li>
  <li>Didn’t give myself enough free time to relax and reflect which had mental health tolls</li>
</ul>

<h1 class="bigh" id="summer-2018">Summer 2018</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 8/10</li>
  <li>Health: 9/10</li>
  <li>Academics/Career: 4/10</li>
</ul>

<p><strong>Internship</strong>: Worked at a tech startup (now defunct) as a SWE intern with one of my closest friends. I did a hybrid internship, commuting for a week at a time between home in SoCal and Redwood City (staying at my friend’s place). This was a great, non-demanding summer, where I really got the chance to relax outside, review material and learn new things for fun, and hang with friends.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Sun, grass, friends</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>During my later years in school, I sometimes would regret not taking the more prestigious quant internship offer I had, as I really felt like it would have made recruiting much less stressful/difficult in future years. It’s not totally clear if this was a mistake or not now, but I do think it would have helped me bias my exploration a bit better</li>
</ul>

<h1 class="bigh" id="fall-2018">Fall 2018</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 6/10</li>
  <li>Health: 5/10</li>
  <li>Academics/Career: 9/10</li>
</ul>

<p><strong>Coursework</strong> (22): Math 171, Math 220, Physics 110, CS 221, EE 263, Sophomore Writing Seminar (PWR 2)</p>

<p>Another fairly academic quarter, where I tried to bias more towards applied subjects (Physics and EE), after realizing in Spring that competition in pure theory subjects was brutal. Notably, this was the last quarter I took at Stanford where I was primarily invested in academics – school took less of a priority after I realized math/physics PhD wasn’t necessarily the route I wanted, and actively engaged more in social life, and light exploration of several other academic fields/career choices.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Sophomore year I became roommates with my best friend from Freshman year in my dorm, and our friendship has continually been a highlight of my life</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>I really wanted a study abroad experience in Asia without losing out on being at campus during the school year with friends. So I tried to only apply for internships in China/Singapore/Japan but didn’t have any luck. Being a bit narrow here was short sighted and added unneeded stress later on</li>
  <li>Not touching grass or seeing the sun enough</li>
</ul>

<h1 class="bigh" id="winter-2019">Winter 2019</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 9/10</li>
  <li>Health: 8/10</li>
  <li>Academics/Career: 5/10</li>
</ul>

<p><strong>Coursework</strong> (15): Math 121, Physics 230*, EE 364A*, CS 255, ENGLISH 146A</p>

<p>After realizing my health had suffered during the past Fall/Spring, I decided to take a lighter course load. This proved to be a great decision, and I enjoyed spending the free time socializing with my roommate and other friends. At this point, I also took some of that free time and joined my first club, Christian Intervarsity (IV), where I met a lot of phenomenal people and friends I’ve still kept in touch with. Coincidentally, the courses I took ended up being very high quality, with Physics 230 being my favorite individual course at Stanford, and EE 364A being one of the most useful applied courses taken.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Phenomenal teachers and interesting coursework</li>
  <li>Backgammon, poker, fun reading, and board games with my social communities</li>
  <li>Roommate and I secured quant internships in London together at the same firm (purposefully!). Another instance of “Ryan is a sheeple”, as I really only pursued quant since some smarter friends of mine were doing it and I wanted to be cool like them</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Not a significant amount of physical activity/grass touching</li>
</ul>

<h1 class="bigh" id="spring-2019">Spring 2019</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 8/10</li>
  <li>Health: 8/10</li>
  <li>Academics/Career: 2/10</li>
</ul>

<p><strong>Coursework</strong> (19): Physics 231, CS 272, CS 199, CS 224U, CS 229*</p>

<p>This quarter had a ton of free time which I spent socializing and meeting new people – which has had pretty high returns on my current social life quality. Started my first ever relationship, which I learned a ton about myself from.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Free time, touching grass, sunlight, meeting new people, and getting more involved in the IV club</li>
  <li>Got top score on CS229 final (out of like 600+ people) which was my first topper at Stanford. This truly doesn’t matter (like most clout things lol), except it proved useful as a signal when reaching out to Stanford profs to ask to join their lab as an undergrad researcher later on (some profs would ghost me from my resume, and then I’d reach out again a couple months later with this listed, and they’d suddenly want to talk to me about it explicitly). Leaving this here only to remind myself that sometimes, people care about/weight random things more than you’d expect, and learning what those are can be difficult a priori</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Pretty much all of the classes outside of CS229 were bullshit, which I knew. After the easier Winter had me happier, I leaned a bit too far into the realm of fooling myself with useless classes and stopped learning for the most part this quarter.</li>
  <li>Did independent Research with Anshul Kundaje’s lab (CS199), which was a terrible choice (Anshul is great though). I had never done research before, and without any mentorship or really solid genomics background, ended up mostly doing wasted work</li>
</ul>

<h1 class="bigh" id="summer-2019">Summer 2019</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 6/10</li>
  <li>Health: 7/10</li>
  <li>Academics/Career: 7/10</li>
</ul>

<p><strong>Internship</strong>: Quant Trading in London with my roommate and continued part-time research in Genomics.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Learned a lot during my internship with data science skills and stats</li>
  <li>Read a lot of interesting books in Neuroscience/Computational Biology etc. (thought for a hot sec I should be a doctor to help the world…but that’s not my skill set I’ve realized). Abbot’s Theoretical Neuroscience* was a phenomenal read in particular</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Between work, research, and reading I didn’t spend a lot of time traveling around London or exploring the city as much as I should have. This has been a major regret (when else will I be living there for multiple straight months?)</li>
</ul>

<h1 class="bigh" id="fall-2019">Fall 2019</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 9/10</li>
  <li>Health: 7/10</li>
  <li>Academics/Career: 5/10</li>
</ul>

<p><strong>Coursework</strong> (20): CS 273B, CS 330, CS 279, ECON 180*, Math 230A*, CS 199</p>

<p>I continued to lean into the idea of working in Biotech or going to Med School, by exploring some of the computational aspects of genomics/biology/chemistry. This was a really clear example of fruitful exploration, as by the end of the quarter I was fairly well convinced that this wasn’t the right path for me – this may change over time though, and I’m still intellectually curious about the space!</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Had a fantastic dorm group, with tons of friends (from diverse groups) also drawing into Crothers Hall by happy coincidence. My roommate and I stayed together again after sharing a place in London which was a great cornerstone of my daily social interactions</li>
  <li>Weekly poker games with a large dorm group, and almost daily card games with friends and my roommate in my room</li>
  <li>Secured an internship at QuantCo, which in theme, I really wanted as an opportunity to explore industry applications of ML in healthcare with cool people</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Ended up quitting my independent research at end of quarter after realizing it wasn’t super rewarding/fruitful. I should have quit sooner (back in Spring) or positioned myself in a better position to learn.</li>
  <li>My standard policy of optimizing social life by not attending lectures much really hurt me this quarter, as my game theory class had a lot of interactive material which I missed out on, and missed out on opportunities to meet and join new friend groups through that</li>
  <li>Over prioritized my relationship sometimes, instead of expanding/deepening other social circles. This one was pretty hard for me to see until now</li>
</ul>

<h1 class="bigh" id="winter-2020">Winter 2020</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 6/10</li>
  <li>Health: 6/10</li>
  <li>Academics/Career: 5/10</li>
</ul>

<p><strong>Coursework</strong> (17): CS 259Q, CS 224N, CS 261*, Math 143, Phil 151</p>

<p>The first 8 weeks were pre-covid, and consisted of a lot of fun continuation of the themes in Fall, including the increased emphasis on social life.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>To support career exploration, I wanted to get experiences with industry research in Fintech, ML in academia, and big tech (since “Ryan is a sheeple”, and saw grass that a significant percent of other Stanford sheeple were grazing on)</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Should have shorted S&amp;P in March lol</li>
  <li>Not touching grass, seeing sunlight</li>
</ul>

<h1 class="bigh" id="spring-2020">Spring 2020</h1>
<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 1/10</li>
  <li>Health: 2/10</li>
  <li>Academics/Career: 9/10</li>
</ul>

<p><strong>Coursework</strong> (21): Math 228, EE 180*, CS 110, CS 399, Music 25, German 101</p>

<p><strong>Internship</strong>: Wealthfront*</p>

<p><strong>Research</strong> : RL Research with Dorsa*</p>

<p>Realizing Covid was going to crush any hope of an on-campus experience, I hunkered down and decided to go pretty hard on my work. In hindsight, I really should have taken it easier as I was not in a great mental state (along with everyone else isolated during covid), and really owe it to my family for helping support me throughout.</p>

<p>Luckily, I finally hit the jackpot in terms of mentorship, and my intern manager at Wealthfront was phenomenal despite the pandemic disruptions, and had a really engaging, cool project. Likewise, for my second attempt at academic research I joined a new project in Dorsa’s lab focused on pure RL, and this time I prioritized mentorship and a good team which dramatically improved my experience and output.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Great internship and research projects in terms of both intellectual engagement and mentorship</li>
  <li>Fantastic family support during the stressful pandemic</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Everything was pass fail, so spending too much time on classes I didn’t care about was bad EV. Should have done Wealthfront part-time as I got pretty time-crunched once classes and research picked up</li>
  <li>Not touching grass, seeing sunlight, seeing friends, eating well</li>
  <li>Not actively showing enough appreciation and gratitude to family during this unique time</li>
</ul>

<h1 class="bigh" id="summer-2020">Summer 2020</h1>

<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 7/10</li>
  <li>Health: 7/10</li>
  <li>Academics/Career: 5/10</li>
</ul>

<p><strong>Internship</strong>: QuantCo</p>

<p><strong>Research</strong>: Continued RL Research with Dorsa*</p>

<p>In summer, I prioritized hanging out (socially distanced) with friends, or in organized online gatherings with some consistency. Remote internship ended up being not very time intensive, which I took advantage of to spend more time with research and playing outside.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Great research project and team (wrapped up project end of summer), and chill internship</li>
  <li>Saw Sunlight, touched grass, walked dog, played games with fam</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Between Spring and Summer, lost contact with a lot of friends and acquaintances (who I wanted to get to know better!) in the virtual transition. I think crossing the chasm and reaching out to people directly would have been very rewarding longer term</li>
</ul>

<h1 class="bigh" id="fall-2020">Fall 2020</h1>
<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 5/10</li>
  <li>Health: 4/10</li>
  <li>Academics/Career: 3/10</li>
</ul>

<p><strong>Coursework</strong> (12): Math 116, Math 215A*, Physics 330, Physics 170</p>

<p><strong>Internship</strong>: FB</p>

<p>Lived with some friends in a house during a virtual quarter to try and make the best of quarantine. My memories of this time are very physically dark, as the house had very few windows and we rarely went outside (stayed in a bad neighborhood) and were concerned about Covid. At this point, I had enough to graduate with the Bachelor and Coterm, but for lack of motivation to go and work, decided to just stick it out and play essentially through Spring with the rest of my house/classmates – I think staying was potentially one of the best decisions I made during Stanford, as leaving during Covid would have really stifled any opportunity to rekindle relationships.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Learned the research I did with Dorsa’s lab won CoRL 2020<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>. This was truly pure luck on my part and I’m extremely fortunate to have been part of the team and project by chance. I really enjoyed the accolade, but realize that (1) I wasn’t super passionate about the material during the research process (was still reasonably fun though); (2) Most times, similar effort won’t be recognized; to try and correct my cognitive bias and update away from doing an AI PhD based on this</li>
  <li>Great friends and some of the most interesting classes I got the chance to take – I really liked learning about topology/quantum stuff despite not learning the material very solidly</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Had a terrible team/internship at FB and quit halfway through – should have quit earlier</li>
  <li>Extremely low motivation, with lots of free time (hanging with the same 6 people in a house 24/7…), lead to lots of time wasters like TV/Video Games. In part, I think low motivation contributed to me mostly recruiting for quant instead of aiming for something more unique/ambitious (yet another “Ryan is a sheeple” example)</li>
  <li>Not touching grass, seeing sunlight, eating healthily or learning to cook…</li>
</ul>

<h1 class="bigh" id="winter-2021">Winter 2021</h1>
<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 8/10</li>
  <li>Health: 7/10</li>
  <li>Academics/Career: 6/10</li>
</ul>

<p><strong>Coursework</strong> (24): Math 236, Physics 220, Physics 113, EE 276*, CS 228, Applied Physics 228, Music 19A</p>

<p>Continued living mostly with the same group plus some other friends in a safer, cheaper location out of state where we could afford a bigger place. Hung out and went outside to hike and eat out more as quarantine restrictions relaxed slowly which drastically improved quality of life. Because I was feeling pretty lethargic from all of my video games and free time in Fall, I decided to go a bit harder on coursework – this backfired halfway through the quarter, as I got really pulled into the whole GME saga and ended up spending a majority of my time learning about finance, staring at flashy charts, reading options theory and textbooks, and other dumb things (classic “Ryan is a sheeple” example).</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>Got much closer with my housemates through engaging outdoor activities and shared interests compared with my Fall experience. Learned to barely cook, which was fun</li>
  <li>Settled on QR at Vatic Labs as my post-graduation job</li>
  <li>I had never actually prioritized grades in my academics, and instead prioritized marginal value per effort and breadth/exploration for understanding my interests (my life is often characterized as fleeing from boredom/ennui). Knowing that this would likely be my last rigorous quarter at Stanford, I challenged myself to get as high of a GPA as I could for the quarter which I was proud to semi-succeed at</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Lost money on GME, and spent way too much time looking into dumb finance stuff</li>
  <li>Struggled dealing with house conflicts that inevitably arise in group houses. My dorm roommate was not apart of either Fall/Winter house, and our great relationship had never really been stressed living together in the same way that the group house could at times</li>
</ul>

<h1 class="bigh" id="spring-2021">Spring 2021</h1>
<p><strong>Rating</strong>:</p>
<ul>
  <li>Social Life: 12/10</li>
  <li>Health: 12/10</li>
  <li>Academics/Career: 2/10</li>
</ul>

<p><strong>Coursework</strong> (12): EE 378C, Math 159, Math 215C*, Stats 375</p>

<p>Senior Spring was my victory lap quarter with school finally brought back on campus. With no academic or work requirements left, I heavily prioritized social life and outdoor activities. This quarter is likely the most vibrant and happiest I’ve ever been.</p>

<p><strong>Highlights</strong>:</p>
<ul>
  <li>I <em>really really</em> loved playing Spikeball with friends, and for 1-2 hours on average <em>every</em> day was my go-to social activity throughout the perfect Spring weather. I also scheduled daily meals and hangouts with everyone I possibly could that remained on campus</li>
  <li>Started a habit of taking photos and videos of fun activities in the moment, with the goal of just saving to view for later (I don’t post on social media much). The photos and videos from Senior Spring are things I still view and enjoy, and I’ve kept this up post-grad as one of my favorite ongoing habits</li>
</ul>

<p><strong>Mistakes</strong>:</p>
<ul>
  <li>Mostly none :). Probably could have spent more effort learning material from courses, as they really were quite interesting, but didn’t edge out competing interests for time</li>
</ul>

<h1 class="bigh" id="conclusions">Conclusions</h1>

<p>After writing and reflecting on the above, I think it’s pretty clear to me that there are certain patterns that have held up in terms of improving health and happiness. Some obvious ones are the frequency of social interaction, the quality and intellectual engagement of academic course loads, and having solid teams and mentorship to work with.</p>

<p>Some that seem obvious now but clearly were not in retrospect include the quantity of time spent outdoors and the consistency of physical activity. Clearly, I was hanging out with friends and playing games quite a bit, but why didn’t I do those activities <em>outside</em>? Smh.</p>

<p>There are also some things I spent a lot of energy on that, given my current path, seem wasted, but weren’t quite so clear at the time. I spent a solid few quarters on genomics research and learning computational approaches in biology/chemistry, which I’ll likely never use. But, these types of things, I suppose, are only clear in hindsight. Between my FB internship and genomics research, I realize that quitting was certainly the right move, but in the future, it might be better to bias even more towards quitting earlier<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>. Likewise, I now realize that classes/internships which I expected to be fluff in advance… usually were, in fact, wastes of time (surprising, right?). And the only thing I got out of it was deceiving myself, unfortunately. Finally, recognizing now that herd mentality and paths of least resistance are more of a force in my life than I originally thought, and that I should actively try to combat these biases in how I currently allocate my time and in my plans for the future.</p>

<p>Taking this time to write down thoughts and self-reflect in itself has been quite rewarding, and I hope anyone who reads this may find it as insightful for themselves in terms of approaches to replicate or avoid, as I have.</p>

<h4 id="footnotes">Footnotes</h4>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p><a href="https://explorecourses.stanford.edu/">Courses</a> can be looked up here by number if you’re curious <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p><a href="https://syncedreview.com/2020/11/17/conference-on-robot-learning-corl-2020-underway-best-paper-finalists-announced/">Best Paper</a> announcement <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>Ben Kuhn has a great <a href="https://www.benkuhn.net/optopt/">article</a> on optimal control and stopping times in the context of startup options, which illustrates the advantages quitting confers. Generally, quitting <em>earlier</em> than you’d think, is likely closer to the optimal route (at least for myself!) <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="thoughts" /><category term="thinky" /><summary type="html"><![CDATA[It’s now been almost two years since graduating from Stanford, and I wanted to carve out a post to reflect deeply on how well I spent my time there, now with the benefit of hindsight, and with the additional goal of informing my future self to bias towards activities that matter longer term. There a variety of ways to measure quality of time, but the core aspects that I’ve grown to appreciate can be broadly categorized within: social life, health, career, and academics1. Courses can be looked up here by number if you’re curious &#8617;]]></summary></entry><entry><title type="html">Autogenerated Dictionary</title><link href="http://ryantolsma.com/thoughts/2023/05/27/reflection.html" rel="alternate" type="text/html" title="Autogenerated Dictionary" /><published>2023-05-27T00:00:00+00:00</published><updated>2023-05-27T00:00:00+00:00</updated><id>http://ryantolsma.com/thoughts/2023/05/27/reflection</id><content type="html" xml:base="http://ryantolsma.com/thoughts/2023/05/27/reflection.html"><![CDATA[<h1 id="autogenerated-dictionary">Autogenerated Dictionary</h1>

<p>In python, it’s often the case I find myself wanting the ability to very quickly construct dictionaries with nested structures. 
Unfortunately, the following use case is not easy to accomplish with python dictionaries used in the standard way:</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">dct</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">dct</span><span class="p">[</span><span class="s">'a'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">dct</span><span class="p">[</span><span class="s">'deep'</span><span class="p">][</span><span class="s">'nested'</span><span class="p">][</span><span class="s">'auto'</span><span class="p">][</span><span class="s">'inferred'</span><span class="p">][</span><span class="s">'structure'</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span>

<span class="k">print</span><span class="p">(</span><span class="n">dct</span><span class="p">)</span>

<span class="s">"""
{
    'a': 1,
    'deep': {
        'nested': {
            'auto': {
                'inferred': {
                    'structure': 2,
                }
            }
        }
    },
}
"""</span>

</code></pre></div></div>

<p>After a little bit of exploration with the python <code class="language-plaintext highlighter-rouge">defaultdict</code> collection, I found that this is easy enough to accomplish with some fun recursive trickery.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
<span class="k">def</span> <span class="nf">reflect</span><span class="p">():</span>
    <span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">reflect</span><span class="p">)</span>

<span class="n">dct</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">reflect</span><span class="p">)</span> <span class="c1"># Now works perfectly with the previous example
</span></code></pre></div></div>]]></content><author><name></name></author><category term="thoughts" /><category term="coding" /><summary type="html"><![CDATA[Autogenerated Dictionary]]></summary></entry></feed>