I always thought it would be exposing the interface. You do not want your users to be overloaded with your implementation, so you make such things as private. He is kinder to them. For example, when dealing with arrays, you really want 71 more methods in your path (which you almost certainly don't care about?)
RUBY_VERSION # => "1.8.7" Array.new.public_methods.size # => 149 Array.new.private_methods.size # => 71
Another important part of private methods is “subject to change”. When you are committed to the interface, you must support it. You cannot break every code every time a new version is downloaded. Things that are private are understood to be volatile. They are not affected, so it is understood that you can change them. If users created code based on private methods, then this is not your mistake (if they do not do this b / c, you gave them the crap interface). Therefore, you can make it private in order to give yourself the opportunity to do it better in the future.
source share