Many modern languages make a distinction between public and private features in a module. A distinction that doesn't get made so often is between public and published features: and that may be a more important distinction. As a program grows in size it's important to split it into modules, so that you don't need to understand all of it to make a small modification. Often these modules can be suppl