When to use `external` instead of `public`

I'm trying to figure out when I'd want to change my function visibility from public to external.

When my function is marked public, I can call it from anywhere, and don't have to use this when calling it internally.

contract Get {
    function get() public {

    }
    function callGet() public {
        get();
    }
}

Are there other differences between public and external? If I'm writing a function that is going to be used by both contract and non-contract accounts and may or may not be extended, is there a nuance that could help me decide when to use external?

There is no difference as far as other contracts are concerned. Internally, you will want to use internal calls (without this) 99% of the time, so I would recommend to just stick with public.

Public and External are both callable from or outside smart contract, where in the internal function is only callable only with in the smart contract.