Last year I knew I did a subpar job on teaching students how to write algorithms to prep their code. How do I know? Thanks for asking. I know because one of my top coding students mentioned after that year something about someone talking about this weird word, "algorithms", and she didn't know what it meant. Who was HER poopy teacher? ME!
So this year in my CS1 class, for their programs they are writing, I have made 3 extra slots on the sheet under each code:
Algorithm (signed off by Ms. D) ____________________
Code (checked by another student) _________________
Code (checked by Ms. D) ________________________
I also had a discussion about the code-checking by someone. I mentioned that if I was ultimately asked to sign off on a code, and it wasn't working, then the "signer offer" would get the BIG FROWNY FACE OF DISAPPROVAL.
Their algorithms are getting better. They started out just regurgitating my words. This allowed for discussions of algorithms being like "steps in a recipe". You wouldn't say: walk to the fridge to get the eggs to crack 2 open into the mixture. You would say: beat in 2 eggs.
I also like the fact that their code has to be checked by someone else. They then get to talk with others and see others' code and practice the art of checking code for bugs and direction following.