Programming languages are for humans and machines. Machines do better with braces. (I've written lexers for both.)
Also, try to write an automatic formatter for a whitespace-delimited language; if your indentation is wrong, your logic is wrong, whereas with a brace language, if your indentation is wrong, you run a formatter, and it's all golden.
In a brace-based language, if your braces are wrong, your logic is wrong. How is that better? At least a mistake in indentation is much easier for a human to spot.
Also, forget a brace in your program, just one, and the compiler can tell.
Forget one indentation? No dice.
And while braces can break things too, editor settings can make it much easier to break things with significant whitespace. [2] [3]
Also, refactoring. [4]
Editor stuff. [5]
[1]: https://news.ycombinator.com/item?id=3296782
[2]: https://medium.com/@rwxrob/significant-whitespace-is-still-t...
[3]: https://news.ycombinator.com/item?id=24854090
[4]: https://lobste.rs/s/yyuo7f/significant_whitespace_good_bad#c...
[5]: https://lobste.rs/s/yyuo7f/significant_whitespace_good_bad#c...
> Also, forget a brace in your program, just one, and the compiler can tell.
Should we duplicate every character, so the compiler can tell if you leave one out? This is not a radiation-hardened quine [7].
> editor settings can make it much easier to break things with significant whitespace.
Then use an editor which doesn't.
> Selecting all code contained in a brace or a parents is so much easier (in vim the % movement) than if you have to walk lines.
I have a plugin for Neovim that adds indentation-based motions. The implementation is trivial.
[6] https://github.com/psf/black
[7] https://codegolf.stackexchange.com/questions/57257/radiation...