Function calls don't need parens because it's an interactive shell, and nobody writes Bash or Command prompt lines like:
user@server$ grep('word', 'file.txt')
C:\ > notepad.exe()
And if they did make that the requirement it would be an instant dealbreaker for a lot of people coming from other shells. It is indeed a similar story with quotation marks around strings, in that you don't want to have to write: user@server$ grep 'word' 'file.txt'
when you could write user@server$ grep word file.txt
If the parser can tell from the context that the next token should be a string, it will read it as a string. If it can't tell, and the next token might be a command but you want it to be a string, then you have to quote it. If there's a space e.g. in the file path and you want it to be read as a single token, you have to quote it. Always quoting won't break anything, it's just unnecessary.