Entry

人斬りとプログラマ

2011年01月08日

先日,職場の知人と話していたこと。

剣術における考え方のひとつに,人を斬ったことがある人間とそうでない人間とでは,実践的な実力に決定的な差がある,という話があるそうです。いくら道場で評判の腕の持ち主だとしても,人を斬ったことがない人間は,道場で修業を積んでいない人斬りに劣るとか云々。知人の作り話かもしれませんけど,映画なんかで「ヤツは人を斬ったことがある」とか「あいつの目は人を斬ったことのある人間の目だ」とかいった台詞が出てくるところを考えると,そゆ考え方がないとも言えないのだと思う。

で,ですね。知人とは,プログラミングも似たようなことがあるんじゃないか,といった話をしていたのでした。つまり,製品となるようなまとまったプログラムをひとつでも作った経験を持つ素人プログラマ(フリーウェアの作者さんとか)は,そうでないプロプログラマよりも優れる,とかとか。

ここで,プロのプログラマならまとまったプログラムを作ったことがあるはずだろう,と思うのは早計です。巷には,プロだけれども,プログラム全体の一部だけを作っているプログラマもたくさんいます。とゆか,この業界も分業が進んでいるので,そっちの方がむしろ普通だったりする。自分が作っているプログラムが,全体でどのように機能するのか知らされないまま,与えられた仕様書に基づいて実装していく手法は,一般的な方法です。したがって,この話は,この業界のプログラマ一般に(ほぼ)当てはまる話なのだとも思う。

身近な人しかサンプリングできないのだけれども,まとまったプログラムを作ったことがある人とそうでない人の違いは,「プログラム外部に考慮が及んでいるか」という点にあると思っています。

「プログラム外部に考慮が及んでいるか」というのは,例えば,エンドユーザの使い勝手とか,自分のプログラムを利用する他のプログラムにとっての使いやすさを考慮しているか,ということ。考慮していない人は,自分のプログラムの話ばかりする。「うちのロジックはこうなっているからこういう使い勝手なんだ」とかいった具合に。プログラム外部の人間からすると,「おまえんとこのロジックなんて知ったこっちゃねーよ!こっちは必要な機能だけもらえればいいんだ」と考えるのが普通なわけで,言い訳にもならない。使い手の立場に立てないオレオレプログラマは,全体を作ったことがないからなんじゃないだろうか,とかとか。

また,学生さん(らしき人)のブログを読んでいても,まとまったプログラムを作ったことがある人とそうでない人の違いを感じることがあります。例えば,C++ で継承による多態を説明するとき,こんなコードが安易に紹介されることがあります(c-tor 等は省略)。

class Figure {
  virtual void draw() const = 0;
};

class Circle : public Figure {
  virtual void draw() const {
    // 円を描画
  }
};

class Line : public Figure {
  virtual void draw() const {
    // 線を描画
  }
};

こうした例の意味のなさについては,『Modern C++ Design』でも指摘されているけれども,上のような説明が安易に行われるのは,実際にこのオブジェクトがどのように使われるのか,プログラム外部に考慮が及んでいないためなんじゃないだろうか。この設計/実装のどこに意味がないのか,気になる方は,この設計で一本プログラムを作ってみるといい。オブジェクトを操作するときはいいけれど,そもそも生成するときどうするの?という問題が必ず出るはず。多態にする意味がなくなる。

Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)
Modern C++ Design
posted with amazlet at 11.01.08
アンドレイ アレキサンドレスク
ピアソンエデュケーション
売り上げランキング: 74900

もちろん,当該ブログの説明は,クラスの多態を説明するのに必要なことを絞り込んでいるから,余計な機能は省いているんだ,とも言えそうです。それはおそらくそうなんだとも思う。しかし,なんつか,個人的な評価として,「この人プログラムを作れる人なんだろうか」といった疑問は払拭されないままだったりします。

少し話が逸れてしまいました。結局のところ,「プログラム全体を構成したことがある」という経験は,それがどんなプログラムであれ,コード片のみを書いて難しげなことを語るプログラマの経験よりも,実践的な側面において優れるんじゃないか,ということです。

そして,これはプログラムの世界に限らず,漫画や小説の世界にも当てはまるのだと思う。どんなに稚拙な絵や文章でも,自分の作品を一本作ったという経験は,部分の積み重ねでは得られないのだと思います。そして,「自分の作品を作り上げること」は,(それが最初のものであるなら特に)決して簡単なことではない。ま,世の中には,特に壁を感じずにさらっと作ってしまう天才肌の人もいるんですけどね。

人斬りとあまり関係がなくなっちゃったかもしれないけれども,ま,そんな感じ。一線を越えているかどうかは,外から見れば大抵分かることだったりもします。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN