I agree with Nain Hwu. The "transient" keyword is applicable for serialization java serialization not if it is externizable. Since if a class implements the Serializable interface, the class doesn't have control over the actual serialization process, "transient" provides you a bit of control in how the java serialization algorithm works.
Basically as Nain mentioned, it boils down to the amount of control you want on the serialization process.
1. Use java serialization (thru implements Serializable) if you are ok with the default behavior.
2. Use transient variables if default serialization is good enough but there are things that just don't make sense serializing.
3. Provide your own hooks for serializing an object by implementing the Externalizable interface.
4. If java serialization is just too slow then use your own algorithm and define interfaces similar to Externizable ( this can get to be very tricky). One scenario is if you want to serialize objects in XML, or say you have proprietary formats,etc. Kind of acts as poor man's persistence layer. Note that performance gains occur usually because you don't need as generic a serialization algorithm as provided by java.