1) any application where you want to store some data for the duration of a user's visit. It's a nice alternative to sending all the info through the URL.
In a shopping-cart system you might store the currently selected items for each user in his session.
2) By profesionally you mean clean and efficient code? Learn from examples.
Read through the columns section and see how the "pro's" write their code.
But, professional code is not just clean code. In some cases it may be very much faster to write a routine in "messy but documented" code than in clean code.
Some people find it very clean code to create an object that contains just two one char variables. But then you are just using valuable memory space.
In short, write code that any nitwit can read and understand without asking you what it all means.