情熱プログラマー ソフトウェア開発者の幸せな生き方【委託】 - 達人出版会
本を読む目的
ソフトウェアエンジニアとしてのキャリアを考える際に、指標にできそうな内容を知るため
読書メモ
# イントロダクション
## 自分のものにする
- 自分のキャリアを、自分が作っている製品のライフサイクルと同じように考える
- 製品の設計・製造・販売において、気をつけるべき4つの側面
- 市場を選ぶ: 焦点を当てるべき技術分野・ビジネス分野を選ぶ
- 製品に投資する: 知識とスキルへの適切な投資
- 実行に移す: 企業・社会に適正な価値を提供する
- 製品を売り込む: 企業や業界全体に自分の価値を知ってもらう
# 第1章
## コーディングはもう武器にならない
- ビジネス分野もテクノロジと同じように選択できる
## 1番の下手くそでいよう
- 自分より優れた人に囲まれた環境に身を置くことで、自分のスキルを上げる
- 仕事だけじゃなくて、OSSへの開発に参加などでも良い
## 自分の知性に投資しよう
- 学ぶ機会は自分で捕まえる
- 主流じゃないテクノロジと方法論に親しむことで自分自身を高めて、さらに有能な人間になれる
- 新しいプログラミング言語を学ぶ
## 万能選手になろう
- ITキャリアの全体像を様々な切り口で分析し、その切り口に対して自分が持っているスキルをまとめる
## スペシャリストになろう
- 他に何も知らないことがスペシャリストだという勘違いをしていないか?
- 自分が使っているプログラミング言語の処理の裏側を知る(e.g. コンパイル時に何が行われているか)
## 愛せよ、さもなくば捨てよ
- 自分のやる気度合いを2週間採点する
# 第2章
## 魚の釣り方を学ぶ
- ある領域を掘り下げる時に役立つ2つの質問
- その仕組みはどうなっているか?
- そうなるのはなぜか?
- いつも使っているツールで、重要だがあまり使い込んでいないものに注目して分析してみる (e.g. bash)
- 今まで知らなかった便利な何かが見つかる
## ビジネスの仕組みを学ぶ
- 付加価値を高めるには、自分が関わるビジネスについての徹底的な理解が必要
- 財務処理の仕組みと用語を理解すると、有意義な変更が行える
## 師匠を探す
- 自分の努力すべき分野を見つける
- 尊敬する人の特徴を10個あげる
- その特徴に重要度をつける
- 同様の特徴を自分に採点する
- その差分を降順に並べると、自分のやるべきことリストになる
## 師匠になる
- 口に出してみる行動 = 考えをまとめる方法
- 教える相手がいなくても、オンラインフォーラムでトピックを選んでどんどん助言する
## 巨人の肩の上で
- 既存のコードを自分のスタイルや能力を見直す虫眼鏡として利用する
- 芸術の世界と同じく、他人の手法を研究し、そこから学ぶことによって独自の開発スタイルを培うことができる
- 分析としてコードを読むときの方法
- 要点をメモして、長所・短所をまとめて、批評を書く
- 自分が利用できそうなパターンを1つ以上探す
- 逆に、べからずのチェックリストに加えるポイントも1つ以上探す
- 人とやってみるのも良い
# 第3章
## デイリーヒット
- 報告できる成果を毎日あげろ
- 自分にとって適切な単位で目標を設定し、その達成状況を追跡調査するだけで、自分の行動を大きく変えることができる
- 毎日数分を無駄にしているが、誰もなんとかしようとしない煩わしい仕事を書き出して、それに対処する
## 今の職務を全力で
- 今の仕事の完了によって何を達成したいかを考える
- 今の仕事の完了という長期目標の達成を目指して、1週間の戦術的かつ戦略的な計画を実践する
- 1週間経ったら、どれだけ達成できたかを確認・どうしたら十分だといけるかを考えて、翌週の計画を立てる
## バケツ一杯の水の中の小石ひとつ
- 代替可能な存在になれば、次の大きな仕事へのステップアップを妨げる要因が全くなくなる
- 自分のこれまで作成したコード、保守・担当して作業を調べて、リストを作成する
- 自分に依存している作業があったら、誰でも対応できるようにする
- この作業は定期的に行う
## 保守作業の真価を知る
- 保守業務に求められるのは、できる限りコストをかけずにソフトウェアの円滑な動作を維持すること
- 自分のリファクタリングの切れ味を試す良い機会
- 測定と改善を繰り返す
- 測定結果から、現実的な目標を設定して、目標を達成できるように改善する
## 失敗する方法を学ぶ
- ミスをしたときは自分の顧客に対応する
## できないことは「できない」とはっきり言う
- 確約した事項を記録したリストを作り、毎日チェックする
- 依頼された仕事内容
- 自分が実際に確約した事項
- (主張が拒否された場合) 自分が最初に主張した考えと、受け入れるように支持された内容
- 約束を果たした日時
## あわてるな
- あわてる前に察知できるようにする練習として、あわてそうになった出来事を日記につけて、以下のことをふりかえる
- あわてるに至った状況
- その後の影響
- あわてる代わりにどんな行動をとりたいか
## 言って、成して、示す
- (短い時間でも効率良く学習できるものを用意する)
- 計画の種類
- 戦術的計画: 1日や1週間単位の計画
- 戦略的計画: 30日、90日の計画
- 戦略的計画も他のスキルと同じように訓練すれば身に付く
# 第4章
## スーツ語
- 自分の業績は自分のビジネスの言葉で売り込め
- ビジネスを運営している人たちの興味はビジネスの結果にある
- エレベーターピッチを用意する
## 業界で名前を売ろう
- 特定の会社のプログラマではなく、視野を広げて、とある業界の参加メンバーと考える
- ブログを書くことで、文章力を鍛える
- 登壇することで、大勢の聴衆を相手にしても慌てないようになる
- 名前を売り出す時に一番大事なことは、時期尚早かなと思うくらいでスタートすること
- もう準備万端だと感じることは決してない。今すぐ始めてもいいくらい。
## 自分のコードをリリースしよう
- 自分が作った/コントリビュートしているソフトウェアに依存している会社なら、職探しが楽になる
- 誰でもRailsを使えるがRailsコントリビュータを名乗れるのは少数
- 自分のソフトウェアがコミュニティに広がるにつれて自分の評判も広がる = マーケティング
- 有名になるのが大勢に知られると言う意味なら、自分のことを知っている人が一人でも増えれば今より有名になったといえる
- 短時間でできるコントリビュートの方法
- 単体テストをコードカバレッジアナライザにかけて実行し、不十分な部分のテストを作成する
## コネを作る
- 「一番の下手くそになれ」戦略が表すように、有力な人脈のある人たちと知り合いになるのは、自分を高める最善の方法
- 人脈を作るために必要なのは、謙虚さを少しだけ抑えることだけ
# 第5章
## 既に時代遅れである
- 週に2時間は新しい技術を調査して、スキルを養う余裕を作る
- 簡単なアプリを作ってみる
- 現在の技術で開発しているプロジェクトの難しい部分を新しい技術で試しに実装して、違いを確認する
## 自分のロードマップを作る
- これからのロードマップを作るために、これまで来た道のロードマップを作成する
- それぞれの段階でどんなスキルや仕事を手にしたかを書き出す
- 少しずつ成長した時期と大きく成長した時期に注目する
- 大きな前進を遂げるまでに平均してどれくらい期間がかかっているかに注目する
- 自分の成長の仕方についてはっきりとしたイメージを掴むことで、現実的な目標を設定できる
- 自分の進み具合を確認するために、過去のロードマップを継続的に更新していく
## 昨日よりよく
- 大きな問題を解決するときは、改善したいものを昨日よりよくすることに注目する
- 昨日よりよくする方法
- 実行したい困難な改善のリストを作る
- それぞれの項目に対してどんな努力ができるか考える
- 翌日にもう一度リストをみて、昨日は一昨日より努力できたか?今日はどうすればもっと努力できるか?考えることを毎日繰り返す