"達人プログラマー"から学んだこと
はじめに
達人プログラマーの著者Dave Thomas氏が開発者としての50年以上のキャリアの中で現在進行形で実践している達人プログラマー(Pragmatic Programmer)になるために自らが設定している3つのGoalと関連するTipsの紹介を聞いてきたので、その要約と感想とメモを記事にしました。
要約
開発者として幸せ("Be Happy")に働くことがとても重要である。
幸せに働くことを選択するためにも開発者は自己の開発と学習を通じて初心者から達人への階段を上り、自分の意思で行動する独立した能力("You Have Agency") を磨かなければならない。
世界をより良く変える特権と責任を楽しめる開発者のレベルにいるか否かさえも自身の決断である。
感想
Dave Thomas氏の話を聞いて、自分のメンタルレベルとしては上級者〜熟練者の特徴を自負するに至るも、それらを裏打ちする技術面が脆いなと感じた。特に、開発者として直感を信じることを学ぶ; なぜそうなるのかわからないまま正しいことがわかるに達するまでより一層の修練が必要。
エンジニアリーダーというメンバーの成長に対しても責任を負う立場として、彼らが幸せに働きつつ成長につながるような時間と失敗の経験を仕事を通して与えることが重要に思われた。やはり、失敗を認めない、失敗を恐れさせるような組織は成長しない。
メモ
Dave Thomas氏が掲げる3つのゴール
- Happy doing what I'm doing 幸せに働くことの重要性
- Developing and learning 自己の開発と学習
- Changing the world for the better 世界をより良く変える特権と責任を理解して楽しもう
1. Happy doing what I'm doing 幸せに働くことの重要性
- まず、自分がやっていて楽しい。自分がやったことに満足する。自分が作ったアプリケーションを使うユーザーを見て自身の仕事に誇りを持つ。また、やっているうちに楽しくなることも大切。人生は一度きり、その大部分を仕事に費やしている。楽しまないのは損だ。
- Carnation Milk From Contented Cows("満たされた牛")の例。実際の調査として、牛に名前をつけて個人として扱うことで農家は年間の乳量を年間約240リットル増やすことができると2名の教授が発表した。幸せになることは、フィジカルに影響を与える。我々も同じはず。
- 著作の中でも最初のTipとしてページを割いている
- "You Have Agency": 自分の意思で行動する独立した能力がある。
- 自分で”幸せ”に向かう選択ができる
2. Developing and learning 自己の開発と学習
金融投資と同じ
- 知識のポートフォリオ: "価値"あるものを集める ex 体験、知識、人脈
- 定期的に投資する: 習慣化させる
- 多様化させる: 多くのものを少しずつ
- リスクマネージメント: 人気のあるトピックと実験的なトピックの両方を学ぶ
- レビューとリバランス: 投資の成果は?
ドレイファスモデル: 5つの段階
リファクタリング・ウェットウェア にも登場した1970年代のドレイファス兄弟による人間の技能の習得・極める過程についての研究結果 A Five-Stage Model of the Mental Activities Involved in Directed Skill Acquisition を引用
経験を積んでステージを上がっていくが、レベルが上がる程、ルールが減り、直感が増える。
レベル2(中級者)の開発者が一番多い。コンフォートゾーン。自分が考える必要なし。楽。
ここでも、"You Have Agency": 自分の意思で行動する独立した能力がある が重要
- それ(そのレベルにいるの)はあなたの決断です。
- 自分のレベルを選ぶことができる。自分が成長しなければならない。
初心者(Novice)
- 経験なし
- 非状況的な手がかりに基づくルールの実行
- context free
- 何をすべきか伝えなければならない
- 予期せぬトラブルに対処できない
- 経験がない;物事を理解するのに苦労する
中級者(Competence)
- 豊富な経験に基づくパターンの習得
- ガイドラインによる反応
- some context
- 新しい知識と古い知識の統合を始める
- 発生したパターンや状況を理解する
- ある程度の予測能力
上級者(Proficiency)
- 目標ベース
- 戦術的でなく戦略的
- 目的と状況を組み合わせる
- 裁量と選択
- ここで、開発者は重要な決断を下す
- コードだけでない理解
- 状況に適応する;何が重要で、何が重要でないかをわかっている
熟練者(Expertise)
- 直感を信じることを学ぶ;なぜそうなるのかわからないまま正しいことがわかる
- 全体像や将来について考える時間を確保できる
- 恐怖を感じることができる
- 意識的に状況や対応を考えることはない
- 反応が自動的
- 直感的
達人(Mastery)
- 意識せずに物事が起こるフロー状態に入ることができる
- 危険に聞こえますか?筋肉に命令して歩かせてみたり、ボールをキャッチしたりしてみてください
- 達人は非常に厄介な人々です。私たちには見えていないものが、彼らには見えているのです。
- しばしばメタファーで話し、ストーリーを使う
成長のための提案
- 1年に少なくとも1つの新しい(プログラミング)言語を学ぶ
- 毎月技術書を読む
- 技術書以外も読む
- エキスパートの講義を受ける
- 開発者コミュニティのローカルミーティングに参加する
- 慣れ親しんだ一つの環境に固執せず様々な環境を試す
- 時代の流れについていく
和田卓人(@t_wada)氏の講義にも出てた内容
他にも心構えや成長プランとして
- 自分の責任と、自分の時間で行う
- rule of three: 3回同じ壁にぶつかったら、自分に必要なものとして潔く学ぼう
- リサーチする
- ダイバーシティとは初心者である
- リマインダーの活用
3. Changing the world for the better 世界をより良く変える特権と責任を理解して楽しもう
著書の中で最も短いが最も重要な責任について言及した章。3つのTipsの紹介。
私たち開発者は、特権を与えられています。私たちはまさに未来を作っているのです。それは並外れた力を持っています。そして、その力には並外れた責任が伴います。
Tip 98
まず、害を与えてはならない First, Do No Harm
- ユーザーを守れているか? Have I protected my users?
- これを自分で使うか? Would I use this myself?
- 安全性に欠けるか? Does it fail safety?
Tip 99
卑劣な人間を許すな Don't Enable Scumbags
- ”言われたことをやっただけ”とは言えません You cannot say "I was just doing what I was told to do"
- 時にはNoという道徳的義務があります You sometimes have a moral duty to say "no"
Tip 100
それは、あなたの人生です It's Your Life.
共有して。祝って。構築して。 Share it. Celebrate it. Build it.
そして、楽しんでください! AND HAVE FUN!
Discussion