Topological quantum codes such as the 2D surface code provide a viable path towards building a reliable quantum memory. The confidence in the noise-resilience of such codes rests largely on considerations of random Pauli errors such as the depolarizing noise. In this talk I will consider coherent noise caused by systematic unitary errors such as unwanted Z-rotations. Our main result is an efficient algorithm for simulating quantum error correction protocols based on the surface code in the presence of coherent noise. It allows us to simulate systems with more than one thousand qubits and obtain the first error threshold estimates for several toy models of coherent noise. We observe that for large code distances the effective logical-level noise is well approximated by random Pauli errors even though the physical-level noise is coherent. Our simulation algorithm works by mapping the surface code to a system of Majorana fermions.