プログラマyasuhoの隠れ家

某ソフトウェア企業に勤務するおじさんプログラマyasuhoです

プログラムは既存機能を使わず、なるべく自分で書け


出来るだけ既存機能を利用する方がプログラムの品質も上がり、素早く出来るでしょう。しかし、私はあえてなるべく自分で作ることを奨励したいと思います。ある機能を自分で作ると苦労はしますが、それによって実現すべき機能に対する深い理解を得ることが出来ます。どういうふうに作ればバグやクラッシュが減るか。効率化を図るにはどうすればよいか。自分で作る部分が多ければ多いほど、そういった知識も増えていくはずです。

どこまで自分で作るか


ソフトウェアを作成していると、既存の機能を使うか、自分で機能を作るかという選択を迫られることがよくあります。その時どちらを選択するかは開発環境やプロジェクトの状況によりますが、一般的には既存の機能を使うことが推奨されています。既存機能を使った方が工数が短く、バグが少ない、といわれているからです。


しかし、それは本当のことなのでしょうか。機能を自作することにメリットはないのでしょうか?

既存機能を使った場合


まずは既存機能を使った場合の長所や短所など。

工数が短くなる


すでにある機能を効果的に使えば、自分で作る部分が減ります。テストのにかける時間も短縮できるかもしれません。ただし、既存機能に対する理解が足りない場合、思ったような挙動をしてくれなかったり、思わぬバグを招いたりして、かえって工数が増大することもあります。

品質が高い


多くの人に使われる既存機能はバグ取りが進んで品質が高いことが多いです。負荷をかけても安定して使える安心感もあります。ただ、システム同梱のライブラリであっても、あまり使われないものだったり特殊な使い方をする場合は注意が必要です。

機能拡張されていく


よく使われるものは、ライブラリの提供元によって機能拡張や改善をされていくことがあります。システムに新しい機能が加わってもアプリを修正する必要がないかもしれません。それによる互換性の問題はつきまとうことになりますが。

デバッグが難しいことがある


ライブラリはブラックボックスなので、何かあった場合詳細な解析が出来ない場合があります。カット&トライするしかない場合もあることでしょう。

機能を自作する場合


これは既存機能を使う場合と相反します。

工数が長くなる


作りこむ部分が多く、テスト項目も増えるので、必然的に工数が増えます。しかしながら、自分で見渡せる部分が多いのでバグ発生時の問題解決は短くなるかもしれません。

品質が低い


新規に作る部分は枯れていないので、バグも多く出るでしょう。とはいえ、バグの多さはプログラマの技術力による部分が大きいので、テストを十分に出来れば必ずしも問題とはなりません。

機能拡張は自分でしないといけない


自分で作るわけだから当然ですね。もっとも、機能拡張は既存機能を利用した場合でも全く変更が必要ないことは少ないので、いずれにせよプログラム修正を必要とすることが多いのですが。

デバッグがやさしい


自分で見渡せる部分が多いので、問題発見が素早くできます。Debug出力をプログラムに入れて試してみることも用意でしょう。もちろん本当に早く発見できるかは問題の種類によりますが。

なるべく自分で書こう


こうしてみると、出来るだけ既存機能を利用する方が利点が多いように思えます。私もこの点では異論はありません。品質の面でも自作は少ないにこしたことはないでしょう。


しかし、私はあえてなるべく自分で作ることを奨励したいと思います。それは自作にはライブラリを使うだけでは得られないものがあるからです。


ご存じのように、プログラムの品質はプログラマの技量に大きく左右されます。でも、最初から素晴らしい技量を持った人なんていません。技術を磨くには、どれだけ多くのプログラムを作り、多くの問題を体験していくしかありません。


便利なライブラリやフレームワークを使えば、自分で苦労しなくても面倒なことはほとんどやってくれます。しかし、その機能を実現するためには多くの努力があったはずです。利用するだけなら、その体験は出来ません。


ある機能を自分で作ると苦労はしますが、それによって実現すべき機能に対する深い理解を得ることが出来ます。どういうふうに作ればバグやクラッシュが減るか。効率化を図るにはどうすればよいか。自分で作る部分が多ければ多いほど、そういった知識も増えていくはずです。ライブラリを使っているだけでは気づかなかったアイデアが思いつくかもしれません。


業務では難しいかもしれないので、趣味でプログラムを作る時には自分で作ってみるというのはどうでしょう!?昔から言うじゃないですか。「若い時の苦労は買ってでもしろ」って。あ、若くない人も苦労しましょうね。:)