Entry

ソフトウェア技術に対するバランス感覚

2014年06月19日

プロとしてソフトウェア技術に対してどのようにアプローチするか,という問題は,おそらく,当のソフトウェア技術にどれだけ通じているかといった問題よりも,長期的に見て重要なんじゃないか,と,近頃考えるようになっています。

と考えるのはそもそも,これまで見てきた様々な開発者に,まったく経験がなくてもお金を稼ぐ開発者と,数年かけても全く(プロとして)モノにならない開発者がいるのを見ているからです。彼/彼女らの違いはどこからくるのだろう,と云々。例によって,自分のことは棚上げにしておきますが。

この違いは,何もあたしだけが感じているわけでもないようで,巷の開発者は少なからず,陰に陽にこの問題を考えているようです。例えば,この違いを「地頭の違い」とか「積極的に動いているかの違い」と説明するといった具合。しかし,少なくともあたしから見る限り,地頭の違いというのは結果論であろうし,積極的に動いているからといって(例えば,勉強会に積極的に参加するなど)魅力的な開発者であるとは限らない,といったところがあります。もっと何かしら根本的な違いがあるのではないか,というわけです。

さて,そこで「ソフトウェア技術に対するアプローチ」の話です。

ソフトウェア技術に対するアプローチというのは,ソフトウェアを開発するにあたって必要となる,あらゆる判断の寄る辺となる考え方なり価値観のこととしておきます。それは,ある側面では設計思想として現れることもあるだろうし,また別の側面では実装上の手癖として現れるかもしれません。いずれにせよ,これらはそれぞれが独立して現れているわけではなく,何かしら内的で根本的な価値基準があると思うわけです。

プロの卵である新人君やルーキー君はともかく,せいぜい5年程度もプロをやっていると,それなりにソフトウェア技術とどう接するべきか,といった問題に直面することになるのではないかと思います。プロ5年というと,どのような雇用形態であれ,それなりにお金を稼ぐようになっているはずだし,仕事の仕方も心得てくるころです(もちろん,早い人はもっと早い)。お金を稼ぐにあたって,他者(先輩,後輩,お客さん,ユーザ,開発者仲間)との相対的な関係も生まれ,ソフトウェア技術に対する自分の価値観を否応なしに醸成せざるをえないところもあります。このような局面において,当の開発者である彼/彼女は,内的にどのような均衡に達しているのでしょう。

思うに,技術に対するアプローチの軸はいくつかあって,どんな開発者も,どこかの軸だけにへばりつくようなことはないように見えます。ここでは例えば,次のような5つの軸を考えてみます。ちょうど,レーダーチャートのようになるはずです。

  • 新技術にどれだけコミットしているか
  • 技術の歴史的な側面にどれだけ理解があるか
  • 理論的な側面をどれだけ重視しているか
  • 実用性ないしユーザの需要にどれだけ敏感か
  • 開発者間のコミュニティをどれだけ重視するか

最初の二つは,技術の歴史的な側面に対するアプローチの方法です。新しい技術に対してアンテナを張り続けることは,変化の激しい業界で生き残るのに不可欠です。一方,新しい技術に深入りすると「次はどの技術がクるか?」のような,山師的なアプローチになってしまいます。

もうひとつの歴史的なアプローチは,先人が考えた形跡を追いかけて,それを重視するアプローチです。先人が頭をひねって考えたことが今も残っているなら,なぜ残っているのか,消えてしまったのならなぜ消えたのか。そうしたことをよく考える立場です。よりよく歴史を見れば,現在の技術への見方も,ある種の「繰り返し」のように見えることもあります。もちろん,こうした考え方も,一長一短があって,あまり深入りすると,古い出来事にこだわる老害的なアプローチになってしまうかもしれません。

次の二つは,技術を見る方向の違いです。まず,前者は,アカデミックな理論から演繹的にソフトウェアを開発する立場です。アカデミックな議論には,ある種の万能感があります。それは,一般を扱うからであり,そこで得られた解は一般的な問題解決に役立つからです。しかし一方で,少なくともソフトウェアにおけるアカデミックな議論は,本質的に帰納的なところがあり,理論が後からついてくる側面があります。理論的な裏づけが不十分だけれども,とりあえず需要に即したソフトウェアを出したところ,ヒットしたというケースも,少なからずあります。理論は成功裏のうちに(需要が確定した後に)精度を上げる方向でしか伸びないことが多い。ここで,理論的に完成した何物かができたとしても,市場は既にレッドオーシャンになっている,といったところです。そうして負けてきたのが,日本のソフト技術界隈なんじゃないかとすら……フニャフニャ。

これに対して後者は,具体的なお客さんやユーザの需要からソフトウェア技術を考えるアプローチです。前者が,ある理論について「これをどこに〈適用〉しようか」と考える立場であるのに対して,こちらは「今できたものはユーザの要望に合わせたものだが,何か理論的に抽象化できるところはあるだろうか」と考える立場です。この立場では,ユーザの要望からソフトウェアを開発することで,機動的になります。しかし一方で,統一的に抽象化されていない理論は,後の派生開発や新機能の開発にあたってアドホックな対応しかできない恐れもあります。

最後にコミュニティの話ですが,あたしがあまり重視していないこともあって,これはおまけで付けたような軸です。あたしゃ開発者間のイベントの類には出たことがありません。食わず嫌いだといわれればそうなのかもしれませんし,何かしらいいこともあるのかもしれません。ここは自分で補完してみてください。悪いところは,コミュニティに属していることと,開発していることが別のことだということを忘れてしまいがち,といったところでしょうか。

さて,いくつか挙げたこれらの軸は,相互に排他的なものではなく,両立するものです。例えば,最新技術にアンテナを立てながら,歴史的な視点でこれを評価することもできるわけです。また,それぞれに重要な側面と,深入りすると危険な側面もあります。さらに,軸はここに挙げただけでなく,他にもあるかもしれません。

いずれにしても,ここであたしが重要だと思うのは,これらの軸のどれが重要なのか,といったことではなく,どれだけバランスを取りながらソフトウェア技術にアプローチしているか,ということです。これまで,山師的なアプローチを極めて,大損をこいてる開発者も見てきたし,昔のことばかり語って今の技術から置いてけぼりを食らっている人も見てきました。このことから,どちらが重要なのか,ではなく,どうバランスを取るか,が重要だと思うわけです。観察する限り,バランスが取れている開発者は,極端な設計思想や実装上のポリシーを主張することもなく,そのために身を滅ぼすことも少ない感じがしています。

また,これがおそらく核心ですが,バランスを取るということは,当該ソフトウェア技術を多元的に見ることに外なりません。また,多元的に見るということは,その技術に対する理解の重複度や層の厚みが異なるともいえます。この点,技術界隈の人の中には,物事を多元的に見ることが得意でない人もいるようです。ある見方では正しいことでも,別の見方では間違っている場合(これは往々にしてある),開発者が個人の内的な原則論としてどのような位置に折り合いをつけているのか,この点が非常に重要なのだと思います。そうした原則論が,設計思想なり実装作法なりに現れると思うからです。

一方,全体としてレーダーチャートが小さくあっても,バランスが取れているということは,それだけで開発者としての素質は十分にあるのではないかとすら思います。自省も込めつつ,そんな話。

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