There have been increasing efforts in recent years to apply visualization tools for teaching CS/IT courses. Particularly, the abstractness of programming concepts can be mitigated with visualization tools by providing a WYSIWYG (“what you see is what you get") experience. Visualization tools for programming can provide diverse coverage ranging from basic programming concepts such as variables to advanced concepts in data struc-tures and algorithms. Given the varieties of the tools and the fast software updates, we are motivated to identify visualization tool(s) that are current, supportive (e.g., in both breadth and depth of coverage), and friendly (e.g., no learning curve) to facilitate the teaching of programming. Motivated by this, this paper provides a systematic overview of visualization tools according to four defined metrics. Moreover, we share our best-practices in adoption: a hybrid approach for selecting a combination of visualization tools in an introductory programming course and a data structures course. In addition, we discuss students' feedback, our strategies and lessons learned in adopting visualization for teaching programming.