PyDev of the Week: Ethan Smith

This week we welcome Ethan Smith (@ethanhs) as our PyDev of the Week! Ethan is a core developer of the Mypy project, which is a static type checker for Python. You can see what other projects Ethan contributes to over on Github.

Let’s spend a few moments getting to know Ethan better!

Can you tell us a little about yourself (hobbies, education, etc):

I was born and live in the San Francisco Bay Area. I am currently an undergraduate at UC Berkeley pursuing a degree in Electrical Engineering and Computer Science. I’m passionate about Linux and free software, so I am a staff member of the Open Computing Facility, a campus organization that provides computing services to students based on free software. Programming language design and quantum computing are the two areas I am most interested in. I have been working on mypy for about 3 years now, and it has been a great experience working with the mypy team. I also experiment with toy programming languages from time to time.

I currently work at Lawrence Berkeley National Lab as part of the Advanced Quantum Testbed doing quantum computing research. I develop tools to make it easier to program quantum computers.

Why did you start using Python?

I started using Python in high school, when I needed to use it as part of a summer internship at the Lawrence Hall of Science, a local museum. I was working with a fellow intern on an inventory system and we decided to write it in Python. The inventory system never saw the light of day, but it was enough to get me to fall in love with Python! I continued to learn Python the rest of that summer and never looked back! For a couple of years after that I used Python to make little projects for myself and to play with customizing Windows.

What other programming languages do you know and which is your favorite?

I would say I am familiar with the bog standard C/C++/Java/C#/Ruby and a few others, such as Rust and Scheme. I have really fallen in love with Rust recently, and I know it is hyped a lot, but it is a joy to use once you get how to use it. I have yet to see a language mix clean high level semantics with blazing fast speed in the same way. In high school I used MIT’s Scratch to teach basic programming concepts to kids and I’ve always thought it was well designed.

What projects are you working on now?

I largely have been working on a quantum compiler (which is actually a lot simpler than it sounds!). The compiler produces minimal or near-minimal size quantum programs. Quantum computers suffer from high noise for each operation they perform, so reducing the number of operations to perform is critical! I’ve been using Rust to scale the compiler to work faster on larger and harder programs, which has been quite fun.

I’ve also been experimenting with compiling Python to WebAssembly for deterministic computation. This has a lot of applications such as reproducible Jupyter Notebooks or enabling easier distributed computation.

Which Python libraries are your favorite (core or 3rd party)?

I’m going to cheat a little here and choose pyo3, which is actually a Rust library for binding Rust code to Python. One of the things I like most about Python is that you can write bindings to fast native code and enjoy the high level simplicity of Python. This approach has precedence in the likes of numpy and scipy. Since I’ve been enjoying writing Rust recently, pyo3 means I can use both of my favorite languages together!

How did you get involved with the Mypy project?

I started using mypy in 2016 when I was playing around with a personal project. My main development machine runs Windows and when I ran mypy it broke! I got familiar with how mypy worked and then I fixed the bug. I then decided I wanted to help out because it seemed like a fascinating project. So I started helping out by being a nuisance helping triage issues on the bug tracker and eventually fixing more bugs and implementing better analysis.

What is your favorite feature of Mypy?

I really love the mypy daemon. I remember when I first ported it to run on Windows I was shocked at how much faster it was at checking larger projects. Porting it was a fun challenge since Windows doesn’t really support daemons the same way Unix does, but I digress. Looking ahead I’m excited for the implementation of PEP 612 https://www.python.org/dev/peps/pep-0612/, which will make typing decorators and higher order functions a lot easier.

Thanks for doing the interview, Ethan!