Incorporating visual and animation teaching tools in computer programming classes for effective teaching and learning