Provide multiple equivalent project options, but keep the number of choices limited to ensure that students have enough time to complete an assignment.
When presenting abstract concepts, have students close their eyes and visualize the concepts as they are described. Then, have them draw what they saw.
Use analogies to real-life things or events in order to provide students with a more concrete picture of abstract concepts.
Use a simple IDE to avoid distracting from the actual material; using a complex IDE/programming environment can be overwhelming to students.
In assignments, make sure to include examples of or references to code that is essential for a program, but that students are not responsible for writing.
Compare a program to a military dictatorship to emphasize that correctly-formed computer program instructions are followed literally and without question.
Do not have students write code for common algorithms. Instead, incorporate common algorithms into your class in novel course-specific variants
Emphasize rationale over accuracy to help students understand the overarching concepts, instead of the low-level details.
Students often get stuck because they start working on a problem without thinking about what they need to know and do in order to get a working solution.
Even if students are developing useful strategies for problem solving, they can be easily discouraged if they don’t see immediate, good results.
Remind students about steps of the problem-solving process as they develop algorithms to solve programming problems.