teruyastarはかく語りき

TVゲームを例に組織効率や人間関係を考える記事がメインのようだ。あと雑記。

プログラミングのスピードを上げる方法2


http://d.hatena.ne.jp/teruyastar/20080308/1204965502
↑前の記事からの続き。

脳の予測機能

ほぼ日刊イトイ新聞 - ねむりと記憶。池谷裕二+糸井重里


糸井
池谷さんは音楽がお好きですが、
聴いてるときには、演奏するように
音楽をたどっていったりしませんか?


池谷
ああ。そうです、します。
BGMとして、仕事しながら聴くときは
そうではありませんが、
ちゃんと音楽を聴くときには、
その演奏に参加しています。


糸井
聴くことは、
未知のものが流れ込んでくるというイメージで
どちらかといえば受動的です。


でも、実際に好きで聴いてる音楽って、
主体と客体の転換が行われて、
音楽を追っかけていくようになります。
映画でも、小説でも、
まじりあって経験するように
鑑賞するんじゃないかな、と思うんです。


プログラムとは関係ない話になってきたが
まあ聞いておくれ>>1よ。



カラオケがうまく歌える人ってのは、
その曲をしっかり「予測」して
5秒先の未来をはっきりイメージして捉えてるからうまく歌える。


これが、
「歌うタイミングをはっきり予測イメージできてない」
「自分とオリジナル歌手とのイメージがあわなくてドギマギ」
「今の歌詞をおうのに精一杯で、先の予測が間に合わない」
「つまり緊張して上がっている」
と、うまくうたえない。


うまく歌える人、いやさうまく歌える曲ってのは
歌を完璧に覚えてるので、先の予測が容易。
イメージ先取りで、自分の声で演奏し
なんならちょいとアレンジ効かせたりするw



例えばコンサートがカラオケでも、
観客の知らない新曲はいまいち盛り上がらない。
聞いてる側が「予測」不可能だからだ。


これがみんなの知ってる大ヒット曲だと、
聞いてる側も「予測」がやりやすく、のってきやすい。
が、
予測がガッチリはまるのは、歌ってる人だけで
聞いてる側としたら予測を上回るような意外性が、
5分の中に何度かあったらベスト。
ところどころに曲無視でオリジナルより強い感情を入れたりとかw


池谷
予測を働かせて聴くときには、たしかに
次にこうなるだろう、こうなるだろうと
中に入り込んでいますね。


これは、聴いている人だけじゃなくて
演奏する人もそうです。
例えば、バイオリンの人は、
指揮者が手を上げたときに
弓を動かしはじめるのでは、遅いわけです。
指揮者が手を動かすだろうということを
予測して用意する。


「予測」は脳が得意とする、あるいは
必要とするプロセスです。
ひとつだけ、脳の機能をアップできるとしたら、
僕は「予測」を選びます。


脳は、いろんなことをやっています。
でも、そういういろいろなことは
突き詰めると、予測のためにやっている、
と言ってもいいぐらいです。

「期待予測」を上回るかどうか


予測が脳のプロセスとしたら
ちょうど予測通りいくというのは「シナプスの強化」にあたる。


これがうまくいくと当然その回路は強くなり
その系統の情報伝達が太く、賢くなる。


さらに!
上で言った「意外性」。
ときに曲を無視するかのような感情を込めた言葉。
これは「新しいシナプスの形成」を引き起こす。


この場合、強化されかかってたシナプスへの新しい刺激でもあるから気持ちいい。
意外性もやりすぎると、、
つまりあまりにオリジナルから関係ないような
つながりが見あたらないような意外性は
予測してたシナプスへの刺激ではないので面白くない。


この予測。
そのまま会話、ドラマ、お笑いなどにも当てはまる。
(じゃあ、このブログでも期待予測を上回ってみろとかいうハードル上げはなしの方向で、、)


期待予測以下の歌、
出だしは期待予測以上でも、そこから意外性のない歌。
そういうのは聞いても飽きられる。
もちろんみんなが知ってる曲ほど、期待予測に近づけやすい。

池谷


例えば明るい音楽を聴いていても、
そこに自分の感情が入っていないとき、つまり
予測する気も起こってないときは、
むしろ不快になりますね。
好きな音楽でもそうなります。
そういうときには聴かない。


好きな音楽でも、自分のメンタリティと一致しないときは
別のシナプスが強く、それに関連する情報を刺激する方が
当然気持ちいい。

糸井


人との会話なんかでも、
相手の聞き方や出した答えが
予測と違ったときに、
コミュニケーションが壊れますよね。


池谷


はい。ただ、会話の場合は、あまりにも
予測が当たりすぎてしまうのも、
どうでしょうかね。


糸井

たしかに、A、B、C、D、Eと
順番にしゃべるような話をされているときは
ちょっと腹が立ちますね。
ABCDEイロハとか言ってくれると、
いいです(笑)。


池谷


きっと夢の中のFの役割のように、会話では
相手が完全に予測したとおりに
動いちゃダメなんですね。
予測を壊してあげるコミュニケーションも
エンターテイメントです。


糸井

おもしろい言葉が
価値を持っているのは、
そこのあたりですよね。
自分の予測を刺激してくれるもの。


池谷

しかも、壊しすぎるんじゃない。
絶妙の塩梅で。

で、話をプログラム時の「スピードに乗ったフロー状態への移行、維持」とは?
に戻すと


しいていえば、

世の中は予測通りに動く


ここでは他人が引き起こす「意外性」は無視するとして、
自分が予測する未来、自分が意識的に起こす意外性の範囲で
予測通りになる。


でも未来は天気予報のようなもの。
バタフライエフェクトしまくり。
そんな未来誰も予測し得ない。
いや、大企業のボスなら携帯や、インターネットがこうなっていくとか
とんでもない先見の明で予測し得たりするが、
そういう人たちの話もひとまず置いておく。
(業界俯瞰、世界情勢俯瞰、お金の流れ、そしてその当事者予測という情報を持ち得てるので、
一般的には当てはまらない)


ただ、5年、10年先の予測は無理でも
5秒、10分先の予測は可能だ。
そして、みんなその予測通りになっているはず。


何を当たり前のことを??
10分先のつまらない予測が実現したからってどうしたっていうんだ??


そうじゃない。
つまらない予測。
それは、期待予測を下回ってるということだ。
人生というシナプス「強化」にも「意外性」にもなってない。
人生をうまく歌えてないのだよ。


誰でも10分先の期待予測を上回ることができる。


10分先に何も求めないのであれば、期待予測以下の人生。
それが予測通り実現されてしまう。


10分先を予測以上に求めて、
かつ自分なりのアレンジで意外性をもたせたら
それは自分で音楽を演奏してるのと同じ。
はじめて人生のステージに立てる。
みんなが注目してくれる。


ほんのちょっとした未来のイメージは誰でも支配できる。
演奏することができる。
望んだとおりの未来になる。

たかだか10分先の未来を実現しても大局で何か変わる訳じゃないから無駄だよ


というなら、それはそれで望み通りの期待を得れてるから良いのだ。
「どうせおれなんて期待予測以下の人間ですから」
という望みだって期待通りの自己実現に他ならない。


もっともっと大きな予測は


これが1年や1ヶ月、いやさ1日先の予測でも、
バタフライエフェクトが入り込みすぎなので
とても詳細な予測は不可能かもしれない。
(1日ぐらいは把握できるかな?人と環境によるか)


この場合、邪魔が入ってもそれに無理にあらがおうとせず
予測イメージだけ崩さないよう保持してればよい。


長期の予測未来を邪魔されたとき
それにあらがおうとした時点で、
「戦って苦労する自分」が新たに予測される。
そしれその苦労は実現するが、一時的になんとか勝つかもしれないが
これを毎日毎時対応してたら
とても長期予測を維持する体力なんてもちはしない。
ここでみんなが夢をあきらめるのはむしろ当然。


予測途中でバタフライエフェクトが起きたら予測をアップデートする

バタフライに逆らうんじゃなくて、受け流すように力として取り込む。
予定とは違うのだけど、新たに予測の道のりを書き換える。
それを取り込んだ形で書き換える。
大きな予測は常にそうしていく。
最終的な予測に到達するのであれば、道はどこからでもよいと思う。



逆に言えば昨日の記事での完璧なプリプロダクションや、
その環境整備はバタフライエフェクトを最大限押さえるやり方とも言えよう。


もちろん、そんな権限を持ってる人ばかりでもないので、
予測をアップデートするやり方もある。


どっちが正しくて間違ってるとかでもない。
ビジネス的には、納期をきちんとまもる完璧なプリプロダクションを求められるだろうが
それは最短距離で、予測通りにはまることを意味する。



予測をアップデートするのは、バタフライエフェクトの力を取り込むことなので
より大きな期待予測を得られることになる。
それならどっちもありだ。



例に出した「スマブラX」は完璧なプリプロダクションに近い形で
当初から「スネーク」などの参戦も決まっていた。
桜井氏は、最初からキャラクターの全部を決めてしまう方が制作として幸せだと強調している。


しかし。
そこで「ソニック」は例外だった。
「ソニック」だけは2007年になって予定外の参入となっている。
ここで桜井氏が、最初の完璧な予測を曲げずに通してたら「ソニック」はなかっただろうが
そこで予測のアップデートをしたことでさらに賑やかになった。

 桜井氏が提示した講演のテーマはキャラクタデザイン。
スマブラX」は数多くの有名キャラクタが登場するゲームだが、
初期の企画立案の際に登場キャラクタも決めてしまうと言う。
スマブラX」の企画が決定したのが2005年7月7日。
つまり2年半前にはキャラクタが決定していたことになる。


 キャラクタ選定について桜井氏は、
「最初に決めていかないと入るものも入らなくなる。
その代わり、多めに考えていって、随時カットしていく。
ただし、全力で可能な限り詰め込んだつもり」と独自のポリシーを語った。
ちなみに今回はソニックだけは例外で2007年に入ってから決まったという。


 キャラクタ選定の基準については、
キャラが立っていること、
固有の技を持っていること、
開発的に不可能ではないこと、
シリーズ間でバランスを取ることの4点を挙げた。
特に重要視しているのが、


「そのキャラクタにしかできないことは何か」だという。


「最初からコンセプトを明確にすることがゲーム全体を引き締めるポイントになる。
ディレクターはこのキャラクタはこういう方向だということを形容できる必要がある」と、
初期コンセプトデザインの明確化を強調した。


桜井氏は具体例として「スマブラX」の新キャラである
アイク、メタナイトゼロスーツサムス、スネークの4人は、
開発初期段階からキャラクタの方向性を言葉で明確化したという。


大きな予測に達した人たちは口を揃えて言う。


まさかと思うような困難が、あれもこれもたくさん起きたが
最後はそれを素直に受け入れ、乗り越えてきた今を振り返って思うと
実はそれが今ここにこうやって立っている最短の道であった。


もちろん予測以上の期待を手にしてだ。


まとめ


「フロー状態とは、自分の期待予測通り、又は期待予測以上の現在支配を指す」


「5分先の期待予測ぐらいは、ちょっと前向きになるだけで誰でも支配できる」


「1年先の期待予測は、バタフライエフェクトに抵抗せず
 素直に取り込んで力に変える形でその分、予測をアップデートする」


「何が起こるか分からないので、予測は一本道の論理的思考よりも、
 何が起こってもイメージだけの感覚的思考で期待予測を作り替えていく」

「つまり、常に5分先の自分をワクワクのイメージで支配する」
「何が起きても受け入れイメージはそのまま」
「論理的思考をはさむと無数の道が閉ざされる」
「それはイメージを、自分自身を信じること」


フロー状態の発動と維持に関しての別解釈でした。


あとがき


これ書きながら公文式のCMを思い出した。


日本の算数教育はこう

4+8x8=?


ヨーロッパのどこかはこう


?+3/?=8



算数は論理的思考そのもののはずなんだけど、
あきらかに、日本は一本道の解答以外の答えがなく
ヨーロッパのそれは、答えに至る道が無数に存在しえる。
マニュアルに頼らない、世の中のバタフライに臨機応変に対応できるのは。。


日本語や、日本の文化、八百万の神みたいな宗教観
むしろ答えを一つに絞らず
感覚的矛盾をあいまいのまま許容してたところに
複数の答えを全てよしとして、
それによるおおらかな豊かさがあったと思うのだが、
いつからか、論理的も論理的な思考の教育ばかりに僕たちは育てられ
たくさんのひずみが生まれてきたのかもなと思う次第。



そして、話はここで終わらない。
次に、登さんの言う論理的思考の破棄の無茶ぶりを、
無茶ぶりのまま解釈するのに挑戦する。



プログラミングのスピードを上げる方法 - teruyastarはかく語りき


プログラミングのスピードを上げる方法3 - teruyastarはかく語りき


Doingリストの拡張版、「Movingリスト」の紹介 - teruyastarはかく語りき


大事な話があるんだ - teruyastarはかく語りき

プログラミングのスピードを上げる方法3


いやもう、タイトルとは全然関係ないところまでいっちゃうけどね。
一応続き物なんで。



僕も書きながらですが、
登さんの摩訶不思議言霊を解析していきたいと思います。

2007-03-24 - 登 大遊@筑波大学情報学類の SoftEther VPN 日記

僕は、1 日に少なくとも 3,000 行程度、多く書くときで 10,000 行以上のプログラムを書くことができる。
その結果、多い月で 10 万行 / 月くらいである。
なお、言語は書くソフトウェアの性質上、大半が C 言語である。


また、プログラミングにはバグが付き物だが、ここ 2、3 年の間は、発生するバグの数を極めて少なく保つことに成功している。


略、


このようなことは、僕が大学に入学してから現在までの 4 年間ずっとやってきたことだが、
同時にソフトウェア開発だけでなく、大学の単位の履修 (大学では普通に進級し特に留年等することなく卒業できた)、
学術活動 (4 年間で、学会で 4 件の招待講演、1 件の受賞、5 件程度の他大学での招待講演を行った)、
ベンチャー起業と経営などいろいろなことを高い密度で行ってきた。
同時に多数のことを行っても、能力不足による支障はほとんど出なかった。


これから、誰でも少し考え方を変えるだけで、上記のような能力・作業効率を獲得することができるのだということを伝えたいと思う。

wktk( ゚∀゚)o彡゜フウゥッ♪ フウゥッ♪


中略

上記のような方法は、恐らくプログラミングだけでなく、
色々な物事の設計や、文章の執筆、自動車等の運転などおおよそほとんどの作業で活用することができるのではないかと思う。


しかもこの方法は、一切努力をしたり苦労したりする必要が無く、とても気楽である。


なお、何人かの、作業効率が良いコンピュータ関係のことをやっている人と話したところ、
大体は上記のようなことを (表現は異なるが) 普段から実践しており、
それによって、平均的なレベルと比較して遥かに高い能力で作業をしているようである。


そういやid:kogaidan氏も、脳の処理に出力が両手じゃおっつかないから
「早く脊髄に電極差したい」とか変態発言してましたね。
(仕事しながらもあの読書とエントリー量は超変態)


最大の問題点は、


せっかく上記のようなことを読んでも、大抵、まずは頭の中にある論理的思考が、
「上に書いてあるようなことは論理的に有り得ない」というように論理的に考えてしまい、
いつまでも論理的に考えてしまうことがあるということである。


論理的に考えないほうがうまく行くと聞いても、それが正しいかどうかやってみずに、
論理的な正誤判断をしようとして、
「論理的に考えた結果、まさかこんなことはないだろう」という論理的な考えに従い、
いつまで経ってもやってみないということがある。それはとてももったいないことである。


英語を何年も勉強しても英語がしゃべれない人というのは、
論理的思考で日本語にいちいち変換してるらしいですね。


聞くときは単語全てをいちいち日本語に解釈しなおして、
しゃべろうとするときも、日本語で思ってそれを英語に訳してはじめてしゃべりだす。
もちろんそんなスピードでしゃべれるわけがない。


日本人が言う「愛」と
アメリカ人が言う「Love」も
ニュアンスは違ってきますし、ほんとの意味で訳せるものではない。
「恋」が「like」かというとまた違いますし。


論理的に考えず、LoveはLove likeはlikeとしてそのまま受け取る。
(学習には英和辞典より英英辞典がよしとされてます)
赤ちゃんみたいに素直にね。


むしろ論理的にいちいち考えない、渋谷の女子高生とかのほうが
ずっとコミュニケーション能力高かったりしそうですw



この記事の現時点でのトラックバックを全部読んだのですが
さすがにトラバ送るだけあってか、意外と賛同意見が多かったのはビックリです。
「登さんほどとはいかなくても」と注釈があっても、
英語をしゃべれる人としゃべれない人ぐらいの圧倒的な違いがそこにはある。



で、僕もまだ理解し切れてない方なので、
凡人派のほうの意見をつぶしていってみましょう。
登さん的に、「それができない理由」を消していきます。



凡人派ではないようですが、個人的に一番具体的だった意見は

同時並列的な論理的思考 - fuzzy Weblog@hatena


言いたいことはわかるのですが、前提条件がいろいろとあるので読者の感覚とずれが生じるのかも。多分、


1. ソフトのクライアント(要求元)が本人で、


2. 開発に必要な基礎知識が習得済みで、


3. 実現に必要な技術の考案が容易で、


4. 他人(顧客や営業、上司など)に説明する必要がなくて、


5. 他のコーダーに指示・指導・教授する必要がないか、それぞれ独立して活動できる


場合には
「1 日に少なくとも 3,000 行程度、多く書くときで 10,000 行以上のプログラムを書くことができる」
は実現可能でしょうね。
そもそも、「1 ヶ月にわずか数百行 〜 3,000 行程度しかプログラムを書くことができない」
というのは登さんが取り扱いたいと思う仕事とは重ならないでしょうし(笑)。


もしこれが真なれば、とても話は簡単です。


1,自分発のアイディアであり


2,すでに開発の基礎知識を取得済みのレベルで(大学生並み)


3,技術の考案が容易な方法に的をしぼり(枯れた技術の水平思考


4,他人に説明する必要がないわかりやすいもので


5,ひとりでやるか、それぞれ独立して活動できる範囲にとどめる


ということですから、そうしちゃえばいいんです。
でも普通の会社でそんなことは無理だと思うでしょう。


でもこれは独立してやってもずっとおいしい話。
何せ月に数百行と、日に1万行では100倍以上の差があります。
会社のような事務や営業がいないから独立では生産性のかけ算ができないとしても
例え生産性給料が会社の3分の1にしても、
独立は100/3で、30倍にもなります。


なんなら20%ルールを適用してるGoogleにいけばいいわけですし
Googleは全然技術者を募集してるわけで。
3,4以外は満たせる人多いかもしれません。


でも、もしかして僕が知らないプログラムの世界というものは


「月数100行が、月30万行に劣るとは限らない」


のかもしれません。
コメントや、トラバで「行数では一概に比べられない」という意見を多数見ました。
まあ、30日毎日プログラム漬けってわけでもないでしょうし、
それでも1行1円で、月900円と、月24万円とか言われたらもの凄い桁違いに思えますが
実はどっちも24万円の価値があるのかもしれません。
プログラマでそんな生産性が違いすぎたら、
凄い人、4,5人ですむ話ですしね。
(あれ? でもそういう少人数がいつもとんでもないWebサービスとか開発してるのか?)



でもそれじゃ面白くない。
「登さんは行数多くても結果は全然普通」
「登さんは天才すぎ」
の結論では解析にならないです!


コメントから

”単純な経験量・向き不向きの差” ではありません。

努力しようとするから、苦労することになり、しかも期待していた成果が得られないことがある。
努力しようとしなければ、苦労することはなく、かつ常に期待していた成果を得ることができる。


このことは実際に試してみないと分からないが、
多くの場合、努力しないことによってさらに悪い結果が生じるという恐怖心から、試すことができないことになる。
また、「努力しないこと」を「楽をしようとすること」「何もしないこと」と同じであると誤解するとうまくいかない。

論理的思考は完全にゼロということにはできないけれども、可能な限りゼロに近づける、これがコツです

何かを習得するために、最初は ”努力する” ことから入るのが良いのかも知れません。
その結果、努力することによって習得することは不可能であるということに気付き、努力するのを止めることになります。
このとき、大抵の場合は習得することを諦めるようなのですが、そうではなく、努力しないでその対象物の本質を知る、
即ち自分の思考プロセスにおいてその対象物への関数ポインタを獲得して保持するというとても簡単な作業を行えば、
習得したことになると思います

まるで武道や宗教の世界w


肯定派の意見も集めてみましょう。

メイブルストリート・blog日記 - プログラミング時の思考回路


若い時に、会社の飲み会で上司から、


「xxx(私)は、超ピーキーなレーシングマシンみたいなんだよなぁ。」
「パワーバンドに入ると物凄いけど、ちょっとでも外れるとスカスカ(w」


なんて事を言われた記憶があります。
それを言われた私は、「あぁ〜、それは上手い表現だなぁ(w)」と思いました。


パワーバンドに入っている日は、
「ここのコードはこう言う意味を持ってるから、こうあるべき」
という、論理的に考える思考方法では無くて、
「頭に浮かんだイメージを、実装する言語用に変換するだけ」
てな感じの「直感的なプログラミング」をしていたように思います。
そういう日は確かにコードの量は増えてましたが、バグも結構ありましたね。
でも、そういう時に作りこんだバグは、「感覚的に」見つけれる事が多かったのも事実です。


そういえば、今現在でも難解なバグを見つけた時には、
「何となくだけど、多分あそこじゃねぇ?」という感じの「直感」が働いてた事がほとんどですね。


自分の場合は、プログラミングに限らずスポーツなどでも、
「何となくイメージしてみて、出来そうなイメージがはっきりと掴めた」
時には、初めてのトライであってもそれなりに出来てしまう事があります。
今では長年の趣味となったスノーボードなども、最初はそんなパターンでした。


ただ、そういう時には「自分の姿がイメージできてるだけで、論理的なことは全くわかってない」事がほとんどです。
なので、「何故にすぐ出来るのか教えて!」と言われても、上手く説明できないんですよ(w


仕事としてのプログラミングにおいても、触ったことの無い言語でのアプリ製作で、
その言語の入門やサンプル、リファレンスをさらっと見て「何となくこんな感じかな?」
というスタイルでコーディングに入ると、結構上手く出来たりするのです。


そういえば、昨年の春に体調崩して休職したのですが、休職直前の打ち合わせで取締役から、
「入社間もない頃に、今までに触ったことが無いはずのJava言語で、何故あんなに早くモノが出来上がるのかと、正直驚いた」
と言われたのを思い出しました。


自分では驚かれるようなことをやったという意識は全く無くて、
「何となく出来そうなイメージがあったので、やってみたら出来ただけ」なんですけどね(; ̄▽ ̄)


こんな感じで昔のことを色々と思い出して見ると、「感覚的に捉えて何かを実行する」時には、すんなりと物事が進んでいましたね。
逆に、仕様書作成などのように「論理を組み立てて実行する」のは、非常に苦手でした(; ̄▽ ̄)
ちなみに、今現在でも仕様書を書くのは物凄く苦手です(orz


そういえば、会社で「新人が使えるようになるのは3年後から」とか
「まず研修で3ヶ月通して、、」なんて前置きがありますよね。


そういう会社では3年とか、3ヶ月通してはじめて
現場の舞台で任せられるってことでしょうけど
これが、「いきなり実践投入!」とかいうOJTを超えた
現場主義の中小企業とかも結構あって、
もちろん丁寧な仕事にはなりえませんが、
圧倒的に後者の成長が速いんですよね。


いきなり現場投入しても右も左も分からなくオタオタする人が多いですが
中には、初めての現場でスッと入って
いきなり活躍しちゃう人とかもいます。
その場合、「君何か似たよな仕事やってたの?」って聞いても全然そんなことはなくて、
「いや、なんとなくできそうに思えたので」っていう
かなりなめた口をきくわけですww


そういう人はひどく仕事の予測イメージが高い。
イメージトレーニングの抜群なスポーツ選手とでも言うのでしょうか。
3ヶ月や3年の下積みがまるで無駄に思えるぐらいです。
(蛇足として、そういう「天才」を論理的思考で矯正して「普通の社員」にしてしまう上司も多々います)

論理的にプログラムしないプログラマー ネットに花を咲かせましょう。 会社作りました。


まさにその通り、私もそう思う。
同じように感じている人がいることがわかってちょっと嬉しい。


論理的にプログラムするのは間違いだと思う。


でも、職業プログラマーでそう思ってる人は、少数派だと思う。


私は、小学生だった頃からプログラムをしていたけど、
職業としてのシステム屋になったのは最近なので、
みんながどうやってプログラムを作っているのか良くわからなかった。


職業としてシステム屋になった時に、
SEについてとか、設計についてとかの本を読んだり、
先輩方のやり方をみて、同じようにやってみようとしたけれど、
システムを作るときに、頭で論理的に考えてから作ろうとすると、
ほとんどの場合、生産性は落ちるし、バグだらけになる。


なんとなく、「こんなのつくりたいなぁ」と心の中で念じて
数日ぼーとしてからおもむろに書き始めるのが一番まともに作れる。
物心ついたときには、既にそうだった。


スポーツとかだったら、どんな三流のプロでも絶対に論理的に考えてから
体を動かすとかして無いと思う。


スポーツでラケットの位置がどうとか、体重の載せ方がどうとか
考えながらやってるのは、それこそはじめてやる入門者ぐらいで
プロじゃなくても、論理的に考えるより感覚で動く事の重要さを理解している。


なんでシステム屋は論理的に考えるべきとかなっちゃうんだろう?


これって考えかたの問題だけなので、やろうと思えば出来ると思うし、
出来ないなら出来るまで訓練すべきだと思う。


そうしたほうが絶対にいい物が出来ると思うんだけど、
世間では論理的に考るのが正しいとされている。


これでは、感覚で作るプログラマーは出てこない。

Cagylogic: 一日に何行のプログラムが書けるか


これは非常に賛成。


500行くらいの他人のコードをデバッグするために、
読みづらいからと、テンポラリにさくさく書き直してたら、100行くらいになっちゃった。
てなことはよくある。


んで、問題個所を見つけて、ピンポイントで元の500行のコードを修正する。
せっかくなので100行のコードもコメントとして添付してあげる。
ここで、100行のコードに置き換えることは、やっていいときと悪いときがあるので注意。
テストなどを考えると、なんでも置き換えていいってもんじゃない。


基本的に僕の書くコードは短い。単純に言えば、僕が覚えられないから。



大学生のときなどは、若くて体力もあって、記憶力も集中力もあったので、
長いコードを一気に書いても全体を記憶していられた。
最近は、覚えられないので、覚えられる範囲のコードしか書かない。
でも、できあがりは、あんまり変わらなかったりする。


新卒の人のコードをレビューしたりすることもあるけども、わざわざこんなに難しく書かなくてもいいのに。
って思うのと同じ。

まず、だいたいこういうソフトウェアがあればいいなあとか、このような機能を付ける必要があるなとかいった、
とても抽象的なことを思い浮かべる。
この際、「絶対に論理的に考えないこと」が必要である。
論理的に少しでも考えてしまうと、途中までうまくいっても、それが壊れてしまい、
最初からやり直しになるので注意する。感覚的な思考でもってこれを行うのである。


次に、だいたいイメージができたところで、
心の中に、ソフトウェアの設計図やデータ構造といったものを思い起こす。
ここで注意するのは、「絶対に論理的に考えて設計をしないこと」である。
徹底して、感覚的な思考でもって設計する。


あぁ、こんな感じ、こんな感じ。
ここでは「感覚的な思考」って言葉を使っているけど、僕がよくいうのは、「匂いがする」って言葉。


この、匂いがするポイントってのが重要で、なんとなくややこしくなりそうな部分だったり、
バグが出やすいだろうなぁって部分だったりになる。


このやり方には僕にとって欠点がある。


ひとつは、この設計図がある程度の規模を持ってしまうと、僕の記憶力では足りなくなる点である。


ある一点のイメージが出来上がると、そのイメージが元となって、そこから先の設計は必然的に決まってくる。
まさに、デザインがデザインを作り上げていく状態。
でも、このような状態になっても、いくつかの地点ではやっぱり、
なんとなくつじつまが合ってないような匂いのするポイントがあって、
そこにふっと意識を集中すると、元イメージがどっかに行ってしまう。
また、つじつまが合ってないポイントが複数個所あると、1箇所考えているうちに、もう1箇所のことを忘れてしまう。


ということで、でっかいホワイトボードなりに、ごりごり書いていくことになるのだが、それでも、やっぱりわけがわからなくなってしまう。

論理的に少しでも考えてしまうと、途中までうまくいっても、それが壊れてしまい、最初からやり直しになるので注意する。

たぶん、ここがポイント。
匂いがする部分ってのは、やっぱり論理的に考えたくなっちゃうところで、
それをやっちゃうと記憶が飛んでしまうので、やり直しになってしまうんだと思う。


本音を言えば、どこかに書いてしまうのではなく、力いっぱい集中して、全部を記憶の中に入れて、
うんうん考えた方が、最終的にはいいスタイルになることが多いんだけど、そこまで体力が続かない。


設計のあとに、あとはなんも考えないで、記憶の内容をそのままコードに落としていくだけの作業となる。
ただ、どこかのメモを見ながらコードを書くことは難しい。
結局覚えきれなかったことは、メモを見て、もう一度頭の中でイメージを作りなおして、コードに落とす。


集中しているときは忘れないので、一気にコードに落ちていくが、記憶力が足りないので、
手を止めて、メモを読んで、あぁそんなこと考えてたわ、って頭の中で再構築せにゃならん。


全部覚えているときは、頭の中でステップ実行ができたりして、便利だぞ。



次の問題は、このやり方で集中して一気にコードを書くと、集中が途切れたときに、みーんな忘れてしまうこと。



あれ?俺こんなコードなんで書いたんだろう?いや確かにつじつまあってるけど、なんで?って頭の中がはてなマークでいっぱいになる。
これを避けるために、設計の内容を自分自身があとから思い出せるようにしておく必要がある。



このことは次の問題にもつながっていて、この設計の内容を未来の自分を含め、他人に伝えるのが非常に難しいこと。



最近は、一人でコードを書くというよりも、複数人でコードを書くことが多いので、頭の中で描いたイメージを他人に伝えなくてはならない。



他人に伝えているくらいなら自分で書いた方が早いんじゃないかと思うくらい、これを他人に伝えるのは面倒である。
とくに、その匂いのするポイントなんてのは、もう、びっくりするくらい人には伝わらない。



人に伝えるときには、全体を一気に説明するわけにはいかないので、順番に説明することになるのだが、
この順番ってのが曲者で、大雑把に説明しても伝わらないし、細かすぎてもわけわからないし。



まぁこの辺がデザインドキュメントを書く腕の見せ所なんだろうけど、まだまだおいらでは難問です。



と、ここまで書いておいてなんだが、プログラマのコードを書く速度も重要だけど、それ以上に、他人のコードを読む速度も重要である。



結局のところ、新規で作ることよりも、既存のコードをどうにかやっつけることが多いわけで、
それも自分の書いたコードはもとより、他人のわけのわからないコードも攻めなければならない場合、
他人のコードを読む速度ってのは、コードを書く速度よりも飯の種になるんじゃないかと思う今日この頃。


まぁコードなんて短ければ短いほどいいわけだし。


怠けるために努力しましょう。


ああ!!
そうか。。
そういえば僕も、基本的にうまくいってないときは「途切れたとき」。
イメージが、論理的思考に変わったときに大きく減速してしまう。


イメージだけで進めるのは簡単で快適なのに、
途中でいろいろひっかかって論理的思考のスイッチが入ってしまう。
こうなるともうだめ。
プログラマでいう月数百行程度の出力に陥る。


例えばデートで好きなライブコンサートいって興奮したときとか
尊敬する人の講演やセミナーや勉強会に出席したときとか、
このときの良い興奮とイメージは2〜3日続く。
仕事もプライベートもすこぶる調子がいい。


それが4日目、いつのまにか論理的思考にはばまれてる。
あれこれ悩んでる。w
「おかしい、イメージ通りにはいかないぞ」って。。
そこで絶対、論理的思考にはまっちゃだめなんだ。
don't thik feel



池谷氏によると夢と現実は本来区別がつかないもの。
夢と現実を区別しないで望むとおりに人生を歩む人はおかしいといえばおかしいのだが、
それがみんなどこでその純粋な心をなくしたかというと
「思い悩んだ瞬間、思い悩む現実を実現させてた」のか。


逆にうまくいったときはほとんど
「根拠のない自信」から発生していた。
絶対なんとかなる。うまくいく。でも根拠はゼロ!
こういうのはわりとすんなり通った。
すんなり通ったのは「思い悩む前に実現した」ことだけど、
もしかして時間のかかる望みだったとしても
「途中で思い悩まなければ」うまくいってたことだったのかもしれない。

プログラマの生産性って - oldriverの日記


僕は会社に入ってから本格的にプログラミングをするようになった職業プログラマだけど、
これは感覚的に理解できる。
職業プログラマの多くも身に覚えがあるんじゃないかな。
半ばトランス状態でコードを書き続けるような経験。
こういう時にはガッツリ高速に大量に高品質のコードを書くことができる。
10,000行も書くのは無理だけど。


「こういう時」には共通点があって、それは深夜か休日に仕事をしてる場合に限られるということ。
普段の仕事時間にこの集中力を発揮することができた試しは無い。
日本のプログラマの標準的な作業環境は、平均的な能力のプログラマに集中することを許さないようです。
(うるさ過ぎ。割り込み仕事多過ぎ。)


あと、出来るだけ自分の裁量で設計からコーディングまで一人で担当してる状態であること。
チーム化して分業すればするほど、文書化だったり言語化だとか、調整だとか、壁がはだかります。


もう一つ条件を挙げるなら、得意な分野のプログラミングであること。
当たり前ですけど。
平均的な日本のプログラマは、個人の適性とかあまり考慮されずに、
とりあえず来た仕事に突っ込んどけばいいだろう、みたいな話で売られたり。
やあねえ、もう。そういうことも稀に無くはないらしいので。


とにかく、僕が言いたいのは、普通のプログラマだって小規模ながら同じことが出来る(条件さえ整えば)、
ということです。
てゆうか、プログラミングに限らないよね、多分。


昨日の記事からここまで。
かなり問題の共通点が多いです。
僕にとっても、自分がどのステップでつまづいていたのか、、、



最後に、トラバ見てたら登さんのmixi記事を見つけました。
1年前の最初の記事とほぼ同時期のエントリーですね。
クローズドSNSの引用はちょっと気が引けますが、
mixi規模の全体公開設定で、「広めて役に立つようにしたいと思っている。」と書いてあるので
ちょっとだけ引用。

[mixi]欲しいものをすべて入手する方法


この世界を構成している仕組みを知っている。


「すべて思いどおりになる」という仕組みである。


これはここに生きている人であれば、誰にでもあてはまることである。


これは当然のことで、誰でも知っていることだと思っていたが、
どうやらそうではないらしいということがわかったので、広めて役に立つようにしたいと思っている。



「すべて思いどおりになる」という仕組みは、すべてのことがらについて当てはまる。


上記のようなことを読むと、大抵の人は、
「すべて思いどおりになるわけがないじゃないか」
というように思うようだ。


「すべて思いどおりになる」から、
「すべて思いどおりになるわけがないじゃないか」と思うことで、
「すべて思いどおりになるわけではない」ということが現実となる。
まったく思いどおりになっているのだ。


き、、既視感が、、、、

ザ・シークレットをやっても願いがかなわない人のための、本当の実践の仕方。 - teruyastarはかく語りき


さきほどのセリフ。
「イメージしてるだけで願いがかなうわけない。
努力という行動に移してこそこのシークレットは価値がある」


書評の人が何度も本を読み返してたら気づいたと思うのですが
本に出てくる一説、ヘンリーフォードに代弁してもらうと


『あなたが「できる」と思おうと「できない」と思おうとそれはどちらも正しい』


そう、「イメージしてるだけで願いがかなうわけない」
そう「願った」のですから、
「願いがかなうわけない」がまさにかなったわけですよ。

しかしここまできたら僕が書いたこのエントリーも、結構修正が必要ですねw
微妙におかしな事書いてるw
(最初からおかしいって?w)



まあいいやmixiです。

ここで重要なのは、欲しいものがあるとき、
本当にそれが欲しいのであれば、欲しいと思ってはならない、ということである。
これは逆説 (パラドックス) である。論理的思考では受け入れることができず、無視される。
言葉でこの本質を理解しようとしてもうまく伝わらないかも知れないが、できる限りのことを書く。


「○○が欲しい」と考えると、それは入手できなくなる。
なぜならば、「考える」ことと「思う」ことは別のことだからである。


考えるとは、脳の中の働きである。
これと比較して、思うとは、心の中の働きである。


ここで、脳 = 心 として考えている場合は、また混乱に陥る。
何かを考えるとき、それは脳で考えている。
思うには、心で思わなければならない。
しかし、心が脳の一部であるという論理的な固定観念によって、
本心で "思う" ことができなくなってしまっていることである。


このようなことは、本来、文章として書くべきことではない。
なぜならば、文章化する作業は脳で行うため、
その時点で、本当に伝えたい意味が大幅に欠落されてしまう
(脳は、自分がすべてを支配していたいと思っているので、心の存在を認めない) ためである。
しかしそれでも若干のニュアンスを伝えることはできるかも知れない。

「○○が欲しい」と脳が考えるとき、心の中ではどのようなことが「思われる」のか。
「現在、私は○○を持っていない。したがって、○○を欲している。」ということが思われるのである。


心で思っていることが現実となるので、「現在、私は○○を持っていない。」が直ちに現実化し、
結局、それを入手することはできない。
考え方を変えない限り永遠に入手不可能である。


ところが、「○○が欲しい」という考えを忘れていてしばらくすると、それがもらえたりすることがある。
それは、考えを忘れることによって、心の中で「現在、私は○○を持っていない。」という部分が消滅したためである。

このように解説すると、「結局、欲しいものが絶対手に入る方法を教えてほしい」
というように言う人がいるかも知れない。
そのようなことを言う時点で、欲しがるということを考えているので、
その逆の現実が発生し、いつまでたっても手に入れることができない。


このようにこの世界はパラドックスの世界であり、とても面白い。

昨今のマッチョ・ウィンプ問題みたいだなあw


んで、「気づき」は終わってても、疑念のままの方法論。

一応、以下に、誰でも知りたいと思う「欲しいものが絶対手に入る方法」というのを書くことにしようと思う。


欲しいものを絶対手に入る確実な、その「欲しい」という欲を完全に放棄することである。
すると、以前はいかなる努力をしても困難であったそれを、何の努力も無しに手に入れることができる。


ただそれだけのこれほどまでに単純な仕組みにもかかわらず、「欲しい」と思ってしまうから、手に入れられなくなる。


さらに、得た後、「失いたくない」という欲も放棄しなければならない。
「失いたくない」と強く思ったらそれが最後で、しばらくすればそれは本当に失われてしまう。
逆に、「失いたくない」などと思わない限り、それを失うことはない。
「失いたくない」という欲は、「失う可能性がある」という思いを創造し、それが現実となる。


このように、すべてのできごとは、一見逆のように動くように見えるが、
それは「思っていることが実現する」という、この世界を表現する、最も単純な、論理的であり、
同時に非論理的な仕組みから派生した現象だからである。


このようなことがあるのが、この世界の面白いところである。



ここで論理的に考える派の人からは、以下のような疑問が出るかも知れない。


「○○が欲しいという欲を放棄すると、○○が欲しいということ自体を忘れてしまうということになる。
だから、実は将来○○が手に入らなくても、それに気付くことができなくなるということで、
確かに○○が手に入らないということが無くなるが、結局○○が手に入ったことにはならないので、
騙されているのではないか。」


そのような懐疑的な思いを持っている時点ですでにその思いの内容が現実化している訳であるが、
それは置いておこう。
こういう疑問が出るのであれば、現時点で欲しいもののリストを文書に書き出し、
適当な書式にして、公証人のところへ持っていって公正証書か何かにしてもらえばいい。
そして、しばらくたったあとで、本当に「○○が欲しい」という欲望を放棄していれば、
それが入手できるので、その以前書いた欲しいものリストを見て、確かにすべて入手することができたということに気付き、
驚くのが良い。


このようなとても単純なことを「知る」だけですべて思い通りになる。


次の日の日記も面白いけど略。


さて。
んで結局シークレットに着地したわけ。
これは確かに文章で伝わるもんでもないから、
共感する人は最初から共感してるし、
そうじゃない人にはまるで意味がない。


んで、これを「広めよう」というなら「広めよう」という意識すら破棄せねばならぬし、
これを実践しよう、実現しようというならその意識すら破棄せねばならない。


なんというパラドックス
頭を使わないでこれを体得しえるすべはないのか?
映画マトリックスではないが、これは気づかないし、気づけない。
実現してることがわからないのだから。
公文書保管やる?w



ちょっとまて、意味が分からなくなってきたw
エントリーした上で自分で読み返してみるw
いや、それを読むほど論理的思考になるのか?


無限ループ突入(゚∀゚)


まと、、まらないw

最大の問題点は、


せっかく上記のようなことを読んでも、大抵、まずは頭の中にある論理的思考が、
「上に書いてあるようなことは論理的に有り得ない」というように論理的に考えてしまい、
いつまでも論理的に考えてしまうことがあるということである。


論理的に考えないほうがうまく行くと聞いても、それが正しいかどうかやってみずに、
論理的な正誤判断をしようとして、
「論理的に考えた結果、まさかこんなことはないだろう」という論理的な考えに従い、
いつまで経ってもやってみないということがある。それはとてももったいないことである。

これか。
結局僕は論理的部分で理解しつつも、
論理的であるがゆえ、完全に信じきれてなかった。


そして、こうやってブログに書くことが論理的なので
やはり信じきっていないのだ。


自分を信じきれてない?
そりゃ物理的肉体だもの。
物理的論理的に考えたら不可能だよねえ。


他人を信じればいい?
他人も同じ事か。


ああ。
だから形のない「宗教」ってのが偉大なのかもしれない。
あれは未知の力を信じきる良い洗脳だw


信仰はとくにないので、
天に任すとか、宇宙に任すとかもうそんな感じかなあ。
誰かの期待に応えようってのも違うのかもしれないし。



ああ。わかったわかったw
つまり、

まず、だいたいこういうソフトウェアがあればいいなあとか、
このような機能を付ける必要があるなとかいった、とても抽象的なことを思い浮かべる。


この際、「絶対に論理的に考えないこと」が必要である。
論理的に少しでも考えてしまうと、途中までうまくいっても、
それが壊れてしまい、最初からやり直しになるので注意する。
感覚的な思考でもってこれを行うのである。


次に、だいたいイメージができたところで、
心の中に、ソフトウェアの設計図やデータ構造といったものを思い起こす。
ここで注意するのは、「絶対に論理的に考えて設計をしないこと」である。
徹底して、感覚的な思考でもって設計する

これだけやればいいんでしょ。
絶対論理で考えないで。

ここまではすべて頭の中で処理することができるので、別にコンピュータがなくても良い。
電車の中でも授業中でも運転中でも行うことができ、便利である。


上記までで、ほぼすべての作業は完了している。
残された仕事として、最後に、コンピュータに対して、プログラミングを行う必要がある。
これには物理的なコンピュータとキーボードが、どうしても必要である
(紙にペンで書くと手が疲れるし、
キーボードを打たなくてもコンピュータに入力することができる便利で高品質なデバイスはまだないためである)。


プログラミングの目的は、コンピュータに処理を実行してもらうことなので、
コンピュータにプログラムを入力しないと意味が無い。そこで、仕方無くコンピュータの前に座る。


コンピュータの前に座って、キーボードの上に両手を置けば、後はあまり考える必要はない。
自動的に手がキーボードを打ち、プログラムを入力して完成させてくれる。
この処理は一切、論理的思考では行われていないので、
途中で論理的思考を行うことは厳禁である (作業の邪魔になる)。ひたすら何も考えない。


入力エラー無く手を動かせる速度には、物理的な限界があるようだ。
多くても 1 日 1 万行程度くらいである (それでも、入力エラーは頻繁に発生する)。
この作業は、エネルギーが必要なので、食事をちゃんと採ることや、
好きな飲み物 (100 % オレンジジュースが良い) 等を机の上に用意しておくことが推奨される。


ほんっっっっっとに、最初から最後まで徹底的に論理的思考を排除したらいいんでしょw

論理的思考は完全にゼロということにはできないけれども、可能な限りゼロに近づける、これがコツです


らじゃ(゚∀゚)



でさ。
もちょっと簡単にシンボルイメージが必要だと思うんだ。
僕には完全に信じきる、神も、自分も、他人も、宇宙もないのだから、
そのシンボルを演じる。


例えば、自分が魔法使いになったように。
ハリーポッター」でも、自分が好きなもの凄い漫画キャラクターにでもなったつもりで
人生の「ごっこ遊び」をはじめる。


魔法使いや、超能力者や、未来人なら、なんでもできるでしょ?


魔法使いはプログラムで言うポインタをのっけるように、
なんでも能力を引き寄せる。
どんな魔法ででも実現させてしまう。



自分自信のイメージでは不可能だけど、
「ごっこ遊び」であれば無理なく論理的思考の破棄ができる。
またそれを忘れるのに「ごっこ遊び」が最適かもしれない。
もちろん、電車の中で杖を振ったりはしないけどね( ゚∀゚)o彡゜♪ ♪_彡☆



どんなウィザードがいいかなあ。。

おまけ


オタクに非モテが多いのは、オタクに「論理派」が多いからかもしれない。
頭でっかちでそれゆえ恐怖を覚えて固まってしまうよりは、
実行に移すバカが、おいしいってか。



プログラミングのスピードを上げる方法 - teruyastarはかく語りき


プログラミングのスピードを上げる方法2 - teruyastarはかく語りき


Doingリストの拡張版、「Movingリスト」の紹介 - teruyastarはかく語りき


大事な話があるんだ - teruyastarはかく語りき

ニコニコ動画が英語版ださないっていうのは?

ひろゆき氏、新ニコ動は「あさっての方向に進化」 (2/2) - ITmedia News

 「あさっての方向」とは「みんなが想像していない方向」。
これまでの例で言えば、今回の記者発表会にユーザー500人を招くとなど、
動画サービスなのにリアルの場で活動したり、
「中国語版は出しても英語版は出さない」といった、
他ネットサービスではありえない選択などがそれに当たるという。


アジアと文化違うから?
シリコンバレーと正面からやりあうつもりないから?
孫正義と同じく、アジアでの地位を先に確保したいから?
もう普及始めてる英語版のニコニコっぽいのがあるとか?


確かにあり得ない選択のような気もするけど、
最後らへんのが有力かな?


ちょっと気になった。
教えてエロい人w

願いを叶えるために、もやもやとした願いをブログにぶつけるとか


プログラミングのスピードを上げる方法3 - teruyastarはかく語りき



ここで引用した

まず、だいたいこういうソフトウェアがあればいいなあとか、
このような機能を付ける必要があるなとかいった、とても抽象的なことを思い浮かべる。


この際、「絶対に論理的に考えないこと」が必要である。
論理的に少しでも考えてしまうと、途中までうまくいっても、
それが壊れてしまい、最初からやり直しになるので注意する。
感覚的な思考でもってこれを行うのである。


次に、だいたいイメージができたところで、
心の中に、ソフトウェアの設計図やデータ構造といったものを思い起こす。
ここで注意するのは、「絶対に論理的に考えて設計をしないこと」である。
徹底して、感覚的な思考でもって設計する

これと。


「○○が欲しい」と脳が考えるとき、心の中ではどのようなことが「思われる」のか。
「現在、私は○○を持っていない。したがって、○○を欲している。」ということが思われるのである。


心で思っていることが現実となるので、「現在、私は○○を持っていない。」が直ちに現実化し、
結局、それを入手することはできない。
考え方を変えない限り永遠に入手不可能である。


ところが、「○○が欲しい」という考えを忘れていてしばらくすると、それがもらえたりすることがある。
それは、考えを忘れることによって、心の中で「現在、私は○○を持っていない。」という部分が消滅したためである。

これを併せてですね。


1「まずブログにもやもやとしたなんとなく願いをぶつける」


2「願いをぶつけるとき、欲しいとか手に入れるとかじゃなく、なんとなくそうなるみたいな」


3「それも、直接的な願いを言うのではなく抽象的な、物語の伏線みたいな書き方をする」
  これは、読んでる人には直接的な願いはわかならいぐらいに。


4「それをいつの間にか、忘れる。書いたら忘れていい」


5「忘れた頃に実現する」


願いにこだわるのではなく、
願いを手放すためのブログ。
直接見えない形で、種を植えるかのような記事。
後は勝手に育っていく。


そういうのも、ありなのかなとか思いました。