* Nobody needs to manually move the stack pointer anymore to implement a loop at the lowest level
* Iverson ghosts [0] let us operate on arrays without explicit loop constructs, e.g. array.sum() in NumPy
* Modern IDEs autocomplete loop syntax
I’m sure there are many other examples I’m missing. All of these are examples of automation of programmers’ work, even if we often don’t think of them that way (especially #1 and #2: higher-level languages/syntax)
You could extend that with examples where specific type of loop actions are even abstracted further, such as filtering, which is aided by (standard) libraries, but also by introducing specific syntax to the language (think lamda's / closure's)
It’s funny how this is true in several ways:
* Nobody needs to manually move the stack pointer anymore to implement a loop at the lowest level
* Iverson ghosts [0] let us operate on arrays without explicit loop constructs, e.g. array.sum() in NumPy
* Modern IDEs autocomplete loop syntax
I’m sure there are many other examples I’m missing. All of these are examples of automation of programmers’ work, even if we often don’t think of them that way (especially #1 and #2: higher-level languages/syntax)
[0] https://dev.to/bakerjd99/numpy-another-iverson-ghost-9mc