プログラマyasuhoの隠れ家

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

プログラマの考える美しいプログラム


プログラマであれば誰もが自分なりの「美意識」というものを持っているかと思います。それはインデントにおけるスペースの数やカッコの位置といった細かい部分から、モジュールのデザイン方法・実装のクセなどプログラミング全般に影響するものです。大げさに言えばプログラマの哲学とでも呼べるものでしょうか。


プログラミングの美しさにおける一般論は以前書きましたが、今回はプログラミング技術の観点から考えてみたいと思います。

美しいプログラムの定義


何を「美しい」と感じるかは、人によってかなり差があります。ここでは私が考えるプログラムの美しさについて書いてみます。

直感的に使えるインタフェース


外部から内部インタフェースに至るまで、直感的に使えること。

  • 関数やクラス・メソッド名などは見ただけでそれが何をするのか想像できる。それぞれがどのように関連していて、どう使えばいいかが理解しやすい。
  • 使用方法やパラメータはムダや冗長な部分がなく、基本的な機能は最小限の実装で実現できる。
  • 設計思想が統一されている。
論理がシンプルで分かりやすい


論理がシンプルで分かりやすく表現されていること。

  • 実装はトリッキーなものではなく、素直で単純。誰がみても理解しやすい。
  • 性能にそれほど差がなければシンプルな実装が選ばれている。
  • 難解と思われる部分はコメントあるいはドキュメントで解説。
可読性が高い


コードを読んで理解することが容易であること。

  • 「この機能はどこだろう」と思った時、予想した位置にそれがある。
  • 内部関数・メソッドは機能単位にまとめられている。
柔軟性が高い


プログラム構造に柔軟性があり、機能拡張や削除がしやすいこと。

  • 各モジュールに依存関係が少なく、独立性が高い。
  • プログラム構造やデータは将来の拡張を考慮し、余裕を持って設計されている。
機種依存性が低い


機種依存性が低く、他のプラットフォームへの移植が容易であること。

  • APIやライブラリを別のものに変更することが容易。
  • I/Oを伴うデータにエンディアンなど特定の型に対する考慮がなされている。

美しさは多くの配慮


プログラマがこういったことにこだわるのはなぜでしょうか。技術者としての向上心やプライドからくる部分が大きいと考えられますが、突き詰めていくと多くの配慮がなされているということではないでしょうか。


プログラミングを始めた頃はとにかく作る技術を学ぶのに精いっぱいですが、多くのプログラムを作成していくうち、どのように作ると効率がよいのか、バグを少なくするのはどうすればよいのか、といったことを考えるようになります。プログラマが美しいと思うコードはシンプルながらバグを減らすための多くの配慮に溢れている。そんなプログラムではないかと思うのです。


ともすればこういった美意識はプログラマ以外には理解されないことかもしれません。でもプログラムをよいものにしたいという気持ちの表れだということを、頭の片隅にでも覚えておいてくれると嬉しいですね。:)




過去の関連記事:
yasuhoの隠れ家 - 美しいプログラムとは何か