Because the hyperref package interacts with many other packages in a subtle and and often unpredictable way it is a constant source of confusion. In order to minimize these problems it is strongly recommended to use a reasonable new version of hyperref.sty. The other important point is to include hyperref.sty ``at the right time''. For the ProgDoc tutorial, which is processed by LATEX, pdfLATEX and html the following order of inclusion led to acceptable results:
\usepackage{fancyhdr}
\usepackage{hyperref}
\usepackage{html}
\usepackage{progdoc}
\usepackage{listings}
If you use any other sensitive packages you may figure out the right position for the inclusion of your package by trying to load it either before or just after hyperref.sty.