関数とか抽象化とかライブラリについて

  1. 仕様を確定させれば、それを使用する人は中の実装を知る必要がない
  2. 使用する人は、内部の実装についてきちんと知ってから使用するべきだ

このような二通りの主張がある。本にはよく1.が書いてあるけど、2.を唱える人もいる。一体どっちが正しいのだろう。