  These are the notes for a set of lectures delivered by the two authors at the
Les Houches Summer School on `Complex Systems' in July 2006. They provide an
introduction to the basic concepts in modern (probabilistic) coding theory,
highlighting connections with statistical mechanics. We also stress common
concepts with other disciplines dealing with similar problems that can be
generically referred to as `large graphical models'.
  While most of the lectures are devoted to the classical channel coding
problem over simple memoryless channels, we present a discussion of more
complex channel models. We conclude with an overview of the main open
challenges in the field.
