I am a mathematician at heart. I ended up with a PhD in physics instead, computational cosmology at UC Berkeley, and I now work as a research software engineer. I wear many hats—mathematician, scientist, data scientist, software engineer—and the problems I enjoy most are the ones where I get to put on several of them at once.
When I write scientific software, I want it to be correct (mathematically, scientifically, numerically, and statistically), computationally feasible for the data I actually have, and reproducible from the raw data to the result. What I mean is all three engineered into the solution, not stumbled upon. For example, you can brute force reproducibility by shipping a container, but it is much more sound if the container itself can be built reproducibly.
This blog is mostly things I had to work out properly before I could use them: JIT compilers and JAX, reproducibility, high-performance computing. A few of them started as a talk. Lately a lot of it is about AI and mathematics, what it does to proofs and to understanding, and how differently mathematicians, scientists, and software engineers see it.
In the age of agentic engineering, what interests me most is how to use it to push every corner of the diagram. Done right, it helps me engineer more of these qualities into our software, while done wrong the software can still look correct, feasible, and reproducible on the surface, but underneath we are back to stumbling upon them. So the hard part really is the engineering in agentic engineering, and that is why I argue for AI literacy, safety, and ethics.