Why Java is Bad for CS1

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:

all in a formal, unambiguous (machine-understandable) way. Theoretically, these concepts can be taught in any language (a good assembly-language programmer does all these things instinctively), but in practice some languages are better than others for teaching these concepts.

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:

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.