This week we have A. Jesse Jiryu Davis (@jessejiryudavis) joining us as our PyDev of the Week. I came to know about Jesse through his articles about Python on his blog. He is also employed at MongoDB. Jesse is also a contributor to several Python-related projects, such as pymongo. Let’s spend some time learning more about our fellow Pythoneer!
Can you tell us a little about yourself (hobbies, education, etc):
I got my BA in Computer Science from Oberlin College, which wasn’t the best idea at the time. I went to school during the dot-com bubble. Oberlin’s CS professors were poached by software companies, or by big universities willing to pay them enough to keep them in academia. Oberlin, an idealistic place, wouldn’t pay a CS professor more than twice what it paid, say, an anthropology professor of the same rank. That’s a beautiful principle, and it lost our department much of its faculty. Math and physics profs filled in, and undergrads also taught each other. I taught intermediate C++. I didn’t teach it very well.
So I had a patchy education, and I graduated right after the dot-com bubble burst, but I still managed to get a good job at a tiny flight-data analysis firm in Austin. After a couple years, I left to study Zen for a year at Yokoji Zen Mountain Center in Southern California, then came to NYC.
Why did you start using Python?
When I came to New York I had two years experience doing 3D graphics in C++. Somehow I ended up doing Python and SQL at Wireless Generation (now Amplify Education) for three years. They were using Stackless Python 2.3 in CGI scripts, so that’s how I first learned Python.
Stackless Python can pickle a generator while it’s paused, so that’s how we did multi-message protocols: while the CGI script was waiting for a client to send the next message, it saved its state as a pickled generator on an NFS shared disk and terminated itself. When the next message arrived, whichever web frontend received it would find the saved file, unpickle the generator, and resume it until the generator yielded the reply-message.
These days most of the people I worked with have left Amplify to found Mortar Data and DataDog, and those who stayed at Amplify have updated the tech stack with modern Python and, of course, MongoDB!
Me, after I left I freelanced around the NYC startup scene, and MongoDB was by far the most exciting thing I encountered here. So I joined as employee number 30 or so.
What other programming languages do you know and which is your favorite?
I don’t know anything half as well as Python. I’m going to change that. I’m concentrating on my C skills next year.
What projects are you working on now?
I work on PyMongo, the MongoDB driver for Python, with my boss Bernie Hackett. PyMongo is among the top Python packages and it’s used in all Python versions, on all platforms. It’s a grave responsibility and we tread very carefully.
Motor is a fun side-project of mine. It’s like PyMongo but it’s async. It works with Tornado, the async Python framework, and I’m currently adding support for asyncio. Eventually it will even do Twisted, so it’ll be a Python async hat trick.
There’s another project I’m excited about, Monary. It’s a specialized MongoDB driver just for NumPy, written by David Beach. It can read one or two million rows per second single-threaded. At MongoDB, Inc. we think Monary is really cool, so I’ve been leading our contributions to it.
MongoDB has drivers for C, C++, C#, Java, Node, Perl, PHP, Python, Ruby, and Scala. Getting all these drivers to behave the same is a gigantic effort. I write some of our specs that define how all the drivers should behave. For example I wrote a “Server Discovery And Monitoring Spec” that defines the distributed-systems strategies our drivers use to talk to clusters of MongoDB servers. I defined unit tests in YAML that prove our drivers conform to the same spec despite varied implementations.
Which Python libraries are your favorite (core or 3rd party)?
Tornado and asyncio. The last time I approached Twisted I failed, but I’m going to try again. Yappi is a much better profiler than cProfile but it’s little known.
Is there anything else you’d like to say?
I have a message for those who are proud that they don’t use IDEs: You need to use PyCharm and get good at it. When I watch you flail around in vim, trying to find functions by searching for them by name, trying to debug with “print” statements, you look pathetic. You think you’re efficient but you’re wasting so much time by not using PyCharm. You’re like someone who doesn’t know how badly you dance. Learn PyCharm well and use it for editing, debugging, and version control. You’ll jump straight to function definitions, you’ll resolve merge conflicts in seconds, you’ll diagnose bugs immediately. You’ll thank me.
Thank you for your time!