This week we welcome Steven Diamond as our PyDev of the Week! Steven is a core developer of CVXPY, a convex optimization package for Python. Steven has also been an instructor at Stanford. You can see what else Steven has been up to by checking out Steven’s website.
Let’s spend some time getting to know Steven better!
Can you tell us a little about yourself (hobbies, education, etc):
I’m from Seattle originally but have lived in the Bay Area for almost fifteen years. I work at an energy startup, Gridmatic, where my main focus is optimizing large-scale batteries. Prior to joining Gridmatic, I did a PhD in computer science and worked at BlackRock. My hobbies are traveling with my wife, running, and taking care of our fruit trees.
Why did you start using Python?
I started using Python when I learned to program in high school. At that time I played around with many different languages, but Python was the one that appealed to me the most. Python felt so intuitive and user-friendly that it became my go-to for personal projects.
In undergrad, I became more familiar with the Python ecosystem, particularly Django and numerical packages like NumPy. I really became committed to the language though when I started working with my PhD advisor. He and one of his students had developed a very popular Matlab package for mathematical optimization, and one of my first projects in his lab was to build a similar mathematical optimization package in Python. That was the origin of CVXPY, the open-source package I help maintain.
What other programming languages do you know and which is your favorite?
What projects are you working on now?
I’m busy with my job these days, so my open-source work is limited to maintaining CVXPY. We had a big release recently, which added a new compilation backend, support for mathematical primitives used in quantum information, and many other features! The new compilation backend brings important performance improvements to CVXPY as well as offers a long-term path to supporting ndarrays.
If I had more time, I would work on debugging tools for CVXPY. When I first developed the package, I didn’t understand how important debugging tools are to the user experience. It sounds obvious in retrospect since of course, we use debuggers all the time while programming. But since I was so familiar with the CVXPY package I didn’t appreciate the challenges a new user faces.
Which Python libraries are your favorite (core or 3rd party)?
My favorite has to be NumPy, since it’s so foundational to the scientific computing ecosystem. I would like to highlight some Python packages I particularly like related to mathematical optimization. GPkit is a great package for modeling optimization problems in engineering design. PyPortfolioOpt did an excellent job of building abstractions for portfolio optimization. Lastly, PyPSA is a package I’ve found useful at work for modeling energy systems.
Can you give a quick synopsis of convex optimization in laymen’s terms and what types of problems it is used for?
Convex optimization is a particular approach to expressing the computation you desire as the solution to a mathematical optimization problem. For example, you might compute the trajectory for a spacecraft by solving the optimization problem of getting to the destination while minimizing fuel use. Convex optimization focuses on a set of optimization problems that can be solved quickly and reliably. Convex optimization has applications to fields as diverse as machine learning, control, finance, signal and image processing, and engineering design.
Is there anything else you’d like to say?
I would encourage people to become involved in open-source development if they have the time. When I was first starting as a programmer, contributing to an open-source project seemed way beyond me, but now that I’m on the other side of the fence I can see that even small contributions are helpful and appreciated.
Thanks for doing the interview, Steven!