Brandon Rhodes has spoken at Python conferences from Portland to Warsaw
and Budapest. He is interested in how beautiful code patterns can help
us tell stories that don’t become an impossible tangle as a code base
grows ever larger.
The Skyfield astronomy library generates planet and satellite positions
for Python programmers. With it, Brandon was able to schedule a final
glimpse of Tiangong-1 hours before it burned up in our planet’s
atmosphere. But building a beautiful API always involves compromises,
and Brandon will discuss the problem that import loops pose for Python
APIs based on method chains.
I will start by describing how a library can leverage NumPy and the
Jupyter Notebook to avoid reinventing wheels as it brings numerical
calculations and powerful visualizations to Python programmers. Using
my astronomy library Skyfield as an example, I’ll show how I was able to
predict the final few passages of space station Tiangong-1 over my house
before its fiery plunge into Earth’s atmosphere in early April.
But Python is not a language that’s in every way perfect. I’ll examine
one particular style of API that I used when building Skyfield: the
method chain, where objects suggest to the user which operations are
possible next by which methods they support. This often requires
objects to be able to instantiate other objects — in the case of
Skyfield, creating an import loop once the collection of features became
rich enough. I’ll look at the options for resolving import loops and
what the solution does to the shape of a library like Skyfield.