When you do external calls to other smart contracts:
A.
you should follow the checks-effects-interactions pattern and avoid state changes after the call.
B.
you should follow the effects-checks-interactions pattern and avoid state changes before the call.
C.
you should follow the checks-effects-interactions pattern, which is only necessary when you do calls to contracts where a direct contract call is not possible.
Java, C++, Solidity and JavaScript, because the Ethereum Blockchain is completely language agnostic and cross compilers exist for every major language.
B.
Solidity, Viper, LLL and Serpent, because those are high level languages that are compiled down to bytecode.
C.
Solidity and JavaScript, because those are the official first implementations for Distributed applications and the Blockchain supports those languages fully.