I would suggest starting with the official tutorials on the Ethereum.org website. Follow the links in order: download the wallet, then click "Issue your token" for the first tutorial, etc.
After that, if you want a more in-depth explanation of Solidity, the official documentation has an "Introduction to Smart Contracts"
If you get through that, you should have a pretty good idea of how writing smart contracts works. At that point there will be two more things to learn. The first is the more practical side of actually doing day-to-day dapp development - using simulated blockchains for automated testing, deploying to the main chain, etc. For that, I recommend using a good framework. My favorite is Truffle, which has excellent documentation, but there are others including Embark and Dapple.
The last thing to learn is how to build a web-based frontend for your contracts. For that, I'm unfortunately not aware of any good tutorials, but the official documentation of web3.js is pretty comprehensive.