Hacker News new | ask | show | jobs
by troutwine 1788 days ago
I started out as a mathematician, interested specifically in formal logic. Got into a well-regarded undergrad program on track to to a PhD. My particular area of interest was and remains logical systems that _appear_ correct but ultimately turn out to be flawed. What is the nature of that flaw? How did the nature of Proof factor into the flaw? How was the flaw ultimately detected and what was its consequence?

Anyhow, I'm a pretty good mathematician and that doesn't really cut it these days. I saw pretty clearly some of my co-students were _much better_ in the field than I was and knew from the experience of older friends that even the very best struggle on in a life of low-pay TA jobs, shuffling from school to school. My undergrad work in math had gotten me interested in proof assistants and I was increasingly interested in how the proof machinery itself work. Aside from some assembly programming on an Apple IIe that was more just copy and paste I had never really been interested in computers as a mechanism but that changed very much in my early 20s.

So, I bailed on math and bailed on my fancy private school and went to a well-funded state school doing neat work on the "multi-core crisis" and had a lot of Haskell luminaries kicking around. I gradually came to learn I really enjoyed and was pretty good at systems programming, especially the tricky bits that deal with machine non-determinism but must obey stated semantics. For me university was a truly excellent experience, coming at the field cold. I learned that I really enjoy the mathy side of computer science and that computers as machines are delightfully flawed logic systems. I was also exposed to the humanities in a way I might not otherwise have been in undergrad. Without that appreciation for literature and history I would have been poorer in my person and my later work would have been naive.

My first gig was in undergrad while I was at school and I was not at all qualified for it, looking back. My first actual I-am-good-at-this gig was at AdRoll working on the real-time bidding engine. Very interesting work, even if I don't love, looking back, on what that work spawned. Understanding failure in software at high-scale led me into statistical reasoning in a way my logic background never did, likewise into the work of Joe Armstrong and Jim Gray. I was also forced to understand the machine properly from the point of view of building machine sympathetic software. From the AdRoll experience I got the two dipoles of my career: systems programming and fault-tolerance.

Now I work at Datadog on the Vector project, specifically focused on improving Vector's internals to make it machine sympathetic _and_ easy to work on without specialist knowledge. I love that I'm able to do practical research into the optimization of a serious product again -- haven't really had that since AdRoll and the field has moved on quite a bit, hello eBPF -- and push on the boundary some of what it's possible to do with a handful of machines. With regard to what I hate about my present job nothing, but about the _career_ I do really dislike how much we've managed to reward narrow-focus ignorance. That is, a goodly number of software folks have a lot of success just focusing on computery bits and not much else, fine, but the culture of software sort of sees the world through that lens solely. At its best you get a kind of narrow utopianism -- if only our computers were good enough something something perfection -- and at its worst you have folks of authoritarian bents with cash like you wouldn't believe. I wish the field valued monoculture less and broadness of education a little more.