I've used both truffle and geth, for testing my contracts.
To me, truffle seems to be more abstract (therefore less flexible) and easier to use, for testing.
However, when we move to geth, we are using web3, to communicate with a deployed contract.
Question 1: Which one is a better environment when we're developing Dapp in the real world?
In general, what are their pros and cons?