創造するプログラマ・消費するプログラマ

2000/4/7
 今回はプログラマのタイプについて書きます。同じ人であってもここに書くようないくつかの行動をとりうるものだと思います。私自身も自分を振り返ってみて、すべての状態を経験していると思います(間で揺れ動いているような...)。

プログラマの二つの形態

 プログラマ(注1)には大きく分けて二つのタイプが存在します。創造するプログラマと消費・破壊するプログラマです。
 プログラマはソフトウエアを作るわけですから、すべてのプログラマは創造しているはずだと思われるかもしれません。確かにソフトウエア自身についていえば創造していることになります。しかしここで述べるのはそのプログラミングの創作過程における行動についてです。

創造するプログラマ

 一人だけでのプログラミングではなく、複数人で構成されるチームによるプログラムの開発について考えます。各々が完全に独立したものを作っている場合を除けば、チーム全員で共有するモジュールが必ず存在するでしょう。ただ一口に共有モジュールと言っても当初の役割分担で明確に作ることがわかっているような共有モジュールと、開発過程においてたまたまできてくるような共有モジュールがあります。
 後者のような共有モジュールはあるプログラマが自分の分担のプログラムを作っている過程で「このモジュールはこのように作れば他の人も使えるのではないか」と考えて作り出されるものです。つまり必ず作り出されるとは限らないものといえます。
 このようなモジュールを作るプログラマは創造するプログラマといえます。創造するプログラマはただ何かの最終生成物を作るだけでなく、その過程においてさらなる創造を行い、結果として他のプログラマに力を与えることができます。
 ここでは共有モジュールと書きましたが、プログラムそのものに限らずプログラミングテクニックやちょっとした開発ツールなど、「自分以外の人も使ってメリットがあるもの」についてもあてはまるでしょう。

消費するプログラマ

 逆に消費するプログラマというのは先に述べたような創造の機会に出会いながらもこれを行わないプログラマです。
 必要なモジュールがすべてそろっている場合などにはこれらを組み合わせるだけで目的を果たせますから、創造の機会には出会っていないといえるでしょう(極力プログラムを書かずにすませられるなら、当然それが最も良い解といえます)。しかしそうでない場合、つまり目的に対して何かが足りないと思われるような状態に遭遇した場合はどうでしょうか。足りないものがあるわけですからここに創造の機会があるわけです。
 創造するプログラマはこれを補うものを創りだすでしょう。さらにその創造物が、同じような目的を持つ他のプログラマにも使えるものなら積極的にそのように創るでしょう。
 しかし消費するプログラマは以下のような行動をとります。

(1)足りないものがあるので、目的は達成できないと言う(役割の分担として、この主張が正しいこともあります)。
(2)足りないものを作りはするが、これを他の人が使うということはまったく考えない。

 消費するプログラマとは常に受動的で、何でも与えられるものであると考えているプログラマといえます。

その他

 消費するプログラマのバリエーションの一つに「破壊するプログラマ」というものがあります。
 目的達成に足りないものが、すでにあるモジュールのちょっとした機能不足から来ている場合を考えてみます。望ましいアプローチはモジュールの機能を正しく拡張することです。破壊するプログラマはこのとき共有モジュールの創造者の意図を無視し、まったく誤った方法で(たいていそれはその場限りのもの)共有モジュールの機能を拡張してしまいます(拡張とは呼べないような場合すらあります)。これによりその共有モジュールに対するさらなる機能拡張は不可能になることさえあります。つまり共有モジュールを破壊してしまうのです。
 最初に存在した共有モジュールそのものに原因があることもありますが、その場合でもこれを修正せずに更にそのモジュールを腐らせてしまうことはやはり破壊といえるでしょう。
 また創造するプログラマにおいても「創造しすぎるプログラマ」というバリエーションが存在します。これは他人が創ったものを極力使わず、何でも自分で創らないと気が済まないというものです。

おわりに:世界に貢献するプログラマになろう

 ここまで、例としてチームでのソフトウエア開発をあげましたが、趣味で一人でプログラミングしている場合であっても、プログラミングを行っているプラットフォーム全体(プログラマコミュニティ)をチームとみなすこともできます。
 プログラマコミュニティが健全な発展を遂げていくには、創造するプログラマの存在は欠かせないでしょう。逆にプログラマコミュニティに創造するプログラマを惹きつける要素がなければなりません。
 最近Perlを使ってスクリプトをよく書くのですが、Perlのプログラマコミュニティでは多くの創造するプログラマがライブラリやプログラミングテクニックなどについて書いたドキュメント(もちろんスクリプトそのものも)を創り出したりしてPerlの世界をどんどん進化させています。すでにあるPerlの言語仕様・機能について「これがだめ」だとか「これが足りない」とかいう批判しかしない人しかいなければとっくの昔にPerlはなくなっていたでしょう(Perl自身に創造するプログラマが活躍できるような拡張性があることも重要ですが)。Linuxなど「オープンソース」といわれているものについても同じようなことだと思います。
 自分が創ったものがさらに他のプログラマの役に立ち、そのプログラミングコミュニティという「世界」を進化させていく。多くの人の知恵を結集するというのは素晴らしいことですね。

おまけ

 最近のお菓子のおまけとか「がちゃがちゃ」とかをみているときれいに色が塗られていて、値段の割に豪華に感じます。人が手で塗っているのでしょうが、日本ではこんな値段ではできないでしょう。案の定「中国製」です。
 経済のグローバル化がこのまま進めば、労働市場もどんどん自由化が進むでしょう。比較的単純な仕事は人件費の安い海外へと出て行き、結果的にこのような仕事に支払われる賃金はより安く抑えられていくでしょう。
 ソフトウエア開発についてもコンピュータを扱うという技能がそれほど特別なものでなくなりつつある現状では、「単純な」(消費するだけの)プログラミングについてはその賃金は抑えられていくのではないでしょうか。
 ソフトウエア開発で食べていくには、より高度な技術を身につけていくよう、これまでよりも努力しなければならないでしょう。







脚注:
1.プログラマ
 プログラマ、システムエンジニア、ソフトウエア技術者、私はこれらの言葉をほとんど区別しません。自分で考えてプログラムを作る人のことを指します。システムエンジニアがプログラムを考え、プログラマはほぼ機械的にそのアイディアをプログラム言語に置き換えるだけ、というような区別をする場合もあるようですが。
戻る




メール アイコン
ご意見・ご感想はこちらへ
トップ アイコン
トップへ