A 2-group is a `categorified' version of a group, in
which the underlying set G has been replaced by a category and
the multiplication map m ; G x G -> G has been
replaced by a functor. Various versions of this notion have
already been explored; our goal here is to provide a detailed
introduction to two, which we call `weak' and `coherent' 2-groups.
A weak 2-group is a weak monoidal category in which every morphism
has an inverse and every object x has a `weak inverse': an
object y such that x \tensor y \iso 1 \iso y \tensor x. A
coherent 2-group is a weak 2-group in which every object x is
equipped with a specified weak inverse x' and
isomorphisms i_x : 1 -> x \tensor x',
e_x : x' \tensor x -> 1 forming an adjunction. We describe 2-categories of
weak and coherent 2-groups and an `improvement' 2-functor
that turns weak 2-groups into coherent ones, and prove that this
2-functor is a 2-equivalence of 2-categories. We internalize the
concept of coherent 2-group, which gives a quick way to define Lie
2-groups. We give a tour of examples, including the `fundamental
2-group' of a space and various Lie 2-groups. We also explain how
coherent 2-groups can be classified in terms of 3rd cohomology
classes in group cohomology. Finally, using this classification,
we construct for any connected and simply-connected compact simple Lie
group G a family of 2-groups G_h (h in Z) having G as
its group of objects and U(1) as the group of automorphisms of
its identity object. These 2-groups are built using Chern-Simons
theory, and are closely related to the Lie 2-algebras g_h
(h in R) described in a companion paper.