プロミスのサイトです。
方法 表情 ベビー toLowerCase primeAdBenefits 投票 郵送 パティジャ 関東 機能 コンテンツ 手続き goJSFStringTableProperties 地域 直近 バンク 意見 シャヒ グローバル アクセス 権利 キャッシング 支払う 表示 一切 setDefaultWidth 同時に staticPopover 入れる イコール

放棄とは?/ プロミス

[ 184] 2007-03-24 - 登 大遊@筑波大学情報学類の SoftEther VPN 日記
[引用サイト]  http://d.hatena.ne.jp/softether/20070324

とても大きく複雑で、かつレイヤ的に OS に近い処理をたくさんやるプログラムを書く場合は、プログラミングをするときでも、事前の設計が極めて重要となる。設計をうまく行わないと、後になって全面的に書き直しをしないといけなくなったり、パフォーマンスが低下したりする原因となり、開発者の苦痛の原因となる。
当然のことながら、これまで書いたいくつかの大きく複雑といえるソフトウェアの大半の設計も、自分で行った。いかなる場合でも、設計は、最初の 1 回目で確定させ、それ以降、プログラミングの作業に入った後もその設計を後悔したり修正しないといけなくなったりするようなことは、極力起こらないようにしており、その結果、そういう惨事は発生していない。
このようなことは、僕が大学に入学してから現在までの 4 年間ずっとやってきたことだが、同時にソフトウェア開発だけでなく、大学の単位の履修 (大学では普通に進級し特に留年等することなく卒業できた)、学術活動 (4 年間で、学会で 4 件の招待講演、1 件の受賞、5 件程度の他大学での招待講演を行った)、ベンチャー起業と経営などいろいろなことを高い密度で行ってきた。同時に多数のことを行っても、能力不足による支障はほとんど出なかった。
自分の能力は、上記程度であるが、能力というのはこれくらいが標準的なのだろうと思っており、自分の能力が特別高いということは思っていなかった。しかし、どうやら、いろいろなソフトウェア開発者の話を聞いたり、記事を読んだりしてみたところ、上記の程度にできる人はごく少数らしいということに、最近気付いた。
そこで、ここ 4 年間くらい、自分自身の能力の根源について探求を重ねると共に、いろいろなことを調べているうちに、普通の人の考え方と、自分の考え方とが大きく乖離しているらしいという事がわかった。
このようなことだけを書くと、「自分にはそういう能力には縁が無い」とか「少しできるからといって自慢するな」とか「偶然だ」とか思う人がいるかも知れないから、これから、誰でも少し考え方を変えるだけで、上記のような能力・作業効率を獲得することができるのだということを伝えたいと思う。そうすれば自分一人ではなく、みんなにとって有益だと思うからである。
いきなり上のようなことを読むと、普段言われているようなことと正反対で、驚いたり疑ったりする人がいる (というか、大半の人がそのようである気がする)。我々は、普段、社会通念として、�� 努力すること、�� 論理的に考えること、�� 頭を使うこと、といったようなことをいつも言い聞かされているのだ。そのような誤った「指導」を小学校〜就職〜退職までの間 (つまり人生のほぼすべて) で受けるので、全く自分の能力に気付かないまま、一生終わるという人もいるようだ。
特にコンピュータプログラミングは、論理的な仕事の極端な例なので、プログラミングをするときの開発者の頭の中はとても論理的に思考しているのだろうと思われるのが通常であり、上記の「�� 論理的に考えないこと」にとても大きな違和感を感じる人が多いと思うので、まずこの点について説明する。
最近、色々話してみると、「コンピュータに関する技術的な仕事 (特にプログラミングやソフトウェア設計など) は、論理的思考で行うのが良い」と誤解している人が結構いることを知った。
確かにプログラミングなどはコンピュータに対する指示をプログラミング言語を用いて論理的に記述する作業なので、その作業中は、「論理的な思考」をすればするほど能率が上がるというように考えてしまうことは自然である。
複雑で難易度の高い作業においては、例えコンピュータプログラミングなどの超論理的な結果を得るための作業でも、「論理的な思考」はほとんど不要である。
ここで「論理的な思考」の定義を細かくすることはしない。そもそも、細かく定義しようとすること自体がすなわち「論理的な思考」である (論理的に、厳密に定義しないので、あなたの頭の中で、「論理的な思考」というイメージを自在に思い浮かべれば良い)。
僕は脳科学について詳しくない (今勉強を始めようとしている) ので、以下に書くようなことは、論理的・(既存の) 科学的には間違っているかも知れない。だが、論理的な思考をしないで欲しいという意図を説明するために書くのだから、論理的に間違っている点については目をつぶって欲しい。
プログラミング処理を行うのは、当然、人間である。人間は、プログラミングを行うことによって、実現したい処理内容の指令を論理的に記述し、コンピュータに書き込む。これがプログラミングである。
コンピュータに対する論理的な指令という目的があるため、プログラミングは、「論理的な仕事」であるというように思ってしまい、プログラミング作業の全部において、人間の側が論理的な思考でもって作業を行ってしまうのである。実は、プログラミングの作業のほぼすべてにおいては、論理的な思考というのはほぼ全くといって良いほど必要無い。
例えば論理的でない作業について考えてみる。音楽を聴いて「これは良い」と思ったり、映画を観て感動したりするといった作業は、論理的思考というよりも、どちらかというと直感的な作業である。音楽を聴いていて、「この周波数やパターンの音色が●●ミリ秒ごとに連続して現れる。これは良い」というようにいつも論理的に思考していては、音楽をちゃんと聴くことはできない。もっと直感的に、「なぜか上手く言葉で正確に論理的に表現することはできないが、この音楽は良い」というような知覚が発生する。
コンピュータのプログラムを読んだり、書いたりするといった、論理的な記述方式を対象とする作業でも、論理的な思考というのは、音楽を聴いたりするときと同様に、ほぼ全く必要無い。
論理的でない考え方をすることが重要なのだが、ここでは仮に「感覚的な思考」とでも書いて表現することにする。
一応、現在の科学では、人間の脳は、コンピュータのようなものであるということになっている。しかし、当然フォン・ノイマン型のコンピュータ (現在の普通のコンピュータ) のアーキテクチャではない。もっと効率が良い方法で色々な作業を行うことができるのである。
現在のコンピュータは、論理的な処理しかできないが、人間には感覚的な思考処理が行える。人間のアーキテクチャと、現在のコンピュータのアーキテクチャは、全然効率が違う。ところが、なぜかプログラミング作業をやっていると、対象となるコンピュータが論理的処理しかできないので、人間の側も、いつの間にか、無意識のうちに、論理的思考しかできなくなってしまう。ここに、大きな落とし穴がある。
人間のアーキテクチャは感覚的思考によって動作し、その処理能力はとても高い。そのため、人間は、努力すれば、感覚的思考の機能の上に、普通のコンピュータが行っているような論理的処理を行う環境を仮想的にエミュレーションし、その上で色々な論理的プログラムを実行することができる。例えば、電卓を使用しなくても数字の暗算ができたり、短いプログラムであれば、コンピュータに入力しなくても、頭の中で実行することができる。
だが、人間の感覚的思考機能の上でエミュレーションされた論理的処理機能は、所詮エミュレータ上のようなものなので、実マシン (人間本体) と比較すると、とても処理が遅い。オーバーヘッドが大きすぎるのである。あらゆる方式の処理を瞬時に同時実行することができる人間の頭脳がせっかくあるのに、論理的処理用の仮想環境を脳の中で構築し、その上で物事を考えるから、効率が悪くなる。
これが、普通のソフトウェア開発者が 1 ヶ月にわずか数百行 〜 3,000 行程度しかプログラムを書くことができないという原因になっている。人間の中に構築することができる仮想の論理的処理エミュレータは、性能が低すぎるのである。
そこで、論理的思考を極力排除し、人間の本来の得意な思考方法である、感覚的思考機能を用いて、色々な作業を行うことにすれば、とても効率的になる。
ここで、多くの人は、この人間が持っている超高性能な「感覚的思考機能」は、例えば作曲や小説の執筆、絵画の制作などの芸術的な創作作業でのみ使用することができ、プログラミングとか設計とか計算とかそういう類の論理的な作業では使用することができないと誤解してしまっている。論理的に考えると、確かに論理的な作業は、論理的な基盤の上でしか行うことはできない。
だが、僕は、プログラミングや、その他の論理的な作業についても、超高性能な「感覚的思考機能」のほうを直接用いることにより、わざわざ脳内論理回路エミュレータを用いなくても、効率良く処理できるということを知っているので、そっちを使っているというだけである。
まず、だいたいこういうソフトウェアがあればいいなあとか、このような機能を付ける必要があるなとかいった、とても抽象的なことを思い浮かべる。この際、「絶対に論理的に考えないこと」が必要である。論理的に少しでも考えてしまうと、途中までうまくいっても、それが壊れてしまい、最初からやり直しになるので注意する。感覚的な思考でもってこれを行うのである。
次に、だいたいイメージができたところで、心の中に、ソフトウェアの設計図やデータ構造といったものを思い起こす。ここで注意するのは、「絶対に論理的に考えて設計をしないこと」である。徹底して、感覚的な思考でもって設計する。
ここまではすべて頭の中で処理することができるので、別にコンピュータがなくても良い。電車の中でも授業中でも運転中でも行うことができ、便利である。
上記までで、ほぼすべての作業は完了している。残された仕事として、最後に、コンピュータに対して、プログラミングを行う必要がある。これには物理的なコンピュータとキーボードが、どうしても必要である (紙にペンで書くと手が疲れるし、キーボードを打たなくてもコンピュータに入力することができる便利で高品質なデバイスはまだないためである)。
プログラミングの目的は、コンピュータに処理を実行してもらうことなので、コンピュータにプログラムを入力しないと意味が無い。そこで、仕方無くコンピュータの前に座る。
コンピュータの前に座って、キーボードの上に両手を置けば、後はあまり考える必要はない。自動的に手がキーボードを打ち、プログラムを入力して完成させてくれる。この処理は一切、論理的思考では行われていないので、途中で論理的思考を行うことは厳禁である (作業の邪魔になる)。ひたすら何も考えない。
入力エラー無く手を動かせる速度には、物理的な限界があるようだ。多くても 1 日 1 万行程度くらいである (それでも、入力エラーは頻繁に発生する)。この作業は、エネルギーが必要なので、食事をちゃんと採ることや、好きな飲み物 (100 % オレンジジュースが良い) 等を机の上に用意しておくことが推奨される。
プログラムがひととおり完成したら、テストしてみる。上記の過程でも、やはり若干のバグが発生することがある。その大半は、コンピュータへのプログラムの入力中に発生する脳内での変換エラーのようである。脳内にある感覚的なプログラムの構成データを、コンピュータが理解できる論理的なプログラミング言語のソースコードに変換する部分で、若干間違うことがある。しかしこれも回数を重ねる度により正確になっていくので、心配する必要がない。
何度テストしても、後になってバグが出てきてしまうこともある。論理的に考えれば、上記のような正確なプログラミング作業の後には若干の誤りも無いはずなのだが、これは論理的な処理ではないので、なぜバグが発生してしまうのかは、論理的には分からない。これは仕方が無いものと考えて、バグを直せば良い。それでも、普通のプログラマーが論理的な思考でプログラムを書く際と比較して、バグの発生件数は大幅に減り、楽になる。
上記のような方法は、恐らくプログラミングだけでなく、色々な物事の設計や、文章の執筆、自動車等の運転などおおよそほとんどの作業で活用することができるのではないかと思う。
なお、何人かの、作業効率が良いコンピュータ関係のことをやっている人と話したところ、大体は上記のようなことを (表現は異なるが) 普段から実践しており、それによって、平均的なレベルと比較して遥かに高い能力で作業をしているようである。
最大の問題点は、せっかく上記のようなことを読んでも、大抵、まずは頭の中にある論理的思考が、「上に書いてあるようなことは論理的に有り得ない」というように論理的に考えてしまい、いつまでも論理的に考えてしまうことがあるということである。
論理的に考えないほうがうまく行くと聞いても、それが正しいかどうかやってみずに、論理的な正誤判断をしようとして、「論理的に考えた結果、まさかこんなことはないだろう」という論理的な考えに従い、いつまで経ってもやってみないということがある。それはとてももったいないことである。
そこで、今後時間があるときに、日記か何かで、さらにこのことについて詳しく解説し、できれば誰にでも利用してもらって役に立つ程度にまとめたいと思う。
2007/03/25 04:05 興味深い視点だが、単純に経験量(ストック)とか向き不向きの差とも考えられるんじゃないかな?論理的思考とは意識化しておこなっている作業であり、上記で指摘している“脳の感覚的思考”とは無意識的作業(所謂、“沸いてくる”とか“降ってくる”という感覚に依存する作業)と考えられるが、要は、意識的作業ではなく無意識的作業のほうが効率が良いということだろう。 例えていうなら、車の運転にしろ文章にしろ慣れないうちは一々手順やルールを考えて行動に移すといった意識的に行うが、慣れてくればそういう中間的作業をすっ飛ばして行うようになる、つまり無意識的に行えるようになるので、登君の言う「論理的思考」を介さないで行うようになるということではないかな?興味深い文章を読んで、いくつか沸いてきたものがあったので、コメントとしておきます。深夜ゆえ、的外れなことを書いている可能性もあるが、その折はご容赦くださいm(__)m
2007/03/25 04:34 努力しようとするから、苦労することになり、しかも期待していた成果が得られないことがある。努力しようとしなければ、苦労することはなく、かつ常に期待していた成果を得ることができる。このことは実際に試してみないと分からないが、多くの場合、努力しないことによってさらに悪い結果が生じるという恐怖心から、試すことができないことになる。また、「努力しないこと」を「楽をしようとすること」「何もしないこと」と同じであると誤解するとうまくいかない。
2007/03/25 04:50 そのために、多くのプログラムは、人間が意図した通りに動かないという結果になる。キーボードを通じてコンピュータに物理的に入力する必要がある以上、論理的思考は完全にゼロということにはできないけれども、可能な限りゼロに近づける、これがコツです
2007/03/25 04:51 実際のプログラミング作業以下のくだりで、(論理的に考えずに)「ソフトウェアの設計図やデータ構造といったものを思い起こす」、というのができそうもないんですけど、その変を無意識でできるようになれってことでしょうか。それって天才にしかできないんじゃないかと。
2007/03/25 04:54 それを普通の人が諦めずに、同じくらいのことができるようになる方法を伝えたいと思って、論理的な言語を使った表現方法である文章としてこれを書いたのですが、その時点で情報量が削減されてしまうことが、自分にとっての最大の難題です
2007/03/25 04:57 脳内で、どのように言語変換しているかが知りたいです。また、努力しないの件はちょっと誤解が発生するかも。英語を理解するのは、どう考えても努力なしには難しい。とても楽に、習得する方法を考えることは非常に正しい、だけれども、個人的にまったく興味がもてない → しかしおぼえなければならない局面に出くわすというときに、つまり自分を広げなければ通用しないことがわかったときに、どうやって広げればいいのかについて、ちょっと障害を与える気がします。C言語がデファクトでなくなることは、当たり前のように多分どこかで起こると思うのです。これまでオランダ語がデファクトだったのに、英語がデファクトになったように。論理化しないことは、多分とても重要なファクターだなと思うのですが、シュリーマンの言語取得のフローを見ていてとてもうなずけるところが多いのですが、問題はどうやって身に着けるかの部分でしょうか。 これが解決できれば、多分、みんなの将来は明るい! それが解決できないからみんな努力するのだと思います。
2007/03/25 05:03 プログラミングのとき ”脳内で、どのように言語変換すればいいか” を知っていますが、現時点で、論理的記述言語である言葉を用いて文章化することが困難です。だからプログラミングの分厚い良書というのは何十冊もあるが、それを読んだからといって、なかなかわからないわけです
2007/03/25 05:06 何かを習得するために、最初は ”努力する” ことから入るのが良いのかも知れません。その結果、努力することによって習得することは不可能であるということに気付き、努力するのを止めることになります。このとき、大抵の場合は習得することを諦めるようなのですが、そうではなく、努力しないでその対象物の本質を知る、即ち自分の思考プロセスにおいてその対象物への関数ポインタを獲得して保持するというとても簡単な作業を行えば、習得したことになると思います
2007/03/25 05:15 >そうではなく、努力しないでその対象物の本質を知る、即ち自分の思考プロセスにおいてその対象物への関数ポインタを獲得して保持するというとても簡単な作業を行えば、習得したことになると思いますこの理解が非常に難しいですよね(^^;本質的な理解ですよね。それができなければどんなに努力してもだめである、という話だと思います。それはとてもよくわかります。でも、どうしたら、みんながそれができるようになれるのかが、すごい大切なのだとも思います。
2007/03/25 06:10 >プログラミングに専念していても、この程度だという。イメージしていた現状と全然違う。趣旨からずれますが、職業プログラマよりも趣味でプログラマやってる人のほうがハイレベルだったりすることが多々あります。きっと趣味でやってきた人が職業にすると、平均レベルの低さに愕然とすることも少なくないんじゃないかなー、とか。
2007/03/25 10:43 こんにちは。 とても興味深い話だと思いました。と同時に、典型的な天才肌の文章だなぁと。多分平均レベルのプログラマから見たら、このエントリを読んでもわけがわからないと思います。そして、ハイレベルなプログラマは、まさにそうだと納得するのだと思います。両者の認識のギャップを埋めるにはどうすればいいのか?思考を文章化しようとすると困難なのですよね。そこで恐らくですね、過去の行動を文章にすればいいんです。プログラムに興味を持ち始めてから今まで、どれくらいプログラムに関わることに時間を費やしてきたかその行動を文章化するんです。特に、小学生〜高校生くらいの間の時期が重要だと思います。自分にとっては当たり前の行動でも、第三者から見たらあり得ないと思う行動をしている事があります。例えばですね、ネットに詳しい人が、最近ネットを始めた人に「なんでそんなに詳しいの?」と聞かれたとします。そこで行動を答えます「1日3時間×10年くらい、ネットをやってるかなぁ。パソコン雑誌とかも読むよ。週アスとねとらんとか。」すると、3×3600=10800時間になりますね。普通の人はここで驚くんです。あり得ないと。 でも、ネットが好きな人ならこれは普通です。ところで、この「過去の行動を文章化する」を先に書いてしまうと、>「さらにこのことについて詳しく解説」のほうがぼやけてしまう可能性があるので、もし余力があれば、、、お願いします。次のエントリも期待してます。
2007/03/25 13:25 どうも。とても興味深い内容なので楽しく読ませて頂きました。“1つだけ”、話の展開において気になるところがあります。それは、この話をする上での「前提条件」として、『プログラムを書くための環境はxxx』と言うことを定義しない限り、説得力どころか、整合性を維持できないのでは?。>僕は、1 日に少なくとも 3,000 行程度、多く書くときで 10,000 行以上の>プログラムを書くことができる。>いろいろ調べたの結果によると、普通の開発者の作業能力は、>1 ヶ月数百行程度、多い人でも 1 ヶ月で 3,000 行程度らしい。この違いを、プログラムを、「感覚的思考」でつくるか、「論理的思考」でつくるかの「違い」に、答えをみいだしているところに若干、無理があるのではないでしょうか。私自身も、「感覚的思考」にプログラムをつくる方が良いモノができ、「作業効率」もはるかに良いと思っていますが、『普通の開発者』と定義されている方も、「プログラム」をつくる『環境』さえ整っていれば、私個人の意見としては、一日、何万行という数字は特別難しいものではないのではないかと思います。ただ、残念ながら「職業プログラマ」は社会のしがらみにより、結果として「論理的思考」を余儀なくされるのでないでしょうか。つまり、一人で「企画」から「仕様」から「プログラミング」までをこなすのであれば、誰でも「感覚的思考」で効率よく作業すると思いますが、企業で、1プログラマーとして仕事をするのであれば、それこそ同じプロジェクトのメンバと認識を一つにするために、プログラムを「論理的思考」でうんぬん「以前」に、チームの認識を一つにするために「論理的思考」が不可欠であり、その作業後に、「プログラム」という作業があると言う『現実』があるのではないでしょうか。つまり、「プログラムを1万行書く」には「感覚的思考」が適しているぐらいに、的を絞って頂いた方が良いのではないかと個人的に思いました。ここに、「職業プログラマ」を持ち出してしまうと話が複雑化するのでは?。と、通りすがりで、話が長くなりまして、「的」を外していたら済みません。応援してます。
2007/03/25 14:11 日経サイエンスか何かで読んだのですが,認知科学者がチェスを初めてから10年間どの様に上達していくかを調べた話がありまして,その結果,記憶の構造が変化していったそうです.駒がどの様に動けるかとかそういう低レベルな思考(論理的思考)ではなく,局面や局所的な駒の配置が,どの様に有利かなどという意識の側から見ると直感的とも言える判断ができる様になっていました.また,チェスマスターに記憶テストを行なったのですが,実際の試合の局面での配置(スナップショット)は簡単に覚えられるのに,ランダムに駒を配置した局面の場合には,成績は著しく落ちました.このことも記憶の構造がビギナーとは異なることを示唆しています.
2007/03/25 14:36 コンパクトでより高速なアルゴリズムで記述可能なものを,大量の愚の集積で記述しているとしたら,それはけだし莫迦というものだ.依然として行数の多寡でプログラマの能力を議論しているあたりに,日本のソフトウェア業界の未熟性が伺える.
2007/03/25 15:26 何かを創ろうという感覚的思考とそれを実現するための過程として論理的思考があると思うんです(卵が先か鶏が先かの議論は別にして)。登さんの場合だと、論理的思考の作業がほぼ無意識的にできるため感覚的思考がより際立って意識されるしそれに集中することができる。したがって論理的思考は厳禁といった発言につながっていると理解します。ただ、感覚的思考のその背後では、何かしら無意識の論理的思考がほとんどの場合働いてるように思えます。この関係が成り立てば、感覚的思考は無意識に裏付けられた論理的思考に価値があるんだということになります。結局のところ、あまり深く考えるな。しかし、高田純次ほどには考えろ。といったところでしょうか?>文章を読む限りでは、初学者も区別せず非論理的思考の勧めをしているようにも受け取れるのですが論理的な思考をしないで欲しいという意図を説明するために書くのだから、論理的に間違っている点については目をつぶって欲しい。←将来は政治家ですか??(笑)
2007/03/25 15:49 非常に興味深いですね。全てのプログラミングが「自分一人で自分の思い通りに出来るのであれば」、月10万行は無理にしても1万行程度まではかける人は結構いるのではないかと思います。職業プログラマの場合の数百行というのは、顧客の要件を抽出する、つまり、ソフト開発の着想の部分や、品質を満たすことを示すための試験の証明作業等、全部込みこみです。実際のプロジェクトの中ではプログラミング工程は短いです。ここだけ取り出せば行数は数百行というレベルではなく、もっと高いと思います。同列で比較するのであれば、ソフトイーサというアイデアを着想した時からの完成した期間までの平均行数で述べるのが良いかと思います。感覚的な思考は実現したいことが明確で、それをどう設計に落としていくかという時に重要な思考スタイルだと思います。
2007/03/25 16:41 おそらく頭で完成イメージが出来れば、既に殆ど完成に近い感覚を持っていると思われる。(コーディング時)当然ながら頭の中でシュミレーションしてデバックがある程度すんでいる。当然バグも少ない。 ただこれが出来る職業プログラマは殆どいない。職業プログラマの場合、コード以外の物が全てカウントされているので実際はもう少し生産性はある。 その一方で開発者個人の能力の揺らぎが非常に大きく不具合は、開発者数の増加と共に級数的に増加する傾向があると思える。未然に防ぐ各種防衛をボトムラインにあわせる設定する傾向があり、最終的な生産性が下がってしまう。大部分の職業プログラマは違う意味で「何も考えない」ように思われる。
2007/03/25 19:30 私の場合仕事柄論理的に考えざるを得ない立場なのでどうにもこのエントリには共感出来ない部分が有るんですが、それ以前に、一つだけ質問をば。貴方は「プログラムする」という事のみに主点を置いて話していますが、それは「自分の思う様にプログラムしている」のか、「仕事として依頼されたモノをプログラムしている」のか、どちらなんでしょう?――何れにしても興味深い文章だったので、相方(趣味でプログラマをやっている)にも帰ってきたら見せてみようと思います、では。
2007/03/25 19:56 人の起こす行動や思考の選択を行う決定権を握っているのは脳であってその脳に宿る意識には無いのではないかと思います。(”私”と”私の脳”は別物という考え方です)もっといえば、世の中に頭がいい人悪い人、絵のうまい人下手な人プログラムの書ける人書けない人が存在するのはそれぞれの脳が戦略としてそのような決定を行った結果だからじゃないかとまで考えています。たとえば、プログラムを書く事が、楽しい・楽しくない、苦痛である・苦痛でない、といった感覚は脳の持ち主の意思に関わりなく沸いてくるわけで(個人的な感覚ですけど)じゃぁ、プログラム書くのが苦痛なんだけど、まるで服を着替える感覚で明日から苦痛じゃなくするわという風にはできないわけです。これらの感覚は、脳によって本人の意思に関わりなく決定されているんじゃないでしょうか。言葉をしゃべるように、体を動かすように、まるで呼吸する感覚でプログラムを書けるか否かは脳によって勝手に決定されるので、そうじゃない人はあきらめてください・・・・・というのも違うような気もします。というのは、脳を”説得する”のは不可能ではないと思うからです。脳をどう動かすかの決定権は脳にあり、意識はその奴隷であると捉え、意識のできることは、脳に対する説得のための材料を揃えて説得することしかないと思います。ロンリテキシコウというものを脳に強いるというのは、脳と意識の主従関係を無視する行為なので非効率的になるのは当然と言う風に感じました。
2007/03/25 22:11 はじめまして。質問ですが、プログラムの行数とソフトウェアの実現できる機能というのは、やはり比例しているのでしょうか。私のまわりには、やたら行数をかけて、プログラムを書くプログラマが割りと多く居るように思います。それをデバッグの際に見直して、コードサイズを減らすことも多く、あります。質を問わずに量だけを論議しても仕方ないように思うのですが。・・・・
2007/03/25 22:25 論理性という”性質”は、感覚という”結果”の後にしか発生しないということ。それを追う論理的な思考は、感覚的な脳の働きよりも効率が悪くなるという当たり前のことですね。なんだかんだいって、大衆でも理解できる感覚だと思いますしある程度の能力を有している方なら知らずに様々な事について行っているでしょうね。ただ例が少し悪いのと、説明が少し洗練されていないので理解力の乏しい方には正確に理解するのは難しいかもしれませんね。
2007/03/25 23:12 職業プログラマの場合、自分の頭の中で消化し切れない発注をされる場合もあるため、そのあたりで平均値が下がっているのでしょう。仕事のプログラムは遅いけれども、個人で作るプログラムは信じられない速度できちんとしたものを仕上げる人もいます。自分の脳内で消化できないものは論理的に積み上げていくしかないですからね。
2007/03/25 23:33 耳が聞こえない人にむかって「相手の行動や唇の動きから言ってる事を推測するんじゃない。あいての出している声を聞くんだ」といっているようなもの。コードを感覚的に捉えること自体が一つの能力であり,それができない人には,この文章は無意味。ただ「世の中には自分が持っていない特殊な能力を持っている人がいるんだ」と思うだけ。ちなみに,「コードを感覚的に捉える能力」は持っている方が少数派です。「楽譜を見ただけで音楽をイメージできる」のと同じくらいの特殊能力です。ただ,音楽を職業にしている人はほぼ全員,楽譜を読む能力を持っているのにたいし,プログラミングを職業としている人の中でもコードを感覚で捉えられる人が(少なくとも日本では)少数派です。これについては業界人として日本の将来に不安を感じる点ではあります。
2007/03/27 02:25 結局「設計段階でのイメージが重要」という結論でしょうか?その通りだとは思いますが、経験を積んだ設計者はみんなやっていると思います。。ちなみに、他の人も書いてるので詳しくは書きませんが、職業プログラマの生産行数が少ないのは、コーディング以外の作業が非常に多いためです。一度『ちゃんとした』製品の開発を担当してみれば分かると思います。
2007/04/03 04:31 ちと、大げさでは?そりゃあ、一人で完結するなら多くの人が3K/day〜10K/day程度はいくでしょう?要件定義もせず、設計書も書かず、レビューもせず、試験項目書も作らず、証跡も取らなくて良いんだったらね。そんな幸せな仕事ってあんまり無いですね。そんな生産性が出るのは趣味で書くときぐらいですよね。書いてて楽しいし。コメントなんてあんま書かないし。エラー処理もあっさりしたもんだしね。登さんの感覚的思考というのは賛同しますけど、感覚だけに個人差があると思われるので、それベースだと絶対仕事が回らない。チームなんて組めない。まぁ、優秀な技術者ばっかりが集まってるプロジェクトだと随所で神業が見れますけどねぇ。なかなかそんなのはねぇ・・・。システム作りなんて、所詮、他者との関わりのほうがファクタとしては大きいし、そこは論理的に話をして意識あわせをしないとねぇ。メイク〜単体なんて全体の1/4〜1/5にも満たないんじゃないの?昨今、特に・・・。
2007/04/09 23:58 確かに、読むのが面倒になるレスの多さですね。だから、それらのレスを踏まえずに、あなたの日記を読んだ感想を言うと、「感覚的に考える」とあなたが言っているものは、すでに論理的であるから、その主張は間違っている、ということです。あなたが電車に乗ったり、運転したりしているときにプログラミングについて考えていることは、無意識に論理立てて考えている。論理だてるというのは、説明可能な客観的方法でその考えを構築しているということ。その作業をあなたは慣れや能力の高さ?から、あたかも感覚で行っていると感じているけれど、論理的根拠のないところから考え始めている訳じゃないから、感覚的とは言えない。実際にPCに向かってプラグラムを組んでいる時は、ある約束事に沿って機械的に作業をこなしているから、論理的な思考を働かせているとはいえない。だけど、それを機械的に行える程度にあなたは作業に慣れているし能力もある、そこには個人差があると言える。感覚的に行うからできる、という話じゃない。あなたがなんの悪気もなく本心で上記の日記を書いているなら、あまりにも自分や他者を知らないのだと思う。それは、自慢していると思われても仕方ないのではないでしょうか。どう思いますか?
2007/05/01 09:07 赤ちゃんの頃にできてたこと、、ここで再発見することができました。登さんほんとにありがとうございます(T^T)とても腹に落ちたことを、僕なりに解説してみようと思います。右脳でおおまかにイメージを捕らえて、出力を左脳で微調整していく。フローやゾーンの状態とでもいうのでしょうか。凄い集中力を得られます。フローやゾーンは別に登さんのこの方法じゃなくても入れます。ほぼ意識しないでできることがそうであり、低レベルのテトリスを長時間つづけるとかすいすい進むRPGに熱中してるときとか職人さんの熟練した高度な作業もそうですし、単純な仕分けといった肉体労働でもこの状態に入れます。ただこの状態は、外部からの圧力で解けやすい。電話とかで中断すると、もう一度そのフロー状態に戻るのに苦労します。左脳で一から考えてしまうから。また、壁にぶつかっても解けます。自分の知らない単語、今までになかった状況その他のいろいろな変化で、もってるもので対応しきれない場合スランプというか、手が止まってしまう。みんな多かれ少なかれ、フロー状態にはもっていけるものの毎回中断や、壁によって途切れてしまい、再開できなくなる。ですが「考えない」とすると中断や、壁にぶつかったところでもう一度イメージからすぐにはじめれられる。中断された作業はすぐにノッた状態で再開できるし壁にぶつかっても、そこを論理でくずそうとせずイメージによって、自分にとって最短の道で突破できる。(なんか書いてて気持ち悪いけど気にしないw)ちょっと話し戻して「考えない」っていうのも厳密には違いますね。最初に抽象イメージを設定するから、右脳では考えてます。そのイメージを左脳で修正して肉体を通して出力すから、考えてはいるんです。ただ、言語野を通らないというか右脳全体の活動に対して、言語野の働きが比較で小さくなるというか。脳がイメージで動いてるから、意識的に考えてるとは思わない。出力のために言語野が働いてるだけでみんながいう、考えるために言語野が動いてるわけじゃない。ピラミッドの絵を描くとき考える人は、白紙にドットでひとつひとつ点を打って描いてます。登さんのやり方は、ピラミッドのJPEGイメージの最低画質を右脳から画面上にまず投影してそれを左脳で修正するような、、、最低画質だから修正も間に合わずところどころほころびがありますが圧倒的に速い。次に似たような画像を描くときは、中画質ぐらいのJPEG画像が出てくるからほころびも減ります。壁にぶつかったとき、例えば英語だと知らない単語では話せないはずです。でも、意外と意思疎通はできてしまう。他の単語を組み合わせて似たニュアンスを表現したり相手の単語から、読み取っていきなりスラングを作り出したり。プログラムも似たようなもんじゃないでしょうか?壁にぶつかった場合、左脳的に考えれば教科書と文献を調べなおします。知らないライブラリーや、関数が必要になるからでしょうか?でも、考えないで抽象イメージでそのまま進めていくなら自分で最適な関数やライブラリーを作り上げたり、これまでの既存コードから、別の組み合わせや抜け道を見つけたり他人の似たプロジェクトコードから、すぐにコアを拾い上げたり知識の蓄積とは違う、最短な方法で結果を出してくる。似たような話はいくらでもききます。ブルースリーがいう「考えるな、感じるんだ」「チーズはどこへ消えた?」の2匹のねずみと、2人の小人の寓話で一番最初に結果を出せたのは何も考えずにイメージを求めるねずみでした。思考は現実化するとたくさんの偉人はいいます。イメージが共有されたチームはとんでもなく強いです。(逆にみんなこれができないから苦労する)緊張の場面で成功を意識するほど失敗します。成功しようという意識そのものが失敗の逆暗示となって。例えばこの文字をみてても、ひとつの文字を意識してひたすら観察すると文字は崩れます。この文字の意味は?この線の、この形の意味は?と意識するほど読めなくなります。同じように手を見つめて、手の意味を考え出すと手が崩れていくような錯覚に陥ります。精神病患者にありがちな思考ですね。これを続けてたら自律神経からおかしくなっていくでしょう。イメージこそが自分の体を保持している。と、どこかの医学者がいってそうです。作家が「神が降りてくる」というような状態もフローでしょう。キャラが勝手にしゃべりだして、動き出す。ひたすら、物事を考えてわからなくて、、、考えるのをやめたとき、ふとお風呂場の中で、布団の中で、街を歩いてあるものを見て、解決案を見つけるというポップアップもそうです。考えないからイメージだけ残っていっきに解決に向かう。自分がどうやって歩いてるのかと意識しても歩き方がおかしくなってしまう。ギネスに載った小惑星を最多で発見した人の秘訣も「小惑星をみつけようと思わなかったこと」でした。一流選手が一流選手を育てられないのも意識を通して教えようとするから。弟子が師匠を超えられないのも、意識で学ぼうとするから。この場合師匠がない人や、師匠をバカにしてる人のほうが大成します。フロー状態だとアホみたいにでてきますね、、とりあえずこのへんで。「抽象イメージを設定して、考えないで取り組む」(イメージの舵取りするぐらいには考える)これなら中断があっても、壁にぶつかっても、いつでもフロー状態に戻れます。まわりの雑音が気にならないぐらいの集中力。しかも、どこまでも持続できます。(昨日この記事を見て、フロー状態が面白いままWebサーフィンをしてたところ終身時間9時間オーバーしててびっくりでしたw気づかないうちに徹夜、体は疲れてないですけど脳が凄い疲れてます。疲れてるのかどうかわからないけど血が集まってるような感覚。それでも集中力は切れませんが、甘酸っぱいものがほしいですね。ブドウ糖の大量消費と、クエン酸が足りないのでしょうか?なるほど、、、オレンジジュースwグレープフルーツジュースでもいいかなと思いましたがそれより甘そうなオレンジが飲みたいですwところで登さんは「自分の能力は、上記程度」とありますが、この抽象イメージの上限を上げていけば上記程度ではなく、天才プログラマーに変身したりしないでしょうか?いつでもフローの状態といっても、そんな普通と極端に変わるわけじゃありません。途切れない集中力と、自己最短で壁を越える手段が身につくぐらい。普通の営業マンとトップ営業マンぐらいの差でしかないでしょう。その積み重ねが天才と呼ばれるゆえんなんでしょうか?24時間ずっとひとつのことに熱中できる偉人とかはこの状態にもっていくのがうまかったとしたら納得もいきます。コメントで指摘されてるとおり、一流の職人さんはその同じ作業でフローに入ることはたやすいでしょう。ですから、そういう人たちよりむしろ未熟な僕とかの方がいろんなことに応用できて有益に思えます。どうにもデタラメな文章ですみません。ここを読む人が理論解説の一助となれば幸いです。なにか、これをやって結果が出たらいつかトラックバックでもしてみます。赤ちゃんの頃にできたはずの、無垢な失敗を恐れない進み方。それに気づけたことはホント大感謝ですo(> w <)〇゛
※ この Web サイトのコンテンツは 登 大遊 が個人的に運営しているものであり、ソフトイーサ株式会社や筑波大学内での立場として公式なコメントを掲載しているものではありません。一応コメントは投稿できるようにしていますが、個人的に運営している日記のため、自分が不快に思ったコメントは前触れ無く削除しております。ご了承ください。同様に会社に関するコメントなどについても、削除される可能性があります。コメント書き込み機能については、匿名の掲示板のような状態になることを予防するため、はてなユーザーからのみ受け付けるように設定することもあります。

 

戻る

プロミスのサイトです。

プロミスのサイトです。