2012年04月16日

よいコーディングとはなにか?

私が駆け出しプログラマーだったころからずっと疑問だったことがある。
それは「よいコーディングとはどういうコーディングなのか?」というものだ。

読みやすく、理解しやすいコーディング
必要なことしか書いてないコーディング
メンテナンスしやすいコーディング
データ中心に設計されているコーディング

いろいろな表現があるが、どれもどんぴしゃという感じがしなかった。
それが何十年もたった今になってようやく1つの答えを見つけた。

そのきっかけは、会社の若手社員の何気ない質問だった。
「アーキテクチャーって日本語ではなんというんですか?」

「構造よ。」と答えたあとで違和感が残った。建築物のつくりも「構造」というが、
システムの「構造」とは微妙に違う気がする。同じ「構造」なのに、どこが違うのだろう?

私のイメージでは、建築物の構造は「静的」、システムの構造は「動的」な感じがする。
なぜシステムは動的な感じがするのか?
それは、システムには動いているもの、流れるものが存在しているからだ。
してみると、自然界のシステム、交通システム、発電システム、
経営システム、どれもその中に流れているものがある。
何かの流れを制御して、目的を果たすのがシステムなのだ。

そういえば、システムにもよいシステムと悪いシステムがある。
悪い交通システムは頻繁に交通渋滞が発生する。
よい交通システムは、交通量が変動しても交通渋滞が発生しない。
つまり、流れが変動しても流れが滞ることなく、スムーズに流れるシステムが
よいシステムなのに違いない。

よりよいコーディングとは、よりよいシステムを作れるコーディングだ。

それはコーディングを流れるもの、つまりデータの流れ方がよく見え、
流れの変動・変化への対応が容易で、流れをスムーズに制御できるようになっている
コーディングなのだ。

こうして駆け出しプログラマの疑問は二十数年の時を経てようやく解決したのだった。
posted by koppe at 00:40| Comment(0) | その他 | このブログの読者になる | 更新情報をチェックする

2008年07月10日

「そもそも」の勧め

皆さんは普段「そもそも」という言葉を使っていますか?

「そもそも」は辞書には以下のように説明されています。
--------------------
そもそも 1 【▽抑/▽抑▽抑】


〔「そも」を重ねた語。古くは漢文訓読に多く用いられた〕
(1) (名)
(物事の)最初。起こり。どだい。副詞的にも用いる。
「―は僕が始めたものだ」「―の始まり」
(2) (接続)
改めて説き起こすとき、文頭に用いる語。いったい。だいたい。
「―、事前調査の不備がこのような事態を招いた」「―私の今日あるは彼のおかげだ」
(三省堂提供「大辞林 第二版」より)
--------------------
つまり、「そもそも」は、時間における起点が何かを表現するときの言葉なのです。
起点には、過去の起点と未来の起点の2つがあります。
過去の起点とは、「真の原因」、未来の起点とは、「真の目的」です。


話はかわりますが、昔、アメリカに行ったときのことです。初めて行った時には、見るもの聞くものすべてが日本と違っていて、毎日へとへとに疲れてしまいました。でも2度目に行った時には、もう以前行ったときと同じところは気にしないようになっていて、ずいぶん楽になっていました。皆さんも新しい職場に変わったり、新しい場所に引っ越したりしたときに似たような経験をしているのではないかと思います。
変化しないものを情報処理の対象からはずす、というのは、日ごろの情報処理を効率化するための人間の本能でありすばらしい能力なのです。
だから、変化しないものが見えなくなるのは人間としてごく自然なことなのです。


「現在」に比べると、過去の起点である「真の原因」も未来の起点である「真の目的」も遠く離れていてほとんど変化しません。
だから、自然にまかせると「真の原因」も「真の目的」も人間の本能によって見えなくなってしまうのです。

本能にさからうには、流れ落ちる水をくみ上げるように、意識して行動することが必要です。
では、どのように行動すればいいのか?
簡単です。普段の会話で「そもそも」を使うようにするだけです。
「そもそもこうなった原因はなに?」「そもそもこれは何のためにやってるの?」というように。

「そもそも」は、頭の中の世界で、足元ばかりを見て歩いているとき、顔を上げて遠くを見るための言葉です。
進んでいる方向があっているのかどうかは時々顔を上げないとわかりませんよね。
会話の中の「そもそも」を意識して増やしてみてください。
きっと何かが変わるはずです。
いったい何がどのようにかわるのか?は、あなた自身で確かめてみてください。

posted by koppe at 23:56| Comment(0) | TrackBack(0) | 91.貴方へのメッセージ | このブログの読者になる | 更新情報をチェックする

2008年04月27日

思考の訓練

 このブログでは、「思考する」ということをいろいろ議論してきた。
 ところで、人はいつどうやって思考することを覚えるのか?
 生まれたばかりの赤ちゃんが思考できるわけではない。ということは、本能の助けがあるにせよ、なんらかの訓練によって思考できるようになるのだろう。その訓練とはなんなのか?
 猫だって生まれたときから狩ができるわけではない。では猫はどうやって狩ができるようになるのだろう?

 お正月に実家に帰省したとき、しゃべることを覚えたばかりの甥っ子が、いろんなものを指差しては、大人が返す単語をまねしてしゃべるのをうれしそうに延々と繰り返していた。言葉をしゃべる、聞く、まねしてしゃべる、これがただ単純に楽しいからやっている。
 猫の場合は動くものにじゃれるのが大好きだ。じゃれるのが嫌いな子猫はいないから、じゃれると快感を感じるということが本能に組み込まれているんだろう。本能のままに楽しいからじゃれる、を繰り返すうちに、狩の基礎訓練が出来ていく。
 人間の場合も同じように、言葉をしゃべる、聞くことに快感を感じるということがきっと本能に組み込まれているのに違いない。そして、言葉をしゃべる、聞くを繰り返すうちに、言葉で物事を定義して、理解し、考えて、伝えるという、人間固有の思考の基礎訓練ができていく。

 思考は、やはり「言葉」で訓練するものなのだ。
posted by koppe at 00:19| Comment(0) | TrackBack(0) | 90.最近の出来事から | このブログの読者になる | 更新情報をチェックする

2008年04月12日

「見る」と「観る」

 先日、知人と会話しているときに、「若い子に病気の動物の状況をチェックさせていたのに、変化の予兆を見逃してしまって、危うく事故になるところだった。ちゃんと見ててといってるのにどうして気づかないんだろう?」という話がでた。見ているのに見ていない、これはどういうことなのか。予兆を見つけられるような見方を指導するにはどうしたらいいのだろうか?

 たとえば、ここに一見すると同じ2枚のイラストが並べてあるとする。この2枚を見比べるときの違いを考えてみよう。

(1)2枚のイラストがただ並べてあるだけの場合
 この2枚をただ見ると、「同じイラスト」だと思い、それ以上詳しく見ようとは思わない。

(2)2枚のイラストの上に「間違い探し」と書いてある場合
 この2枚のイラストのどこかに違いがあると思って、2枚のイラストを部分ごとに見比べていく。それによってたとえば違いが5つ見つかったとして、それ以上みつからなければあきらめて、さらに探そうとはしない。

(3)2枚のイラストの上に「7つの間違い探し」と書いてある場合
 目標がはっきりしているので、さらに詳細な部分を比較しながら7つ見つかるまで根気よく探していく。
 また、イラストがピースに別れていて、各ピースに1つ以上間違いがないと分かっている場合や、イラストの間違いがある範囲が絞り込まれている場合は、さらに効率よく間違いを見つけられる。

 (1)は違いを見つけようと思ってみていない。漠然と全体をみているのでこれを「見る」と定義しよう。
(2)や(3)は、違いを見つける目的で、部分に分けて比較をしている。観察や観測に通じる見方なのでこれを「観る」と定義しよう。

 辞書の定義によれば、「見る」と「観る」はそれぞれ以下の意味に該当する。
「見る」→視覚によって、物の形・色・様子などを知覚する。
「観る」→判断を下すために、物事の状態などを調べる。
(三省堂提供「大辞林 第二版」)

 つまり、違いを見つけるには、「見る」のではなく「観る」ことが必要であり、「観る」には必ず何かと見比べる必要がある。
 
 では何と見比べるのか?

 変化の予兆を見つけるには、過去のある時点の状態と今の状態とを見比べなければならない。そのためには、今見ているときに、未来に比較することを前提に、見ているものを分解して状態を観察しておかなければならない。
 経験を積んでいれば、変化がどこに現れるか予想がつくので、その部分に着目して観察しておくことができる。しかし、経験がない場合はそれができない。
 従って、経験のない人を指導する場合は、予想される変化を具体的に示して、どこに着目して観察すればよいかを与える必要があるのである。

 これによって(1)の状態から(2)の状態にすることは可能と思われる。

 では、(2)の状態から(3)の状態にするにはどのように指導すればよいのだろうか。

 (3)の状態にするには、違いが見つかるまであきらめずに根気よくがんばる動機を与える必要がある。
 間違い探しの例のように「7つ」というような具体的な数値目標が与えられるならそれが一番だが、それが難しいときはどんな方法が考えられるだろうか?
 ひとつは、具体的な目標のかわりになる目安となる情報を与えるという方法が考えられる。患者の観察の例でいえば、こういう状態になった場合は、それからどのくらい時間で変化がでるはず、というような情報を与える。
 もうひとつは、違いを見つけた、または見逃した場合の影響度を伝えることが考えられる。間違い探しの例で言えば、全部見つけたら100万円もらえる!となったら、全部でいくつあるかは知らなくても一生懸命探す、というのと同じ理屈である。患者の観察の例でいえば、たとえば、最初の変化が観察されてから数時間以内に処置しないと命に関わる、というような情報をあたえる。

 経験者は自らの経験に基づいて自ら観察の目標や動機を作り出すことができる。
 しかし、経験がない人にはそれが出来ないので、目標や動機も指導者が与えてあげる必要があるのである。
posted by koppe at 12:38| Comment(0) | TrackBack(0) | 90.最近の出来事から | このブログの読者になる | 更新情報をチェックする

2008年03月22日

記事を書けなくなったわけ

 そもそも、このブログを書き始めた動機は、自分の所属している組織の知的生産性を上げたいというものだった。
しかし「知的生産性」を掘り下げていけばいくほど、個人の子供のころの育ち方や人生に対するスタンスにまでさかのぼってしまい、後から訓練で何とかなるような代物ではないという思いが強くなった。
なんども育成に挑戦してみたが、育成できない原因ばかりが明らかになり、育成なんか無理なのではないかと途方にくれてしまったとたんに、記事が書けなくなってしまった。

 1年前、新しい仕事で新しいメンバとチームを組むことになった。新メンバのリーダは、今までで明らかになっていた育成できない原因は持っていないように見えた。だから、彼を育成できなかったら、もう私に育成できる人はいない。そのときは今後育成をきっぱりあきらめようと覚悟した。
 そうして一緒に仕事をし始めて3ヶ月、なかなか変化は見られなかった。
 やっぱりだめなのか、もうあきらめようかと思った矢先に、彼は突然芽をふいた。自分に今出来ないことは出来ないと素直に認めて、それでもいくべき場所に向かって自分にできることは全力でやり、できないことはなりふりかまわず助力を求めるようになったのだ。それからは、まるで若芽のようにぐんぐんと成長し始めた。おかげでまた私は育成をあきらめるわけにはいかなくなったわけだが。

 彼はいま、自分の部下達の育成に真剣に悩んで取り組んでいる。
 彼が次々と衝突する課題を一緒に議論しているうちに、育成対象者が今いるレベルにあった訓練方法があるのではないかという気がしてきた。
 たとえば、エアロビクスの初心者は、模範演技をどれほど真剣に見て真似しようとしても、いきなり複雑な振り付けを覚えて音楽にあわせて踊るなど絶対に無理である。しかし、初級クラスでごく簡単なラジオ体操のような振り付けを音楽にあわせて踊るところから始めて、それができるようになったら、中級クラス、上級クラスと順次ステップアップしていくことで、ある程度までは難しい振り付けが踊れるようになる。
 思考法もこれと同じようにレベルに合わせた訓練によりステップアップが可能なのではないだろうか?そのための具体的な方法を見つけることは簡単ではないけれど、可能なのではないだろうか?と思えるようになってきたのである。

 貴重な仲間が増えたことだし、彼と共に、もう一度、知的生産性向上にチャレンジしてみるかと思っている今日この頃である。
posted by koppe at 13:24| Comment(0) | TrackBack(0) | 90.最近の出来事から | このブログの読者になる | 更新情報をチェックする

2007年04月21日

言葉の定義

 先日、客先で資料をレビューしているとき、自分がやたらと言葉を区別したり定義したりするための発言をしていることに気がつきました。たとえば、「このポリシー設定には、みんなで使う物を設定する場合と、特定の人が一時的に使うものを設定する場合とが含まれていますね。前者を共用ポリシー設定と呼ぶことにしませんか?」とか、「マイポリシー設定という言葉は、パッケージで使われている言葉ですが、要求される機能と一致しているかどうか現時点では分からないので、要求される機能のほうは別の言葉にしませんか?」というように。
 そういえば、SIの仕事を始めたころ、一緒に仕事をしていたmokurenさんが常にそういう発言をしているのを見て、うるさいと感じるほどやけに厳密に言葉を使うなということと、この言葉が今あいまいだというのがなぜ即座に分かるんだろう、と思っていたことを思い出しました。

 開発の仕事をしているときは、長年同じ人たちと同じような仕事をしていたので、都度都度言葉を厳密に定義しなくても、各自が勝手にそこで使われている言葉の意味を調整・学習することで会話が成り立っていました。
 しかし、短期間で新しいお客様と開発するシステムを検討・合意してシステムを構築するSIの仕事の場合、言葉があいまいなままお客様と合意したと思っていても、それは合意したことにはなりません。私は、SIの仕事でお客様とのコミュニケーションを繰り返すうちに、いつの間にか、言葉があいまいだということが判断できるようになっていたのです。

 では、私はどうやって言葉があいまいだということを判断しているのでしょうか?実際には、あいまいな言葉に遭遇すると、判断しているというよりも「気持ち悪い」と感じて反応しているようです。以前は言葉があいまいでも「気持ち悪い」と感じられなかったのに、なぜ今は「気持ち悪い」と感じるのでしょう?
 そのときに私の頭の中でやっていることをイメージしてみると、たとえば、電球を換える時の踏み台に椅子を使おうとしてその椅子に乗っても大丈夫かを確認しようとするとき、椅子をゆすってみてぐらぐらしないかどうかを確認しますね? それと同じようなこと、つまり「言葉をゆする」ようなことをしているようです。
 では、言葉をゆする、とは具体的にどういうことをして何を確認しているのでしょう?
 これは、ちょっと簡単には言葉にできそうにないので、先にmokurenさんに聞いちゃうことにします。
 ということで、mokurenさんの場合は、どうやって言葉の定義があいまいかどうかを判断していますか?
posted by koppe at 12:42| Comment(0) | TrackBack(0) | 90.最近の出来事から | このブログの読者になる | 更新情報をチェックする

2007年03月25日

「0からはじめる要求定義・要件定義」はじめました

 「0からはじめる要求定義・要件定義」というブログサイトを立ち上げました。
 いままで、知的生産性ということで徒然なるお話をここでさせていただいたのですが、本職のITに今までの議論を当てはめて見るとどうなるのか一度試してみたくなりました。
 今までの議論のエッセンスも入ってくるでしょうし、はたまた、まったく違う方向へ行ってしまうのかもしれません。
 ご興味のある方は一度覗いてみてください。
posted by mokuren at 21:53| Comment(0) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする

2007年02月25日

整理・整頓と創発

 お久しぶりです、koppeさん。昨年の10月以来ですね。そろそろ、このブログに復帰したいと思います。

 前回のKoppeさんの投げかけ、確かにそうですよね。
 いくら個人の頭の中の知的生産性を上げても、頭の中に入ってくる情報が不確かであれば、それを処理するための事前作業としての整理・整頓が余分にかかりますね。外界から受け取った情報が頭の中で整理・整頓できればまだしも、それができないとなれば、その外界の情報を持ってきた人に、なぜ自分は整理・整頓できないかを伝えなければなりません。
 で、その整理・整頓できないという情報を相手は受け取り、今度は逆の立場に立って、その整理・整頓できないという情報を整理・整頓しなければならなくなります。
 まるで、合わせ鏡ですね。
ちなみに、私は、この、情報を整理・整頓するところが巷で言われているロジカルシンキングのことだと思っています。そして本来の思考は、その整理・整頓されたものにたいして、新たな分類の切り口(分類軸)を見出したりする創発のようなものではないのかと思っています。
 
その意味で、
・既知の切り口(分類軸)で情報を体系化することは情報の整理・整頓。
・ある情報を体系化しようとして未知の切り口(分類軸)を見つけることは創発。
 と、捉えてみるのはいかがでしょうか?

 こう定義すると見えてくるものがあります。
 ある情報にたいして、すでに体系化するための切り口(分類軸)を持っている人にとっては整理・整頓に過ぎないことが、体系化するための切り口(分類軸)を持っていない人にとっては、それが創発という未知への思考になってしまうことです。

 このあたり、突き詰めてみるのも面白いかも知れませんね。
posted by mokuren at 22:37| Comment(0) | TrackBack(0) | 12.コミュニケーション | このブログの読者になる | 更新情報をチェックする

2007年02月12日

知的生産性とコミュニケーション

 皆さんは、一生懸命資料をつくったのに、作った資料が相手の意図に合わずまるっきりムダになってしまったり、何とか〆切に間に合わせるために急いで資料を作ったのに資料がちゃんと届かなくて結局間に合わなかったというような経験はないでしょうか?
 資料を作ることが知的生産作業だとすれば、知的生産作業自体は成果を挙げているはずなのに、実際は求められる成果に結びつかないということは、日常でしばしば発生します。

 料理の例で考えて見ましょう。
 ここにおいしい料理を手早く作れる料理人がいるとします。この人は作るべき料理を求められる時間内に作ることができるのでコンスタントに高い生産性で仕事ができます。しかし、お客の注文を聞いたウェイターが間違った注文を料理人に伝えてしまった場合、お客の元には期待する料理は届かず、料理人が作った料理はムダになります。あるいは「急いで作って」というお客の注文に対して、この料理人は非常に短時間で料理を作ったとします。しかし、その料理をお客の元に届けるべきウェイターがなんらかの理由で料理を運ぶのが遅くなってしまった場合、料理人が短時間で料理を作ったことはお客に評価されません。
 つまり、この場合の生産性は、料理を注文した人によってその人が注文してから注文した料理が届いたところで評価されています。料理を作る部分だけでなく、注文を聞いて伝える部分、できた料理を届ける部分も含めて生産性が評価されるのです。

 知的生産作業においても、外部からのインプットがあって、思考や資料作成などの知的生産作業があって、外部へのアウトプットがありますね。
 知的生産作業にとってのインプットやアウトプットとは、主として会話や資料による外部との情報交換、すなわちコミュニケーションです。
 この外部とのコミュニケーションがうまくいかないと、いくら知的生産作業の生産性が高くても、外部からみたときの知的生産性は低くなってしまうのです。

 知的生産性を議論するなら、知的生産作業の前後にある外部とのコミュニケーションの質も議論する必要があると思いますが、mokurenさんどう思いますか?
posted by koppe at 01:32| Comment(0) | TrackBack(0) | 12.コミュニケーション | このブログの読者になる | 更新情報をチェックする

2007年01月27日

根拠を作れない人たち(後編)

 前回の記事で、顧客に納得してもらえる資料をつくるには、点情報の事実をMECEになるようにパターン分類して全体を網羅した上で、そのパターンを根拠としてパターンそれぞれについて対策を考えて提案することが必要だと書いた。

 さて、以前、「2006年09月17日 わからないことを聞かない人たち」の記事で登場した人たちは、これがうまくできなくて、顧客に納得してもらえる資料を作ることができなかった。興味深いことに、うまくできない理由がまた、3人3様なのである。

 Aさんは、パターン分類そのものができない。抽象化そのものが難しいようで、どうしても点情報の事実に対しての対応策しか作れないのである。

 Cさんは、一応パターン分類をしようとする。しかし、いま見えているすべての点情報がパターンにおさまった時点で、考えることをやめてしまう。つまり、パターン自体がMECEになっているかどうかの検証を行わないのである。そのため、パターン分類自体にモレがあることに気づかない。

 Bさんは、パターンが出てくれば、パターンがMECEになっているかどうかを論理的に検証できる。しかし、経験が浅く、パターンのストックが少ないために、その場その場に応じた適切なパターン分類を見つけ出せない。

 このことから、事実から根拠を作り出すには3つの能力が必要だということがわかる。

 1.事実を抽象化してパターン化する能力
 2.パターンがMECEになっているかどうかを論理的に検証する能力
 3.パターンの分類軸のストック

 では、この能力を鍛えるにはどうしたらいいのだろう?

 数学の問題を解く例に当てはめて考えると、この能力のレベルには大きく2つのレベルがあると思う。
1つ目は、いくつかの公式を覚えて、問題を解くのに適当な公式を当てはめて問題を解くレベル。
2つ目は、問題から新たな公式自体を見つけ出して問題を解くレベルである。
とすると、2つ目のレベルは難しいとしても、1つ目のレベルは訓練次第で何とかなりそうだ。

 事実から根拠を作り出すときの公式にあたるものは、たとえば「5W1H」や「人・物・金・情報」や「マーケティングの4P」、「2006年05月27日芋づる式分解」の記事で書いた「処理に関わる4つの外部要素」や「データを操作する4つの処理」といったよく使われるMECE分類の軸である。これらの公式を知っていて、いずれかの公式を当てはめることができれば、ある範囲の問題は解くことができるようになるはずだ。

 したがって、あなたがもし、部下の「事実から根拠をつくる」能力を鍛えたいと考えているなら、あなたが普段使っているパターン分類を公式化して、そのパターン分類の公式の使い方を実践で指導して訓練するとよいだろうし、自分自身のその能力を鍛えたいと考えているなら、身の回りにある報告書や仕様書などさまざまなアウトプットに使われているパターン分類の公式を盗み出して、それを使ってみることで使い方を訓練するとよいのではないだろうか?

 (もし実践した方がいらっしゃるなら、是非結果を教えてください。成功、失敗、課題、疑問、なんでも結構です。実験データの収集にご協力御願いします。)
posted by koppe at 11:36| Comment(0) | TrackBack(0) | 90.最近の出来事から | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。