Motivated by applications to topological data analysis, we give an efficient algorithm for computing a (minimal) presentation of a bigraded $K[x,y]$-module $M$, where $K$ is a field. The algorithm takes as input a short chain complex of free modules \[ F^2 \xrightarrow{\partial^2} F^1 \xrightarrow{\partial^1} F^0 \] such that $M \cong \ker{\partial^1}/\mathrm{im}{\partial^2}$. It runs in time $O(\sum_i |F^i|^3)$ and requires $O(\sum_i |F^i|^2)$ memory, where $|F^i|$ denotes the size of a basis of $F^i$. We observe that, given the presentation computed by our algorithm, the bigraded Betti numbers of $M$ are readily computed. Our algorithm has been implemented in RIVET, a software tool for the visualization and analysis of two-parameter persistent homology. In experiments on topological data analysis problems, our implementation outperforms the standard computational commutative algebra packages Singular and Macaulay2 by a wide margin.