I'm a freelance tutor working with high school students, giving them programming assignments in languages like Python, Java, C++, and others.
In recent months I've seen the value of using English - getting them to write documentation and also to write down rough drafts of their algorithms in pseudocode. I'm wondering what other teachers do with this. (I'll give an example with an Euler problem.)
The goal is to get them to think at a high level. Typically they like to dive into code. It's not concrete to them if they aren't writing code. I get it, developing a higher-level understanding is something that takes time. But I think I need to push it a little - they are just avoiding pseuocode and documentation past the point when they are really ready to use it.
One obstacle is their general writing abilities. The students who don't write well in any context, like English class, find it the hardest to write documentation and pseudocode.
To give an example, let's consider Euler 46, "Goldbach's other conjection" https://projecteuler.net/problem=46
This project involves testing different ways of adding squares and primes, in some kind of nested for loop. Typically they want to start out with details like
for (int n = 0; n < ???; n++)
{
for (int i = 0; i < ???; i++)
{
for (int j = 0; j < ???; j++)
{
??? generate square and prime S and prime P ???
if (2 * s + p == n)
break; // and do what then ???
}
}
}
Where I have put question marks is where they aren't sure what to put. But they begin wrestling with each place I have put question marks right away. That means they are struggling with low level details right away before they really understand the gestalt of the problem. Also they will throw in a break
without having considered ahead of time how that will play out.
What I'm trying to get them to do is write pseudocode like this:
For every N, an odd composition number we are testing, in some range
For every prime P < N
if N - P is not twice a square, we found an exception. print or mark it
Of course this is a big leap, so I guide them to it gradually. (The benefits of working as a tutor and not a classroom teacher.) When they think at a high level, they can also see choices available to them. like maybe that pseudocode could be modified to be made more effcient.
For every N, an odd composition number we are testing, in some range
For every value 2 * S where S is a square
if N - 2*S is not a prime, we found an exception. print or mark it
They can reflect on the difference long before they have wrestled with the details of for loops. They can think about how they might efficiently test if a number is prime. Maybe they've seen before this idea of generating a hash set of primes and think about whether that's faster than trying to find out if a number is a square (which requires a sqrt operation).
Then there's documentation. The difference between something low level like
// set i to 0. increment i and stop when it's n
for (int i = 0; i < n; i++) {
and higher level like
// loop over possible test values (i)
for (int i = 0; i < n; i++) {
What I'm looking for from the answers is whether other teachers have found it useful to bring English into helping them develop higher-level understanding. "Chunking" concepts for example (thinking with high-level or abstract concepts). And how successful is this? Does it depend on a student's ability to use English in the first place?