プログラミングの心理学 − 読了

cuzic です。

大昔に買っていた本であるプログラミングの心理学 を読み終えました。

プログラミングの心理学―または、ハイテクノロジーの人間学 25周年記念版

プログラミングの心理学―または、ハイテクノロジーの人間学 25周年記念版

昔にも読み終えた本なんだけど最近また読みたいな、思って読み返したのです。

印象に残った文章を箇条書きで引用します。

  • プログラムが動かないなら、実行効率とか適応力とか開発費用とかいった尺度はなんの意味も持たない
  • フィッシャーの基本定理「システムは特定の環境によく適応していればいるほど、新しい環境には適応しにくくなる」
  • いまなお多くの管理職はすべてを求めたがり、最良の製品を得るために懸命なトレードオフを見出すことの重要性を理解していない。だが、それはすべてのバッターにはホームランを打てと命じ、すべてのピッチャーにはすべてのバッターを三振にとれと命じれば、ニューヨーク・ヤンキーズの監督が務まる、と思うも同然である。
  • 彼らのあまりに多くがいまだに「悪者発見方式」にこだわっている。それは間違いなく人々を真の原因を隠すように仕向ける。
  • ホーソン効果を利用するときわめて大きな実際的価値がある、ということを知った。(中略)私は管理の心理学に関する1つの基本原理を発見した。それは「人々に注意を向ける管理者はよい結果を得る」ということだった。
  • たたき上げのプログラミング管理者はとかく組織図を過度に信頼し、自分たちが現場にいたときに実にうまく活用していたより非公式な機構を軽視したがるようだ。
  • 非公式的機構は必ず存在する。それを理解せずに物事を変更するのは危険だ。(中略)しばしばそういうことは物理的な配置を換えることにより起こる。
  • 「所有指向」のプログラミングの真の問題点は、別のところから生じる。(中略)自分のプログラムを自分のエゴの延長部だと本気で思っているプログラマは、そのプログラムに含まれる誤りを全部見つけてやろうと頑張ることなどしないであろう。(中略)無視しようのない完全な失敗でなかった場合には、認知的不協和の解消はもっと容易である。誤りがそこにあることを見落としさえすればよい。
  • 自分は自分のプログラムを調べる能力がない、ということに気づいた最初のプログラマは、おそらくジョン・フォン・ノイマンその人である。彼の知人たちが伝えるところによれば、彼は絶えず自分がいかに下手くそなプログラマかを力説し、しょっちゅう人にプログラムを押し付けては、進んで間違いや下手なところを見つけてくれ、と頼んでいたという。
  • エゴレス方式の利点は誤りの検出だけではない、ということである。(中略)プログラムが仕様に合う(中略)所用期間の変動が小さくなる(中略)仕事がどの程度進んでいるかについての現実的な評価が得やすくなる。(中略)プログラムの適応力も高まる。(中略)プログラムを読む側の人にとっても有益だ
  • もし彼が誰かのところに助言を求めにいって、なんて馬鹿なミスをやっているのだ、などと嘲られたとすれば、彼は次回には助言を求めようとはしなくなる可能性が高い。だがもし誰かが彼のところにやってきて、プログラムを見てくれないかと頼んだとすれば、彼はそれを自分の能力に対する経緯と受け取って誇りをくすぐられ、自分の方から助言を求めるときにもあまり脅威を感じないようになるだろう。
  • グループまとめての移籍は稀なことではない。経営者たちはそこにある種の陰謀を疑いたがるものだが、そのような移籍は途方もない物質的利益に釣られてではなく、むしろ一緒に働くことによって得られる満足感を感じ続けたい、という欲求によって起こるのがふつうである。
  • チームのメンバーが自分がもらった任務は劣ったものだという感情を押し殺していた場合、それはチームの仕事に驚くほどの害を及ぼす可能性がある。エゴレス方式はそう感情を和らげる傾向を持つ。
  • グループの目標に関する真のコンセンサスを達成するには、グループ自身に目標を設定させる以上によい方法はない。
  • 目標設定に参加すること自体が各個人がチームの作業目標を真に受け入れ、その結果として生産性が高まるかどうかについての重要な決定要因になっているように見受けられる。
  • 最大の危険はマネージャーが、プログラミング関係の職位を経て昇進してきた人物であって、チームが問題をまだ見てもいないうちにビット、バイトのレベルまで決めてしまおうとする、という場合である。これほどチームの意欲を削ぎ、おれたちは「ただのコーダーさ」、と感じさせてしまうやり口はない。
  • 仕事の概要をそれがどういう意味を持つか、という視点から示す必要がある。プログラマは単に何をするかではなく、なぜそうするのかを知りたいと思うものだ。
  • プログラミング経験のない人物がプログラミングチームの管理者として任命されたとすると、その任命によるリーダーが自分は技術的なことについては能力がない、ということを積極的にまたは暗黙に認めない限り、トラブルが発生する。彼がなしうる最悪のことはチームの自分以外のメンバーとプログラミング能力を競おうとすることである。
  • 近視眼的なリーダーや自信のないリーダーは経営層をよろこばすには向こうがいってきたことを全部約束するのが最善の道だ、と感じるかもしれない。だが結局のところ、経営層が望んでいるのは果たされた約束なのだ。
  • クビを覚悟のリーダーだけが、成功への真のチャンスを握っている。
  • 人は他人の積極的強力があってこそ、ずっとすばやく、またずっとよく学ぶ
  • 大部分のプログラマは、能力を身につけていくにつれて、自分の知識を生かせないような仕事に不満を募らせはじめる。だから、プロジェクトの長期にわたる安定を願うなら、管理者はプロジェクトが一種のプログラマ加工プラントとして機能するように仕組まなければならない。
  • もしあるプログラマがかけがえのない人物だというなら、彼をできるかぎり早く追い出せ。
  • プログラム開発の進捗状況を判断するというのはきわめて主観的な仕事であり、ある1つのプログラムについてどれほどの進展があったか、という1点だけを見てもさまざまな意見が出てくる可能性がある。
  • プログラミングプロジェクトにおいて、進捗状況の評価に内在する心理学的落とし穴を回避したいと思うなら、作業することとその評価とを、なんらかの形で分離することが必要である。
  • 人々は管理者側からプロジェクトの真の状態に関する情報よりは、むしろ彼らが聞きたいと思っている答えを与えるように、と圧力を掛けられているからである。
  • どんなプログラムにも、払う注意、かける手間に関して適切なレベルというものがある。そのレベルを超えてがんばることは、そのレベルに届かないことによりもっとプロの道にもとることなのだ。
  • いまや、われわれはスケジュールが目標として存在すること自体が「割り当てられた時間」に影響することを知った。仕事が割り当てられた時間一杯まで伸びるかもしれない理由は他にも目標があって、それがスケジュールと比べたとき、どの程度重要であるか明らかにされていない、というところにあるのだ。
  • プログラミングの探偵たちは、(中略)(常人にはちょっと理解しがたいほど深く)その仕事自体に満足をおぼえる。ただしこの種の虫発見の天才は虫が見つかったあと、それを修正するのはあまり上手でない可能性がある。
  • われわれは「よいプログラマになるためには」と「よい友情を打ち建てるには」とは似ている、ということに気づくだろう。その答えはお互いに認め合うことと、個性を大切にすることである。
  • 私は自分の時間を明確な仕様を発見し、人に伝えるという方向に向けて使うのがもっとも有効だろう、という結論に達した。そして確かにそのテーマはそこに注目を向けた組織にとって大収穫をもたらすものとなった。
  • 知能は性格、作業習慣、および訓練といった要素と比べて、この問題にとっての重要性が低いように感じられる。そしてそれらの要素は知能と違って人生におけるその後の経験によって変わり得るものだ。だから問題はプログラマを選ぶことよりはむしろ育てることにある。
  • 最大の挑戦は創造的思考にあるのではなく、想像的コミュニケーションにある。つまりわれわれの考えをそれぞれ独自のスタイルを持ったほかの人々に理解可能なように表現するということが重要なのだ。
  • 金銭以外の褒章によってプログラマに動機付けを与えることも可能かもしれないのだ。仕事に納得のいく仕上げを施すための時間的余裕とか、計画段階で何ほどかの責任を分担することとかいった選択肢がある。
  • 学習における防壁はすでに内在化しているのがふつうである。だから平均的な成人は好きなようやらせておくとごく少しのことしかおぼえない。何よりもまず、学習するには自分の知らないしかし学ぶ価値のある何かが存在する、ということを承認する必要がある。プロのプログラマにとって、それを承認することは自分の地位を下げることになる。彼が真の強さを持った真のプロフェッショナルは弱みを自認したとしても何も失いはしない、ということを理解できるほどに明敏でない限りは、である。
  • プログラミング業は、どんな業種よりもっと、絶えざる学習に依存しているものだ。
  • 前進したいと願うプログラマにとって、自分が必要とする教育を公式的な教育と管理者のお慈悲にだけ求めていたのでは不十分である。
  • 学び方を学ぶ第一歩は、自分の資産と負債について知ること、言い換えれば「己を知ること」にある。
  • プログラマなら誰でも心の奥底ではプログラムは動くだけでは不満足であり、それとは別の意味で「ちゃんとして」いなければならないのだ、ということを知っている。
  • プログラミング言語において、物事を表現しやすくし、誤りを最小限にとどめるのに有効な要素のうちでも、もっとも重要なものの1つは「自然さ」である。
  • プログラミング言語が、思考過程を型にはめる性質を持っていることによる。ここでは、われわれは単純な抑制効果について述べているのではなく、プログラムやデータの構成に関する大規模な効果のことをいっている。