Staff Engineer at MongoDB in New York City specializing in C, Python, and async. Lead developer of the MongoDB C and C++ driver libraries. Author of Motor, an async MongoDB driver for Tornado and asyncio. Contributor to Python, PyMongo, MongoDB, Tornado, and asyncio. Co-author with Guido van Rossum of "A Web Crawler With asyncio Coroutines", a chapter in the "500 Lines or Less" book in the Architecture of Open Source Applications series.
If you maintain a library, how can you innovate without breaking the projects that depend on it? Follow semantic versioning, add APIs conservatively, add parameters compatibly, use deprecation warnings and publish a deprecation policy, guide your users on how to upgrade, and make wise choices about when to break backwards compatibility. This talk describes API evolution in Python and C, with lessons for libraries in any language.
When you test a program as a "black box", you send it in and out pops the result, like toast. But network code has I/O at two ends: the API and the network. If we only test the API, we don't test its wire protocol or error-handling. We need a "black pipe" test, which tests the API while messaging over a socket. I’ll present a handy library and advise you when to use black pipe tests.
Your training, experience, and passion are all in computer programming, but sometimes you feel like a locomotive stuck on the track toward management. It's not true: you can deepen your skills, get promoted, and expand your influence as an individual contributor for the rest of your career. As a non-manager, you can focus on other ways to have a big impact: design large projects, mentor and teach coders, write and speak to large audiences.
Coroutines are the most exciting, fastest-changing feature developed in Python 3. Catch up on the latest: how native coroutines work, how to cancel a coroutine or give it a time limit, and how context variables give coroutines the equivalent of thread-local storage.