Before triggers can be used to update or validate record values before they are saved to the database.
Aftertriggers can be used to access field values that are set by the database (such as a record'sIdorlastUpdatedfield), and to affect changes in other records, such as logging into an audit table or firing asynchronous events with a queue.
All the code written in the "before update" triggers, executes BEFORE that DML is committed to Salesforce Database.
Code written in after trigger executes AFTER the commit is made.
So whenever you want to change something for the record or to stop the record from being commited, you can go for before triggers
Record ids are not available in before insert, but record id is available in before delete and before update.
http://hisrinu.wordpress.com/2011/05/17/difference-between-before-trigger-and-after-trigger/
Triggers can be divided into two types:
For more details: http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_triggers.htm
Madhan Raja M