J and APL support (and encourage) a certain form of programming without error handling or library code reuse. The alternative wisdom goes against typical programming but it works together.
Consider taking successive differences: it is hardly obvious that
is preferable to
2 -~/\ ]
2 -~/\ (0$0)
will fail silently, but one can discern what inputs are acceptable by inspection.
This situation is common in practice, consider the example
def monotonically_increasing(a): max_value = 0 for i in range(len(a)): if a[i] > max_value: max_value = a[i] a[i] = max_value
This is in fact worse than
>. /\ or
|\; all fail on an empty list but only
the APL derivatives make this evident.
Avoiding rigorous error handling in procedures is most acceptable for exploratory programming. It is preferable to use a one-off idiom that suits your data rather than a carefully written procedure; the procedure might be thrown away as you work.
I claim this functional, terse style is in fact necessary for exploratory programming. Concise, self-explanatory programs balance what is lost in loose error handling. Those used to building systems may find this objectionable but the style works together.