Preliminary version; I'll flesh this out … some day.
Teaching programming is not about teaching a specific language. It's about data representation and problem decomposition:
As a first-language, use of Java (or C, or C#) gets in the way. I am constantly having to spend time teaching and drilling and explaining concepts that are not part of problem-solving.
In particular, I am frustrated how the typical intro programming course gives the strong, lasting impression that programming is about:
double
s"
and "`/` is overloaded to mean two different functions, one of which
is not the division that `/` means in
all your schooling so far, and in the world at large".
TODO: things that, although difficult, are fair concerns for programming at CS1;
What is a better approach? I heartily endorse the Program by Design approach of Felleisen et al.
TODO: address formal studies
Disclaimer: As an industrial language, I don't have a problem with Java -- this is just about using Java for teaching a first language.