general bump mapping question

I am going to implement bump mapping/per pixel lighting and just started to read papers about that, but it seems that there are so many ways to do this that I just wonder if there is one way that ist generally considered to be the best.

As far as i know there are at least:

  • only diffuse bump mapping with simply multitexuring (normal cube map dot3 bump map blended with color map). is it possible to get specular bump mapping this way? diffuse bump mapping can be done in a single pass(with 4 texture units), i guess?

  • register combiners, i guess you can get diffuse and specular bump mapping in a single pass but only on nvidia hardware.

  • fragment programs, i do not know anything about them at all except a rumour that for this you need a gforce fx (same with glslang/cg?).

  • certainly several ways to do this with ati hardware/ati specifig extensions

But which one is the best??