The Clean Coder ch4 Coding

The Clean Coder勉強メモ

出典: 


Coding

  • 一晩練習して、ブラインドタッチできるようになった話

    • 大昔なので媒体はパンチカード。やり直しが効かない。打ち損じたら捨てる
    • 失敗したら即座にわかるようになり、確認せずにカードを廃棄できるようになった
  • 失敗の感覚をもつことは重要

    • フィードバックループをすばやく回すことができる

Preparedness

  • プログラミングはとても集中力を要する仕事
  • 集中できないときはコーディングするな

3 AM CODE

  • 疲れているときに書いたコードは結局捨てるか負債になりがち
  • 健康管理大事

Worry Code

  • 心配事などがあり気がそぞろだと仕事にならない

    • 配偶者や友人との喧嘩
    • 子どもが病気
    • 金がない
  • 無理してモニタに向かっても仕事にならない
  • そういうときは、まずは気を散らしている原因を排除する

    • 時間を区切って電話するなど
  • 無理して書いた良くないコードは、おそらく捨てることになる

    • もしくは、より悪いことに、コードベース中で長く生き続けることになる

The Flow Zone

  • めっちゃ集中できる状態

    • 「フロー」とか「ゾーン」とか呼ばれるもの
  • この状態に入るととても生産的に感じられる

    • いかにしてこの状態を維持するか、と考えがち
  • ゾーンは避けよ

    • 確かに時間あたりのコード量は多くなる
    • が、ゾーン状態では広い視野を失う
    • あとでやり直すこともまた多くなる
  • ゾーンを避けるにはペアプロが有効

    • ペアでゾーン入りすることはまずない
  • ゾーンに入ったほうがよいこともある

    • 「練習」

Music

  • コードを書く助けになる、という人もいるだろうが、著者はそうではなかった
  • むしろ妨げになる
  • 「助けになる」というのも、ゾーンに入る助けになっているのでは?

    • 先述のように、ゾーンは避けるべき

Interruptions

  • 割り込みに対して無礼になる者がいる。なぜか
  • ゾーンから引きずり出されるのを嫌がって

    • ゾーンは避けよ
  • ゾーンのせいではなく、単に込み入った問題を解決しようとしている

    • ペアプロが役に立つ

      • 2人のうち一方に作業を継続・コンテキストを維持してもらい、すばやく作業に戻る
    • TDDも良い

      • 落ちるテストを書いてコンテキストを維持する
  • 自分も誰かに割り込みをすることがある。お互い様というもの

Writer’s Block

  • 端末の前に座っているがコーディングが進まない

    • 要因

      • 睡眠不足
      • 心配ごと
      • 気分の落ち込みなど
  • ペアを組むとどういうわけか解消する

    • ただし完全ではない

      • 1,2時間で疲れ果ててしまう
  • ペアを組むと快方に向かう

Creative Input

  • 創造的なアウトプットは創造的なインプットから
  • 何が良いかはそれぞれ

    • 著者の場合

      • SFがいちばん
      • TVはno
      • 映画はちょっとだけマシ
      • 音楽はプレゼンやトークの資料作成には役立つ

Debugging

Debugging Time

  • 自然の摂理、必要経費と思われがちだが、ないに越したことはない
  • 今日では、デバッグ工数はとても短くなった

    • 10年で10倍くらい短くなったのでは
    • TDDにより劇的に縮んだ
  • プロとしてゼロに漸近させるべき

    • 何かしくじって患部を開け直す外科医にはあたりたくないでしょう

Pacing Yourself

  • ソフトウェア開発は短距離走ではなくマラソン
  • ペース管理大事
  • エネルギーと創造性を節約せよ

Know Hwn to Walk Away

  • 今やってる仕事、終わらないと帰れない?

    • そんなことないでしょう
    • 帰ろう!
  • 創造性と知性ははかないもの

    • 疲れるとどっか行く
  • 行き詰まったらしばらく離れてみる

Driving Home

  • 車の運転は、非創造的でメンタルリソースを使う
  • 仕事の問題から意識を離すのにもってこい

The Shower

  • 視野狭窄になるとエレガントな解法を見逃したりしがち
  • 日常の中 — 朝シャンとかの中で思いついたりする

Being Late

  • 遅れを御するには
  • 早期発見と透明性が重要
  • 終了予定日は3要素で

    • ベストケース
    • 普通ケース
    • ワーストケース
  • 見積もりに希望を組み込まない
  • 3つの終了予定日を毎日更新する

Hope

  • 締切は10日後
  • 先述の「3つの終了予定日」が8/12/20日後だったとする
  • 「間に合う」という希望を持つな
  • チーム・ステークホルダに状況を理解させ、フォールバックプランを握るまで緊張を緩めるな

Rushing

  • 上司に詰められても自分の見積もりを保て

    • 上司を前にして変えた見積もりよりも、当初の見積もりのほうが正確
  • 圧力に屈すると

    • 間に合わせるために急いで何かを飛ばしたり、奇跡を望みながら残業しがち

      • 結局遅くなる
  • 上司、チーム、ステークホルダに希望を持たせない

Overtime

  • +20%長く働いても、+20%の進捗は生まれない
  • 長時間労働は長続きしない

    • せいぜい2-3週間
  • 次のような局面でない限り、長時間労働はすべきでない

    • 金を稼ぎたい
    • ごく短期間(2週程度)
    • 間に合わなかった場合のフォールバックプランがない
  • とくに3つ目が満足されない場合、要求を飲むべきではない

False Delivery, Define “Done”

  • doneの定義が歪む話
  • 自動受け入れテストを書いてdoneを定義すると良い

    • FitNesse
    • Selenium
    • RobotFX
    • Cucumber
  • 受け入れテストはステークホルダやビジネス陣にも理解でき、頻繁に実行できること

Help

  • プログラミングはとても難しいので、助け合いの精神が大事
  • どんなにベテランになっても他者から得るものはある

Helping Others

  • 誰かが困ってたら助けてあげる
  • 助けてあげる時間は長めにとり、その間は観念して助けてあげる

    • 急いでる感出したくないでしょ
  • きっと与えるよりも得るもののほうが多い

Begin Helped

  • 縄張り意識を持たない
  • うやうやしく助けに与る
  • 助けにならなかったとしても感謝
  • 多くのプログラマにとって協力作業は直感的でないので、意識して協力する必要がある

Mentoring

  • 後進の育成はベテランの責任
  • 訓練コースや本は効果的でない
  • 本人のやる気と、効果的な指導にまさるものなし
  • 育成を受ける側もまた、プロとして、指導者を探す責任がある

英語

  • milieu

    • (フランス語)環境、境遇 -?? snatch the pebble from my hand
    • 【意訳】守破離の離みたいな
  • nag

    • しつこく苦しめる
  • infallible

    • 完全無欠な
  • peek poke

    • 特定のメモリセルの内容にアクセスするやつ
  • call of nature

    • 自然の摂理
  • efficacy

    • 効能
  • incumbent upon

    • 義務としてかかって
    • 道徳的に必要で
  • flub-up

    • しくじる
  • fleeting

    • はかない
  • husband

    • 節約する
  • deal breaker

    • 交渉決裂要因
  • protect turf

    • 縄張りを守る
  • cut it

    • 効果的である