LiquidCrystal library

What's wrong with the LiquidCrystal library?

Not much any more.   Limor Fried (aka LadyAda) has written an updated version of LiquidCrystal that addresses the issues mentioned below, and more.   It is included with Arduino v0017 but if you have to use an older version of Arduino for some reason then you can get the updated library here.

What was wrong with the old LiquidCrystal library?

-- It relies on the LCD controller being initialized by it's internal reset circuitry. The success of this method depends on the characteristics of the power supply, specifically how quickly the voltage rises when power is applied. If the LCD controller is not correctly initialized it may be left in some indeterminate state where it will not respond to subsequent instructions. There is a recommendation, buried in a note in some versions of the data sheet, that recommends using a software initialization technique.

-- When the Arduino reset button is pushed, the previously downloaded sketch is run again from the beginning but the power to the LCD module remains uninterrupted. This means that the LCD controller has not been re-initialized. Under these conditions the operation of the LCD controller is again indeterminate (this is mentioned in a comment in LiquidCrystal.cpp). This problem goes away if software initialization is used.

-- It does not implement some of the recommended time delays. Most of the time this is not a problem because of the time it takes for the microcontroller to execute the instructions that are sent to the LCD controller. With higher speed microcontrollers this can certainly be a problem, so these time delays, especially the short ones, should not be ignored.