This is my current research [1]! In 2015, I was at PyCon's Educational Summit when I thought about integrating some of what we do in martial arts to CS - drilling moves to use in sparring/randori. Sparring/randori is a high intensity activity that requires fast problem solving skills which rely heavily on muscle memory due to the speed involved. Additionally, forcing a beginner to spar is one of the fastest ways to make them quit [2]. I think this is one of the reasons why CS has a high dropout rate - we are asking them to "spar" (problem solve) too early or incorrectly and as a result they quit because they hate feeling like failures. Instead there should be some level of drilling before getting "thrown to the wolves" (as I used to tell my students) to build their confidence and understanding. I don't think traditional small/large scale programming exercises fully tackle this problem.

I think drilling is something we do in almost all technical skill development (music, art, athletics, vocational) and I wanted to bring the same thing to my CS courses - so I started requiring typing exercises as one of their assignments for the week. These aren't just "typing a for loop 10 times", but additional context (for example, the link below shows regular expressions for addresses) to give them something they could use as a template for their programming exercises. To combat copy and pasting, I just made the code an image. In my first link, you'll see an example of using a regular expression to validate addresses. After completing this, the students would then be required to complete some Q&A exercises as well as traditional programming exercises where they needed to design functions that: validate phone numbers, (a limited scope of) email addresses, and Social Security Numbers. The objective of that week was to get them familiar with regular expressions, not finding a StackOverflow link that teaches them how to implement regular expressions.

As the article says, this is what we did in the 80's. That doesn't make it better, it just makes it how things were done "back in the day..." However, K. Anders Ericsson states that early specialization is often a key determinant to future mastery and that deliberate practice refines areas where an individual struggles and may be unenjoyable [3] (see my older comments on grit/perseverance). Likewise, syntax errors are one of the first problems novices face [4]. By completing typing exercises, the learner does not need to worry about using problem-solving skills, which they may still be struggling with, just the correctness of the typed characters. Thus, typing exercises give the learner a deliberate practice resolving a simple, but major issue. Additionally, typing exercises remove students' ability to just "copy and paste" before using example code. With syntax errors mostly resolved, the student can then focus on problem-solving rather than where the semicolon should go.

I currently have a SIGCSE paper under review, but the gist of the paper is that students that voluntarily completed typing exercises performed better in their class than students that did not. The students may have just been more motivated and therefore that is why they scored higher, so there is a limitation to my study. I could require it, but then designing a control group that would receive the same amount of learning would be difficult as well.

[1] https://research.csc.ncsu.edu/arglab/projects/exercises.html (the Heroku link is currently down as I've made recently changed to the live version)

[2] https://www.youtube.com/watch?v=hHebXvoHue0 (Rener Gracie is a character, but listen to those first few minutes)

[3] https://en.wikipedia.org/wiki/Practice_(learning_method)#Del...

[4] https://dl.acm.org/citation.cfm?id=2677258