Five semesters of linear algebra and all I do is solve Python dependency problems - Tim Hopper
Transcript generated with
All right, good morning. I'm Tim Hopper. I'm a staff software engineer at Varo Bank.
I'm speaking to you from my home office in Raleigh, North Carolina. I've worked remotely out of Raleigh for the last almost 10 years now.
I hope this talk doesn't disappoint anyone to find out that it's actually not about linear algebra and it's not about Python dependencies.
In particular, if you're too disappointed, you can head over to normconf.com and watch some of the lightning talks for the next half hour.
But if you're only a little bit disappointed and you want to talk about those things, I'd be happy to talk to you about them after the talk.
They're two favorite topics of mine.
What this talk is, is something I've kind of had in the back of my mind for years.
It's a reflection on the evolution of my own interest in my career and how the two relate and don't relate.
In some ways, it's a working out of how I followed my passion and my passion being really a love for math.
It led me to data science and machine learning and sent me out the other side of the door, doing work outside of my passions.
I think it's possibly an overly introspective discourse on how I got into data science out of my love for math.
Now, 10 years into it, I do basically no math in my job.
I think there are others like me. I've talked to others like me.
This is a talk for you and hopefully others who don't totally get it will benefit from it as well.
This is what my wife thinks I do.
Hunched over my desk in my home office, occasionally mumbling things about Pip and Conda, which she knows nothing about.
My mom, on the other hand, she tells people I'm a super geek and she doesn't know what I do.
She just thinks I work magic with computers.
My CEO, maybe a little too similar to my mom in ways, thinks I'm like Minority Report, a perfect precognition machine making predictions about the future.
My manager, a little closer to home, knows me a little better. This is what he thinks I do.
What I thought I would do as a grad student studying machine learning 10, 12 years ago was spend a lot of time choosing kernels for support vector machines.
This is actually a plot I made in Mathematica for a paper I wrote on support vector machines as a grad student.
And I can pretty confidently say I have never needed to choose a kernel for a support vector machine.
On Twitter, of course, this is what I want people to think I do.
I work on deep learning and large language models and that kind of thing.
But of course what I actually do as a staff software engineer is search stack overflow for how to solve my Python dependency issues like installing TensorFlow on a M1 Mac.
If I was a little higher tech, I would include the clip that's famous in so many movies like, yep, that's me. You probably wonder how I got here.
And that's what I wonder too some days, how I got here, where my biggest contributions are often figuring out how to get pip to work the way we want it to work.
So I'm a staff software engineer at Varo Bank. We're a consumer bank, phone-based bank, trying to make banking accessible to all.
I help build and maintain our feature platform for the data science team to make machine learning features available for model training and batch and real-time inference.
So I also make it so defining new features is very accessible to our data science and analysts so they have the data they need when they need it and where they need it.
And reliably consistent data across the machine learning life cycle.
I've spent really, I guess, the last five years or so more and more oriented towards helping provide tools and platforms that data scientists need to develop and productionize machine learning.
I'm actually really glad I get to be involved on the more higher level and system level design of things.
But I think in many ways a lot of my contributions over my career has been trying to master the Python language and its ecosystem and use that knowledge to assist my team and my companies that I've worked at.
So I've spent a lot of time just teaching people how to use Python more effectively, encouraging better software engineering practices, a lot of debugging people's PIP issues, a lot of Googling Bodo exceptions, that kind of thing.
And I enjoy that and it's satisfying work, but it's not work that I expected to find myself doing.
So I want to talk back up a little bit and talk about how I got here, because it's not really where I thought I would end up.
So I really do love math. I loved linear algebra from the get go.
I think I was the maybe that person sitting next to Jesse and linear algebra, like it came pretty natural to me.
I've loved algorithms and just algorithmic thinking and mathematical models.
And this goes back for me at least as far as Bill Clinton's first term in the presidency.
In 1993 my parents sent out this Christmas letter when I was eight years old.
And talking about me, my mom said he hates handwriting, but since he learned phonics last year he peruses the world book for fun.
Math is entertainment for him.
Chris Albin, don't be offended that I used the world book. We didn't have Wikipedia back then.
But I loved math at eight years old. I think there's an indication I loved math at even younger than that.
I wasn't like, you know, Terry Tal, a calculus genius at four, but just always enjoyed math for as long as I can remember.
Perhaps unsurprisingly, that led me to study math as an undergrad.
I went to Grove City College in Western Pennsylvania. I actually started as a physics major.
I think I had some kind of starry-eyed dream of becoming a physics professor for whatever reason.
But pretty quickly I actually changed to computer science as I realized I was enjoying some of that work.
And I didn't particularly enjoy the lab side of physics. I enjoyed the math side of physics, unsurprisingly.
So I thought maybe computer science would be for me.
But pretty quickly as a computer science student, I think my sophomore year I was taking a theory of computation class,
which is basically a math class about computation.
And I was looking around the classroom and realized I was the only person actually enjoying it and really soaking it up.
And most of my peers in computer science just wanted to be programming.
And I wasn't actually particularly interested, that interested in programming.
It kind of seemed like a tool to support the greater cause of studying this interesting, more abstract discipline of computer science.
But I wasn't really wanting to be a programmer.
So I finally realized math was for me and changed at the end of my sophomore year to be a math major.
As an undergrad, I took my first two semesters of linear algebra, introduction to linear algebra, and then later numerical linear algebra.
And I graduated in 2008 with highest honors in math.
And while I was an undergrad, I came across this article. I have no recollection of how I came across it.
But it was a business week and I found it online still, 2006.
And I remember this quote from the article says James R. Schatz, chief of mathematical research group at the National Security Agency,
there has never been a better time to be a mathematician.
And I remember that quote and I found that very compelling.
And I was like, well, I could be a mathematician. This is great. Never been a better time.
The article goes on actually to really start to describe what people started to call data science four or five years later.
Says from fledgling, fledglings like Inform to tech powerhouses like such as IBM,
companies are hitching mathematics to business in ways that would have seemed fanciful even a few years ago.
Over the past decade, a sizable chunk of humanity has moved its work, play, chat and shopping online.
We feed network networks, gobs of digital data that once would have languished on scraps of paper or vanished as forgotten conversations.
Even with the most powerful computers and abundant, cheap storage, companies can't sort out their swelling oceans of data,
much less build businesses on them without enlisting skilled mathematicians and computer scientists.
I think that's actually pretty great description of what would start to develop as data science over the last 15 years.
But in hindsight, I think the choice of the term mathematician there is was maybe a little bit skewed and not quite accurate.
But for me at the time, I was like, this sounds great. I love math and the job that uses math would be perfect for me.
So after my undergrad, I actually entered the University of Virginia as a PhD student in the history of mathematics,
which is certainly a talk for another time, not for today. But that was a program in the math department.
I took my second semester of linear algebra or my third semester of linear algebra, their advanced linear algebra.
But I fairly quickly realized that this program was really only setting me up for a career in academia.
And that career path was increasingly unattractive to me, which is probably a talk for also another time.
I started to understand that my math skills on their own probably weren't going to be much valuable value to anybody
outside of teaching and instruction, which even then you need more than just math skills.
But math skills at that time were really all that I had. I had done a little programming in high school.
I taught myself a PhD to make Lord of the Rings fan sites. And before that, I had done some TI basic,
which I don't think there's a norm talk on TI basic, but there really should be next time around.
I'm sure many of us cut our teeth on TI basic on our graphing calculators.
And I'd done a little programming in college, but I wasn't programming at all at this time as a grad student.
And getting a job in software wasn't really an option for me.
So I was kind of realizing I was somewhat skillless despite having a degree in math and being good at math.
Nobody really is hiring for that for the most part.
I discovered at some point the discipline of operations research, and it seemed like a great opportunity to merge
interest in math, real world problems and computation.
And I found myself as a PhD student again at North Carolina State University where I spent two and a half years.
And it was in this era, which is 2010 to 2012, that data science was really blowing up on Twitter.
And I was spending more time on Twitter than I should have instead of on my homework.
And seeing people like, you know, early, the early data science crowd, Hillary Mason, Drew Conway,
these people talking about this thing called data science, it sounded really cool to me,
and a way to use math, much like I was interested in operations research, to use math and computation to solve these real problems.
And it seemed like a pretty obvious career path to me at the time.
So I ended up losing my PhD advisor and dropping out with a master's.
But in the interim, I was able to start to orient myself towards learning machine learning on the side, as well as in my coursework.
And I was teaching myself R and Python in that era.
It's also where I took my last two linear algebra classes, another numerical linear algebra class, and then an applied linear algebra class.
So that leads me up to actually step one step back in the middle of that time in grad school.
I was able to talk my way into an internship at Kiva Systems, which is now Amazon Robotics, which James, the emcee here, and I share in common.
He worked there a few years after I did.
But I was in the algorithms research group, which was just mostly one guy at the time.
And I thought I had really hit what was going to be the glory land for me, getting to do this more pure algorithms work, focus more on thinking about these optimization problems,
and working on optimizing warehouse robots. And my boss there was a PhD, where he studied vehicle routing problems at UCLA.
And as a starry-eyed grad student who wasn't that interested in software, I was discouraged to find out he was spending a lot of his time on the lowly work of getting Java code ready for production,
instead of doing what I thought was the pure work of algorithms research.
And I committed myself that I was never going to fall down the route of just becoming a software developer.
I was going to do math in my career.
And from there, I left grad school. I thought I really found the perfect job for me in 2015.
A friend asked me to come work with him on a DARPA project, building an open source implementation of inference for Bayesian nonparametric models,
which involved a lot of really interesting statistics and math, and a lot of things I knew nothing about that I had to go read papers and learn and derive equations.
And it was really fun. And then that two to three year project died suddenly after some staff change at DARPA, and I was back on the job market again.
And after that, I had some kind of a realization that there's not this enormous market for algorithm implementers who get to do more of that kind of pure work of understanding the algorithm and implementing it.
If only for the reason because you implement an algorithm one time and you have a good implementation, you get to use it over and over and over again,
as we all use, you know, Scikit and PyTorch and TensorFlow and whatever over again.
Sometimes we use Fortran implementations that were written 40 years ago.
So after that, I shifted back towards more traditional data science roles. And I decided if I couldn't be responsible for the underlying algorithms, I could at least work on the math modeling side.
But even then, I learned that in many companies, I think especially smaller companies that where I've been a part of the engineering barriers to making effective use of data science models was often momentous.
And models often in the math modeling was one of the least important parts, because there were so many barriers to getting things into production.
So you have challenges like getting good data, political and organizational tensions, and these engineering challenges.
So at some point, I decided I was going to, I was so frustrated with the engineering deficits that I was going to solve these engineering problems before going back and trying to solve what I thought were interesting kind of data and math modeling problems.
I decided, I guess at this point that I'd become what we now call a machine learning engineer, because I wanted to be a data scientist who doesn't have to fight with Python dependency issues.
And who could instead spend all my time thinking about the nuances of support vector machine kernels and deep learning architectures.
So I'd be the change I wanted to see in my companies by doing the engineering required what I kind of saw as the dirty work to allow the data scientists to do that what I think, what I thought anyway, is the interesting work.
But at the same time, I've, I've started to learn that there really actually is something quite enjoyable about writing great software, getting that software ready for production.
And, and it's, if you're willing, it's something that's fun to be a part of.
And so as a, as a software developer, not doing, you know, mathy things necessarily, I still get to originate these ideas in my head, and write them out with my fingertips.
And unlike doing maybe just pure math work, you can maybe see that scale to work for millions of people or more and provide value for a company and its customers.
And it's just fun to do something useful.
Whereas, you know, as much as I enjoy, even the the pure side of math and proof and various things, and getting to see something that can be used engaged by others is very satisfying.
I don't regret at all studying math.
I'm actually really glad I did.
I, in many ways, followed my passions, which I don't think is always great advice.
I didn't really have a plan as I went into studying math.
But it was just the route forward for me, and it's worked out in many ways.
But as I think back on this quote, there's never been a better time to be a mathematician.
The distrust for the NSA is probably on that quota as well as more other things these days than it was at the time.
But I think that was a misleading quote.
And I think, you know, not to disparage many mathematicians that I know, but there's never been a better time to be competent in math, good at math.
But being a mathematician on its own, I think, usually is a pretty poor career path for people.
And I tell most people today, people come and ask me about this, I think math skills without programming skills in 2022 are going to be all but worthless.
Unless you are becoming an instructor.
But even then, I think probably a lot of people in various teaching capacities are going to want those programming skills as well as they might have opportunities to teach things like data science courses.
I was overconfident and perhaps oversold the value of being good at math for most of my day-to-day work.
I can think back to these are three of the linear algebra texts I had over the years.
I reference very few of the ideas that I ever learned in those things.
But sometimes when the need comes, it's great to have those little pieces of knowledge.
At the same time, I've started to learn that software provides many of the same joys we can get in mathematics.
Problem solving, abstractions, worlds generated just by logic, reproducibility, really endless areas of study.
And I think probably this was obvious to a lot of people, but it wasn't as obvious to me.
For me, the joy and beauty of software was often hidden behind the frustrations and challenges of things like PIPs, resolution, impossible exception.
But I've learned to uncover those beauty and that joy of getting to create things with software the way that in math you can create things with ideas.
So my career has been a crazy, unpredictable road.
And I suspect it's going to continue to be that.
I've spent a lot of time solving Python dependency issues and a lot less time than I thought thinking about support vector machine kernels.
But it's turned out all right.
And I, you know, after this talk, I think other people have sympathized with some of these ideas.
If people want to talk about this, I'd be happy to do that.