In this chapter, we apply some of what we have learned in the last chapter about finite fields to constructing error-correcting codes. This is not only of interest in itself, but serves to create a number of naturally arising examples and gives us practice in doing explicit computations with some of the relatively abstract ideas we've seen so far.