「ライブラリを使う」ということ
自分向けの覚え書きとして。
ライブラリというのは、すごくざっくりというとプログラムの集合体のようなものだと思う。
wikipediaにおいては以下のように書いてある。
ライブラリ(英: Library)は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。ライブラリと呼ぶ時は、それ単体ではプログラムとして作動させることはできない実行ファイルではない場合がある。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言うことができる。ソースコードの場合と、オブジェクトコード、あるいは専用の形式を用いる場合とがある。たとえば、UNIXのライブラリはオブジェクトコードをarと呼ばれるアーカイバでひとまとめにして利用する。図書館(英: Library)と同様にプログラム(算譜)の書庫であるので、索引方法が重要である。
また、ソフトウェア以外の再利用可能なものの集合について使われることもある。
要するに、よく使うプログラムを使いやすい形でまとめておいたもの、ということ。
ここまで序文。
ここから本文。
結論をすごく乱暴に述べると、「ライブラリを使う」という場面においてライブラリの中身を知る必要は基本的にない。
これだけだとあまりに乱暴すぎるので、ひとつひとつ書いていく。
たとえば、プログラミングから離れて日常生活で考えたとき。
iPhoneは充電して電源ボタンを押せば画面が点くし、画面をつけてロックを解除すれば、あとはアプリケーションを好きなように使うことができる。
この時、利用者(我々)はiPhoneが中でどんな処理をしているのかを全く意識する必要はないよね、というだけのこと。
ライブラリもそれと同じで、たとえばmathというライブラリにmultiというメソッドが定義されていたとする。
ここで、multiは2つ以上の引数を与えられると、与えられた引数全てを乗算した結果を返り値として持つ。実際にこんなことをライブラリにする必要はないんだけども、適当に思いついたのがこれだったので許して欲しい。
1~10を順番に乗算していった値を得たいなら、
ans = multi(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
としてやればいい。
このとき、multiの中には与えられた引数全てを乗算するプログラムが書いてある。けど、multiを利用してさらに発展したプログラムを作成するとき、その中身を理解する必要はない。
中身を理解しなくても、ゲーム開発において攻撃力と防御力と防御係数とクリティカル倍率とその他もろもろを乗算した結果を得たいならmultiというメソッドに全部投げてやれ、という話になる。
つまるところ、ライブラリというのは、前を走っている技術者Aが後から走ってくる技術者Bのために道をならしているようなものなのだ。
Aがたとえ何らかの理由で技術者でなくなったとしても、BはAがならした道を通ることでより短い時間でAと同じ場所に立つことができる。そうすると、より遠くまで進むことができる。
ライブラリを使うということは、他の技術者が今まで培ってきたものを借りてさらに優れたものを生み出すということで、その際にライブラリの中身をいちいち学んでいては元も子もない。
もちろん、ライブラリになっているのだから中身を見て学ぶことはできるし、学ぶことはプラスになる。ならないはずがない。
それに、ライブラリに実装されていることを一から考えるよりも、既存のライブラリを見たほうが学びはずっと速い。なので、使うライブラリ全てをしっかりと理解していってもさらに先に進むことは十分可能だと思う。
でも無駄が多い。
なので、基本的には、ライブラリの中身はざっくりとした理解に留めておいて、必要に応じて、もしくは学びに余裕がある時に、都度理解していくのがベターなのではないかなぁ、というのが個人的な感想。