<p>Agree with terpsfan726 here. Practice practice practice.
HS senior here with 5 years of programming experience (2 in Java). I learned easily because I was lazy (ironically - we work hard to be lazy in programming).
I’d say sit down, write code. Do some FRQs. Contribute to an open source project written in Java.</p>
<p>Come up with examples and exercises for each topic. Throw in a lot of pictures and diagrams, because it’s a lot easier to explain some topics with pictures rather than with words (plus it’s a lot less boring for students since they don’t have to always be looking at code then).</p>
<p>My teacher uses PowerPoint slides with diagrams, has the class ask questions and answer questions presented in the PowerPoint, and after every lecture there’s an exercise that the students need to do. Homework is another exercise/an FRQ. Daily warmup MC questions + biweekly quizzes, and I usually go over the solution, explain it, and answer any questions.</p>
<p>Have students share their solutions to programming problems. This will engage them more and they’ll actually understand the code they’re writing.</p>
<p>Also, don’t hand-hold them 100% through the course. The biggest part of APCS is developing the critical thinking skills needed to program well. Students won’t get a lot of things the first time around simply because the way they need to think in APCS is a lot different from what they’re used to. Find multiple ways you would explain topics to a nonprogrammer and use them in your lectures, then have them use those topics in exercises. Be very careful that you don’t throw too much at once at them when you do this - GO SLOWLY. This way, when they do exercises they’ll know what’s going on - you should only need to answer the occasional question, not write out entire parts of the solution for them.</p>