There seems to be a consensus in the APL community that the hard part of learning to use the language efficiently is array thinking. This is probably just a case of me not knowing what I don't know, but I kind of disagree with this. Array thinking comes relatively easy if you have been exposed to numpy, which is a fairly popular "Iverson ghost". I find combinator/train/fork thinking by far more alien and harder. I have no useful intuitions about where jots / frownies / tacks / etc go.
@Schiphol Of course, personal experience with something similar to a subject in question will help. Similarly, people with Haskell combinator experience will find tacit APL a delight, but might struggle with array thinking.
@Schiphol while map and reduce are not like be any new concept to people expose to functional programming or parallel computing, generalized matrix multiplication and rank are rarely seen outside, and even inside APL community generalized matrix multiplication is underused. i.e. for the 1D arrays most would write +/a×b not awaring a+.×b.
And I can tell that is because many people set their comfort zone to at most 2D arrays, reluctant to step out to the higher dimensions.
Say RGB image processing in numpy, it would usually be treated as three 2D arrays and an algorithm would be different to the monochrome case. A good array thinker would try to transpose the RGB image so the algorithms for monochrome can be directly applied.
It appears the numpy for loops would be converted to parallel instructions, so it may be called array programming, but this does not make it array thinking