Libraries of procedures and functions (such as mathematical or input/output libraries) provided the first hints of information hiding.
They permit the programmer to think about operations in high level terms, concentrating on what is being done, not how it is being performed.
But they are not an entirely effective mechanism of information hiding.