1. Eth and smartcontracts. We all know smartcontracts are revolutoinary, but their use cases are limited. Smartcontracts are awesome, but they are confined within the blockchain and data on the blockchain. In otherwords, right now smartcontracts are "you send 1 eth and I'll send back 1000 McTokens", and this contract is verifiable/trustless/amazing but its stuck within the universe of Ethereum and the data Ethereum understands
2. It is possible to use external data to inform these contracts, but right now that process is centralized. This is a problem. Lets say the external data is a transaction of Dollars for ETH. So you send 300$ to bank account X, and then I send one Eth to your address. Right now you either do that through a third party (CoinBase), OTC (LocalBitcoins) or whatever else centrlized system you want to use.
Knocking out that centralization, where you have to trust someone, is THE key to SmartContracts having a real world use case. But how do you get that information -- the fact that the $300 has been sent -- onto the blockchain using data that the smartcontract understands?
3. Oracles. Right now the answer is "hey we can hire Oracle X to do the translation to represent this bank dollar transaction on the blockchain." The "oracle problem" with this is that you are 100% TRUSTING that oracle to act prudently. That they don't tamper with the data. So we can kill coinbase but now we have to trust the oracle instead of coinbase. This is a HUGE problem for Banks who want to get into blockchain but have to trust a centralized oracle to translate data. This Oracle can be hacked, falsified, defrauded, really all the problems that come with centralization.