Hybrid Learning: Best Practices and Strategies For Active Learning and Student Engagement in and Out of the Classroom for Computer Science Courses