with edges, faces, or cells.
Defining degrees of freedom ("DoF"s in short) on a mesh is a rather
-simple task, since the library does all the work for you. However, for
+simple task, since the library does all the work for you. Essentially,
+all you have to do is create a finite element object (from one of the
+many finite element classes deal.II already has, see for example the
+@ref fe documentation) and give it to a DoFHandler object.
+
+The next step would then be to compute a matrix and right hand side
+corresponding to a particular differential equation using this finite
+element and mesh. We will keep this step for the step-3 program and
+rather talk about one practical aspect of a finite element program,
+namely that finite element matrices are almost always very sparse,
+i.e. almost all entries in these matrices are zero. This is one of the
+distinguishing feature of the finite element method compared to, say,
+approximating the solution of a partial differential equation using
+for example a Taylor expension and matching coefficients. In practical
+terms, it is the sparsity of matrices that enables us to solve
+problems with millions or billions of unknowns.
+
+The sparsity is generated by the fact that finite element shape
+functions are defined locally on individual cells, rather than
+globally, and that the local differential operators in the bilinear
+form only couple shape functions that have some overlap. By default,
+the DoFHandler class enumerates degrees of freedom on a mesh in a
+rather random way; consequently, the sparsity pattern is also not
+optimized for any particular purpose. However, for
some algorithms, especially for some linear solvers, it is
advantageous to have the degrees of freedom numbered in a certain
order, and we will use the algorithm of Cuthill and McKee to do