Getting started writing dapps is hard. You've got a lot of moving pieces, and half of them are in beta release. It's great because you can make a huge impact as an early adopter, but being a pioneer you sacrifice the convince you'll find in more mature spaces. This article should give you some understanding of the key technologies currently in the Ethereum space.

Having a general understanding of the Ethereum development ecosystem will save you a lot of headaches when building dapps.

Here's an overview of 5 essential tools to get you started:

1. ethereumjs-testrpc

A simple Ethereum testnet node for development. This works as a substitute for the real Ethereum network, which you will want to use for production.

2. solc

solc is the Solidity Compiler. Many Ethereum nodes include a solc implementation. It is also packaged as a standalone NPM module for offline compiling. Either you use web3.eth.compile.solidity() to compile your Solidity files using your node's compiler, or you can use solc.compile() which doesn't rely on the external node.

3. web3.js

The key connection between the Ethereum network and your dapp. Web3 allows you to compile, deploy, and interact with your smart contracts.

Once you upload a contract and save it's ABI you can call your contract functions as if they were just Javascript objects! Ex. SimpleStorage.set(value)

Honorable Mention: Pudding

Pudding is a wrapper around web3. It provides conveniences like callback hooks that trigger after your contract transactions complete. Pudding on GitHub

4. & 5. Truffle / Embark

If all that stuff in solc and web3 sounded complex, then you might want to use a Dapp framework. Truffle and Embark are the most well known frameworks. Both frameworks handle compiling, deploying, and interfacing with your contracts. They also have sensible conventions for testing and app structure.

[Updated 2/24/2017]: A couple months ago, Embark released version 2.0. I have not had a chance to explore the features of this release in depth.

Truffle also released 3.0 which included very significant changes like modularizing the libraries' codebase. From my perspective, I would lean towards using Truffle as it is being supported by many developers at ConsenSys and seems to be taking a more flexible approach than Embark. However, try them out yourself and see what works best for you!

Honorable Mention: Dapple & Dappsys

The folks over at Dapphub released their internal dev tools Dapple and Dappsys. Dapphub are the building the impressive Maker DAO, so they know what they are doing. Dapple is a framework, similar to Truffle and Embark. Dappsys on the other hand is a Solidity contract framework which takes care of common contract behaviors like authentication. Keep an eye out for these alternative frameworks. I will be releasing content covering Dapple soon. It's exciting stuff.