ようこそゲストさん

したっぱプログラマーの日記(The diary of a minor programmer)

2006/05/23(火) 頭のいい職業ってなに?

読書

『ソフトウェア開発で伸びる人、伸びない人』を読んだとかきましたが、その中に、

優れた技術者は抽象概念を持っています。

っていうのがありました。
つまり、優れた技術者は、現実を、そのものとして捉える以上に、抽象化して捉えることができるということです。

もうちょっと、具体的に言うと、抽象概念を持っていない技術者は、自分が過去に経験したことと、全く同じ状況、全く同じ現象にのみしか、経験を活かすことができず、抽象概念を持っている技術者は、未知の現象についても、経験を活かすことができます。

この文章を読んだときに、思い出したことがあります。
それは、大学院時代の、製作展後の飲み会か何かだったと思うのですが、その席で、頭のいい人ってのは、どういう人を指すのかという話になりました。

そこで、O先輩が、言ったのが、「他人の言ったことを、自分の世界に落としこめる人」みたいなことでした。
日本語が、下手で、申し訳ない。

具体例を挙げると、僕の友人のG君は、サックスプレイヤーなのですが、話していると、常に「あるある。そーいうの、音楽の世界でもあってさー。」っと、なんでも、話が音楽につながります。つまり、自分の得意な音楽という世界に、なんでもかんでも、落とし込むことができているということです。
つまりは、G君の頭の中で"音楽の世界"というものが抽象化されているということです。

先の、O先輩との会話の席では、なんで、そんなのが、頭のいい人になるんだろう?もっと良い、"頭がいい"の判断基準が、いっぱいあるんじゃなかろうか?っと思ったりしたものですが、いま、この本を読んで、なるほど、そーいわれると、それって、頭いいかも!って思うようになりました。

ここから、プログラマーにしか、わかりにくいかもしれない話ですが、
プログラマーなんて、オブジェクト指向言語を使ってる限りにおいては、毎日、抽象化の訓練をしているようなもの。
結論として、
一番頭のいい職業=プログラマー
ということになるのでは!?
って思いました。

1: mynz 2006年05月24日(水) 午前10時56分

頭のいい職業であるプログラマは3本も同じ内容の記事をポストしない。Anyway.

OO言語のタームで言う「抽象化」は上の2つとはちょっと違うと思うぞ。そりゃレトリックだろう。(ネタにマジレス?)

本の真意は“直感が働く”、“勘を鍛えられる”って意味だと理解した。ニューロンが繋がるっていうの。

飲み会の話は他人の存在が前提で語られる頭のよさ?うぅん、ちょっと分からないな。
もし、外からの情報が大きくて、自分自身の世界が小さかったら、経験が湾曲して蓄積されるだけじゃないの?自分の世界に閉じこもらず、大きな世界にダイブできる頭の方がよさそうだけど。

勉強なります。

2: わけん 2006年05月24日(水) 午後10時31分

ち、違うんです。
頭の悪いサーバーのせいっす。
もしくは、頭の悪いCGIのせいっす。
ということで、直しておきました。

これを機に、抽象の意味を調べてみたのですが、
事物や表象を、ある性質・共通性・本質に着目し、それを抽(ひ)き出して把握すること。
ということらしいのです。

優秀な技術者の脳内も、G君の脳内も、OO言語の抽象クラスを作る人の脳内も、それぞれ、事物や表象を、ある性質・共通性・本質に着目し、それを抽(ひ)き出して把握しているように、感じたのですが、いかがでしょうか?ちがうかなぁ…。

3: mynz 2006年05月26日(金) 午前10時45分

いや、どれも「抽象(化)」の意味には収まっているから、辞書通りの語意として3つの事例を括る事はできるけど、それは同一で語れるコトは危ない、と感じるわけよ。

そもそも抽象って本質を捉えているの?強いて言えば、”本質を捉えたような気になるコト”こそが抽象の概念のような気がする。

そして、たとえば、O、G両氏の主張を聞いていると危うさを想像しまうわけ。

だって、未知の知識を付け取った時に一番安易に受け入れる術って、過去の経験から似た事例を引き出して、自身を納得させることやん。ってか普通はそうする。それって抽象化って呼べるかも。でも、それを頭いいとは認めがたいと思うオレガイル。

その行為から連想させられる例として極端だけど、「Cの熟練プログラマがJavaを使う時にOO指向を全く用いず、巨大なClass(ファイル)を一つだけ使い、例外機構などJavaの機能は使わず、Cの流儀でしか組まない」とか、「外国語を学習する上でいつまでも母国語を土台にしないと理解できない」みたいな、本質を見逃してしまった例を連想させる。

抽象はどこまで行っても抽象であり、本質はそこを突破した具象にあるというヴィジョンが自分の中には往々にしてあるからそこが気になるわけですよ。

OOプログラムだってそうでしょ。Abstractなクラス階層を増やしても、どこかで具体的なロジックを書かないとプログラムは出来上がらない。Abstractなんて頼らずに組めればそれが一番じゃん。

つまり、「抽象」を抽象的に理解し通すのは危ないぞってことなのかな。自分の主張は。

いや、自分でもメタメタで上手く具象的な文章をかけないんだけどね。

4: わけん 2006年05月27日(土) 午前11時55分

あらゆる物事において、人間の理解できる範囲っていうものは限られたものだと思うんですよ。だから、抽象化されたメソッドのみを見て、理解するという行為は、費用対効果がすごく良い。
ゆえに、抽象化をスムーズにできてしまう人を、頭がいいと認めてしまうボクガイル。
自分は、効率というものに高い価値をおいているので。

具象を理解するのには、すごく時間がかかってしまう。(具体的な実装を書く、もしくは、実際の実装を読んで理解するのは時間がかかる。)
抽象を理解するのは、短い時間ですむ。(抽象クラスを作る、もしくは、抽象クラスの宣言を読んで理解するのは、割とすぐ。)

けど、確かに、mynzさんの言うことも、なるほど、確かにそうだなぁっと思いました。
僕の理解だと、mynzさんの主張は、つまり、抽象クラスの宣言を読んで理解した気になっているだけじゃ、実は、継承先の具体的な実装の方にこそ、そのクラスの本質と呼べるものがあったときに、見逃してしまうということだと思うんですけど、違いますか?

と考えると、mynzさんの言うとおり、抽象化っていうの本質を捉えるものではなさそう。
辞書的な意味は
"事物や表象を、ある性質・共通性・本質に着目し、それを抽(ひ)き出して把握すること。"
でしたが、今の僕は、これがイコール"本質を捉えることと"と思っていました。
しかし、そうではないですね。

抽象化できる→本質を捉えるとができる→頭が良い
このような図式が成り立つかどうかが、主題だったと思います。

確かに、
本質を捉えるとができる→頭が良い
だとは思いますが、
そうではなくて、
抽象化できる→頭が良い
って考えても良いのではないかと。

なぜかというと、未知の知識を付け取った時に一番安易に受け入れる術は、過去の経験から似た事例を引き出すことですが、それ自体、簡単なものではないと思うからです。特に、一見、お互いに似ていないようなもの(経験)を、その性質・共通性・本質に着目して、関連付けられる能力というものは、評価してしかるべきだと。
もちろん、それによって本質を捉えられているわけではないと思いますが。(本質を捉える一助にはなっていると思う。)

O先輩の頭の中で、
抽象化できる→本質を捉えるとができる→頭が良い
っとなっていたのか、
抽象化できる→頭が良い
っとなっていたのかは、わかりません。

なかなか、考えがまとまらない…。そして、下手な文章。けど、頑張って書いた…。僕には、こんな文章が精一杯。

5: mynz 2006年05月28日(日) 午前8時29分

> あらゆる物事において、人間の理解できる範囲っていうものは限られたものだと思うんですよ。だから、抽象化されたメソッドのみを見て、理解するという行為は、費用対効果がすごく良い。

だからそこ、その難しさを障害とせず、具象をそのまま飲み込める人が頭いいと思ってしまう。そして、抽象化した場合、それが歪を持たず変換出来ている保障はない。

もちろん、モノを聞き入れても吸収できない人・場合も往々にあるだろうし、モノを抽象化して消化できる能力の度合い自体評価されるべきなのは確か。

そういう差をその本の筆者は言おうとしていたのだと理解した。その能力を「応用力」、もしくは、自分の表現でいえば、「直感」、「勘」、「ニューロンが繋がる」と言い換えるれるのではと思ったわけだ。

でも、そこからO、G両者の発言、そして「OO言語の抽象化」にフラットに繋がるところに違和感がある。なんだかコンテキストがかみ合わないというか、「抽象」という言葉のインターフェイス(辞書上の意味)に抽象しすぎてしまって、本の議題から少し飛躍しすぎている様に感じた。
本質な主題は「抽象(化)」という言葉自体にあるのではなく、その言葉の先にあるはずと思ったのに。


お互いのやり取りから、「抽象化」とは、きっとこんな風にいえるのかも。

・「抽象化してのみ込む」という方法は、あまり賢くない我々が利用出来る賢い方法。

プログラムのOOもそう。「抽象」の概念は、機械にとってはメモリと処理コストを多めに消費する湾曲な表現でしかない。でも、機械と違ってすぐに頭がパンクする我々にとっては有用で賢い発明だったわけだ。

でも、繰り返すけど、抽象化した場合それが本当に本質的に機能しているかの保証はないし、諸刃の側面がある。それが短絡的に「頭がいい」には繋がらないと思うぜ。

6: わけん 2006年05月29日(月) 午前6時36分

なるほど。なんか、いい感じで、まとまりましたね。

>その難しさを障害とせず、具象をそのまま飲み込める人

このようなことができる具体的な人物像を想像できないでいるので、この点は、自分は、まだ未消化な感じです。

>・「抽象化してのみ込む」という方法は、あまり賢くない我々が利用出来る賢い方法。

っていうのが、「抽象化」の本質を簡潔に、的確に表現しているように感じ、素敵だと思いました。


名前:  非公開コメント   

  • TB-URL  http://wkpn.net/blog/0120/tb/