The chosen programming language to write a smart contract is dependant on the blockchain on which it will be deployed.
Solidity
The primary choice for smart contract programming is a language known as Solidity. For experienced computer programmers it may feel familiar to Javascript, Python, and C++.
Solidity allows developers to deploy smart contracts on to the Ethereum blockchain. However, smart contracts that are deployed on the Ethereum network can be easily ported to alternative blockchain networks.
Java/Javascript
Both Java and Javascript can be used to write smart contracts which are deployed on the NEO blockchain. (For those unsure of the difference, JavaScript code runs only on a browser, while Java creates applications that run in a virtual machine or browser.)
C++
C++ is the recommended programming language for developers to use on the EOS network through its WebAssembly virtual machine (WASM) which can be written using other languages, however C++ is usually the preferred language.