Just to differentiate on a somewhat important point - bump map is not the same as normal map.
Bump map is a height map, where the greyscale information is stored as difference from "neutral" elevation - bumps are bright, recesses are dark.
Normal map stores information in two channels in case of tangent space normal maps, which are more common for gaming graphics, or three channels in the case of object space normal maps which are more common in static renders. The information in normal maps is the normal vector of the surface - that is, vector that points directly away from the surface at any given pixel.
The big difference is that a bump map stores a relative elevation difference, while normal maps store the absolute surface normal vector (within certain limits in the case of tangent space maps).
To make an example - if you have a height map for a small object and your shaders are set to scale the elevation of the surface by let's say 5 centimetres both ways from "neutral" position, you can have good results with one size. But if you scale the object up by a factor of ten, the surface elevation differences will still be 5 centimetres unless you specifically code your shader to scale the bump mapping with the object's scale.
By contrast, if you use normal maps, the apparent surface details will automatically scale up if you increase the size of an object.
Of course, historically speaking, normal mapping has often been synonymous to "bump mapping" - many applications have done on-the-fly interpolation of the height map to generate normal vectors for the object, but it's more efficient (and overall gives better results) to use normal maps.
A newer rendering technique that actually does use height maps, and is therefore "true" bump mapping, is called displacement mapping. In that, the height map doesn't just make the surface look like it has bumps and crevices, it actually applies a physical modifier to the model's surface to translate up or down from neutral position. This technique produces more realistic results than normal mapping since the detail is also apparent in the silhouette of the model's shape, rather than just based on lighting on the surface.
For example if you have an oblate spheroid that you want to use to render Earth, you can use either a normal map to generate the appearance of surface details like mountains, and that will look perfectly fine in most renders. But if you focus on the horizon, you might want mountains that rise up from the surface, and normal mapping can't do that; for that effect, displacement mapping is needed to "lift" the mountains up from the sea level.
Displacement mapping is more computationally expensive than normal mapping, though, and usually used in static renders. And you do need to ensure that the scaling - or amount of displacement - is appropriate on a per-model basis.