  Already in the 1960s, Levenshtein and others studied error-correcting codes
that protect against synchronization errors, such as symbol insertions and
deletions. However, despite significant efforts, progress on designing such
codes has been lagging until recently, particularly compared to the detailed
understanding of error-correcting codes for symbol substitution or erasure
errors. This paper surveys the recent progress in designing efficient
error-correcting codes over finite alphabets that can correct a constant
fraction of worst-case insertions and deletions.
  Most state-of-the-art results for such codes rely on synchronization strings,
simple yet powerful pseudo-random objects that have proven to be very effective
solutions for coping with synchronization errors in various settings. This
survey also includes an overview of what is known about synchronization strings
and discusses communication settings related to error-correcting codes in which
synchronization strings have been applied.
