In this review, several aspects of virtual screening are presented. Although, docking and scoring have been the most widely employed techniques, ligand-based virtual screening has also gained momentum in recent years. We have classified the docking programs into four categories, based on their underline theories, and accordingly describe the most up-to-date algorithms and newest versions. Similarly, three categories of scoring functions are presented, while their weighting schemes on particular binding terms are discussed. The latter is important, since knowledge of the function can be used to select the ones that could be more appropriate for targets of similar nature. Challenging aspects, such as protein flexibility and practices to select the most appropriate docking/scoring schemes, are also discussed. Finally, a real-life example is presented where a pharmacophore-driven approach combined with a docking exercise were undertaken in an iterative manner to successfully enhance the virtual screening hit rates. In the end, we present our own perspective for best practices in the field based on our experiences.