Making a transaction is basically a 3-step process:
In IOTA there are two types of transactions: one where you transfer value (and thus, have to sign inputs), and ones where you simply send a transaction to an address with no value transfer (e.g. a message). Constructing a bundle is fairly simple and is taken care of by all the libraries that we have released so far. When it comes to signing the transaction inputs, that is also taken care of by the libraries and it's all done client side. This means that you never have to worry that your private key or your seed gets sent to somewhere else.
The tip selection is a process whereby your local tangle is traversed to figure out two randomly chosen transactions which will be validated by your transaction. These two transactions will be added to your bundle construct and are called branchTransaction and trunkTransaction.
Once the bundle is constructed, signed and the tips are added to the bundle, you have to do a little amount of Proof of Work for each transaction in the bundle. As such, every transaction in a bundle requires a nonce in order to be accepted by the network. Main purpose of this Proof of Work is sybil-resistance and spam-resistance.
After all these 3 steps are completed, you can broadcast the transactions to your neighbors and wait for it to be accepted by the network.