This document discusses best practices for teaching Python programming to novices. It covers cognitive learning theories like schema theory and motivation theory. It advocates using a scaffolded constructivist approach with spaced practice and authentic projects. Specific techniques discussed include using visual feedback in browser programming for young learners and text-based adventure games for older students. The document also discusses balancing pedagogical approaches with efficient programming practices and managing cognitive load when teaching programming concepts.