プログラミングは愛(笑)
上記記事、興味深く読ませていただきました。ともすれば忘れてしまいがちな基本技術を見直すということは大切なことだと思います。簡潔にまとめられていて、とてもいいですね。私もこんな風に書けるようになりたい・・・
そこでyasuhoも自身が考えるプログラミングの心がけについてまとめてみようと思います。失礼かもしれませんが、以下はmorchinさんの記事に関連していないばかりでなく、重複する部分もあったりするかもしれません。おじさんプログラマの戯言として御笑覧いただければ幸いです。
プログラミングをする上で大切なこと
バランス感覚
ソフトウェア設計において最も大切なことはバランス感覚であると思う。システムやプログラミング言語の得意・不得意分野を理解し、プログラムの性能や拡張性を過不足なくバランスよく実装することが出来るのがよいプログラマであると思う。
それにはシステム・言語処理系に対する幅広い知識はもちろん、実際の経験が不可欠である。何が出来て何が出来ないか。どの程度のパフォーマンスが出せるのか。それが持つ能力と限界は使ってみて初めて分かるものだから。
仕様と実装のギャップを埋める
プログラマはよく実装を仕様より優先してしまいがちだ。これは相手がプログラミングに関して明るくない場合特に顕著となるが、逆に実装をよく知っているプログラマだからこそ、仕様と現実のギャップを埋められるのではないかと思う。
「そんなの出来るわけないだろう」と突っぱねる前に、要求仕様を採用するためのコスト・利点・欠点を明確にし、ユーザと落としどころを探ることができるプログラマでありたい。
統一された振る舞いと実装
ソフトウェアに対する要求は際限がない。ほっておくとプログラムは肥大化し、シンプルだったシステムは使うことが困難になっていく。大切なことは、設計ポリシーを定めることと、それを伴った実装である。要求があればまずはポリシーと見比べて、それに見合うものかどうかを判断できるようにしておくことで、機能拡張によるソフトウェアの混沌を回避できる。
堅固なコンポーネント
アプリケーションのクラッシュやバグの多くは仮定から発生する。ここではこんな値はこない「はず」。最大値はこのぐらいで「十分」。そういったソフトウェアはクラッシュを誘発しやすいだけでなく、調査が困難なバグを生み出しやすい。
とはいえ、可能な限りのチェックコードと拡張性をすればいいというものではない。そこでも最初に述べたバランス感覚が重要となってくる。見通しを悪くしてしまうようなら、たぶんどこかに問題がある。
依存性の低い実装
他のプラットフォームへ移植する可能性がなかったとしても、移植性を高くしておくことは大切な習慣だと思う。他のサブシステムやコンポーネントへの依存性が低いソフトウェアは他のシステムの変更に対する影響が少なく、安定性の高いものになる。また、部品として再利用しやすくなるというメリットも。
昔何かのCMであったよね
愛だろ、愛!
なんのCMかは忘れてしまいましたけど。たしかあったよね、そんなCM。:)
いろいろ書いてきましたけど、つまるところプログラミングTIPSとはコード及びそれを見る人への思いやりなんだと思います。それは他のサブシステム・モジュール、コードを読む人、メンテナンスをする人、プログラムを使うユーザ、などなど、それら多くのモノや人に対する思いやり、ちょっと大げさに言うと誠意なのではないでしょうか。
よいコードにはその人のプログラムに対する優しさが感じられるとyasuhoは思うのです。