Hi,
I'm sure someone can give a much better and more in-depth explanation but here goes:
1. Class side initialization is generally used to create fully functional objects. If you use just instance-side you might forget to set some important value (let's say ID) which would leave the object in invalid state. Another reason would be that it shows what does one really need to create a valid instance. If you have Empoyee class>>id: anId name: aName you will now know that salary is actually not needed and the object is able to cope with that. (And you can set it later). Yet another reason would be setting some additional/default values (however this can be done also internally on the instance-side).
2. Some elementary examples might be Rectangle or Point in Kernel > BasicObjects package. Generally you wouldn't send Employee message new directly, because that is class-side's job now, but rather you send the actual values: Employee id: 123 name: 'John Doe'. "answers with an Employee instance"
Peter