I couldn't agree with you more.
I work with artists who build great teetering cathedrals on top of Arduino(and Processing), and it's really difficult to incrementally move to a more serious solution once things have reached a certain level
Specifically the things it does that bake in bad habits are:
- Encouraging globals
- Everything in one namespace
- Arduino is not C++
- not needing pre-definitions(mostly) and spamming all .pdes into the same file leads to tangled code that's really hard to pull apart into modules, even if it's separated in tabs in the Arduino editor
- delay: not composable!
- for esp specifically: Thinking in terms of a single loop function Vs multiple rtos threads
- the ide is terrible, and encourages a copy-paste workflow because that's how best to work within it