「情熱プログラマー」を読みました

はじめに

某飲み会で私の社畜社会人生を変えるきっかけを与えてくれた先輩夫妻からこんな本を頂いた。

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

色々とメモして残しておきたいことがあるので、今の感想と共に記録しておこー。

イントロダクション

  • 起きている時間の半分は仕事である。レジャーとスポーツは時間の割合として15%程度
  • ということは人生は仕事。それを好きになれなければもったいない
  • 会社は僕らを好きだから雇っているわけではない
  • ビジネスの目的は利益を出すこと。
  • 会社で抜きん出るにはいかに自分が適合しているかを理解しなければばらない。

第1章 「市場を選ぶ-Choosing Your Market-

先んずるか、やられるか

  • 最後に勝つのはテクノロジ採用曲線の両端かも

需要と供給

  • オフショアは新奇なテクノロジには飛びつかない
  • 自分の職を失うのが怖いなら、ニッチな分野の仕事を取り組むのもあり
  • 価格で競争できなくても能力で競争はできる

コーディングはもう武器にならない

  • プログラマがビジネスを知っていると知っていないでは価値に違いがある
  • 自分の時間をどんなビジネスに投資するか、今こそ考えるべき

一番の下手くそでいよう

  • チームで一番下手くそでいれば…
    • 自分自身が賢くなる
    • 話し方や書き方も以前よりも知的になる
    • 自分の生み出すコードや設計が以前よりもエレガントになる

自分の知性に投資しよう

  • 主流でないテクノロジと方法論に親しむことによって自分自身を高め、さらに有能な人間になれ

親の言うことを聞くな

  • 両親はリスクを冒して注目に値するキャリアを目指すよりも安全第一でやってほしいと思うはず。でもそれは自分自身が楽しくないはず
  • 自分のキャリアで計算済みのリスクを冒してほしい。もし面白さを感じていないなら、卓越した存在にはなれない

万能選手になろう

  • あるプラットフォームをマスターしたら別のプラットフォームも操れるようになるべき
  • スキルはテクノロジのプラットフォームの枠を超えたものであるべき
  • 今やビジネスとITの間の壁も取り除かないといけない。まずはビジネスがどのように行われているのか、その仕組みを学ぶ

スペシャリストになろう

  • スペシャリストとは、高度に抽象化された概念を扱うときに、その実装となるべき下位の詳細を理解しようとする人たちのこと

自分の人生を他人任せにするな

  • 特定の会社によって作られた特定のテクノロジの上にキャリアを築こうとするのはよろしくない。その会社が潰れたらどうする?
  • 視野が広がれば頭も柔らかくなる。特定のベンダのテクノロジよりもはるかに拡張性がある

愛せよ、さもなくば捨てよ

  • 自分の仕事で秀でた存在になりたければ、自分の仕事に情熱を注がないとダメ
  • 時間をとって自分に合うものを探すように努めよう。情熱がないと、しばらくはごまかせてもいずれ自分自身にも仕事にも悪影響を及ぼす

第2章「製品に投資する -Investing in Your Product-

魚の釣り方を学ぶ

  • もとは老子の言葉
    • 「ある人に魚を一匹与えれば、その人は一日食える。しかし、魚の取り方を教えれば、その人は一生を通して食える。」
  • 自分たちが関わっているビジネスでも魚を釣ろうとしない開発者が多い
    • JavaEEでいうとデプロイ記述子が必要な理由など。その仕組みがどうなっているかを考える必要がある

ビジネスの仕組みを学ぶ

  • ビジネスの仕組みも知らなければ、想像力を発揮したって役に立たない
  • 企業の財務処理の仕組みと用語を理解すると、有意義な変更を行えるようになる

師匠を探す

  • 師匠は学習プロセスをの指針を示してくれる存在
  • 自分のためにキャリアアップの指針を示したり、技術向上の手助けをしてくれたりする、信頼して尊敬できる人を見つけること(相手に師匠になってくれという必要はない)

師匠になる

  • 本当の意味で何かを習得しようと思ったら、誰かに教えてみること
  • 自分の言葉を使って他人にもわかるように説明することは考えをまとめられる

一に練習、二に練習

  • 自分の技術に対して時間の投資が必要
  • コーディングの練習中でも、きれいなコードばかりを書こうとすると、自分の守備範囲の真ん中あたりをうろうろしているだけ

プロセスを大切にする

  • 「ソフトウェアの開発」は物ではない。物を作成するプロセスである
  • 開発プロセスを自分の身近なものと感じるためには、導入に協力し、実践することだ
  • チームの生産性を最大限に高めるためのプロセスは1つの方法論だけで実現できるものではない。自分と自分のチームにとって、

有益なものを選び出し、実際の経験に基いて磨きをかけていく必要がある

巨人の肩の上で

  • 問題の解決方法を探すよりもっと重要なことは既存のコードを自分のスタイルや能力を見直す虫眼鏡として利用すること

自動化によって仕事を確保する

  • ソフトウェア開発の生産性を上げるには次の3つの方法がある
    • 作業員の作業スピードを上げる
    • 作業員を増やす
    • 作業を自動化する
  • しかし、作業員の作業スピードを上げるアプローチは効果の証明が困難
  • 品質の良いソフトウェアを早く安く作る方法は自分自身の作業を自動化すること

第3章 「実行に移す -Executing-

今すぐに

  • パーキンソンの法則「仕事の量は、完成のために与えられた時間をすべて満たすまで膨張する」
    • これはあくまで経験則。実際に切迫感を出して仕事をすれば生産性はアップするよ

読心術

  • 読心術は絶対に安全という訳ではない。リスクも伴う。
    • 会社のお金である
    • システムの機能を制限してしまう恐れがあることはやらない
    • ユーザインタフェースを推測する時は気をつける

デイリーヒット

  • 目に見えて成果を表す方法
    • 実行予定を立てて、それを追跡調査する
    • 日単位でも週単位でもいい。目標を立てて、達成状況を追跡する

誰のために働いているのか思い出す

  • 会社のボトムラインに貢献するなんてイメージが湧きづらい
    • 一番身近なラインに注目する。(チーム)
    • マネージャーの目標がチームの目標と一致していればなお良い
    • マネージャーの問題を解決することがチームの問題を解決することになる
  • 自分自身をビジネスのニーズに合わせるだけでなく、ビジネスを自分のニーズに合わせよう

今の職務を全力で

  • 野心を抱け
  • しかし、大きな目標ばかり追いかけていると自分の仕事の価値を照らしてくれる小さな幸せが目に入らなくなる

今日どれだけうまく仕事ができるか?

  • 退屈な仕事は主に…
    • 想像力をかきたてる仕事でない
    • 挑戦したいという意欲をそそらない
  • 今日どれだけうまく仕事ができるか自問自答する!
  • 目に見えるような競争に置換する

自分にどれだけの価値があるか?

  • 自分のコストと生み出すものの価値を考えてみよう
  • 自分の価値を数値化できるだろうか
    • 給料の2倍を目標とせよ

バケツ一杯の水の中の小石ひとつ

  • 成功すればするほど自分の判断を問い直すことが少なくなる
  • 自分の代わりがいないと思うのは悪い兆候
  • 取り替えがきく存在を目指すことは敵意のない関係を作り出すこと。代替可能であれば次のステップへ進みやすいということ

保守作業の真価を知る

  • 保守業務はほとんどの場合がレガシーなシステム
    • リソース、資金も少ない
  • 新規開発はその逆
    • でも、新規開発の場合はマネージャー、顧客が期待するレベルは高くなる。成果としてビジネスの改善も期待される。それが実現できなければ失敗
  • 保守はユーザの要求に迅速に答えている限り、自由かつ創造的に仕事ができる
  • 顧客と直接関わる機会も多い
  • 一番いいのは保守を自分の仕事として心から受け入れ、より優れた方法を勉強しているプログラマだ!

8時間燃焼

  • エクストリームプログラミングで著名なbob martinの言葉
    • 疲れている時は十分に休息を取ったときより思考の効率が低下する
  • プロジェクトはマラソンであり、短距離走でない
  • 作業時間を伸ばしても、後でガタがくる

失敗する方法を学ぶ

  • 防御的プログラミングで予測できないような問題に対応する
  • 犯したミスで人を判断しない。
    • 間違いに気がついたら、そのことを問題として直ぐに取り上げる
    • 責任を負う
    • 解決策を提示する
    • 助力を求める

できないことは「できない」とはっきり言う

  • 相手を失望させないための「できます」は単なる嘘である
  • 「できません」というと失敗したような気持ちになる
  • 「わかりません」も適切ば場面で使用すれば非常に有効。臆病で自信のない人には言えない言葉である

あわてるな

  • ヒーローは慌てない。現実世界でも同じ。プロジェクトはどんどん遅れる
  • 慌て騒いだところでいい所はない
  • 慌て騒いだ災難は本当の災難だろか?例えばパソコンが使えなくて慌てふためいている人と同じようなもの
  • そこまで災難に悲観することはない。落ち着いてエラーメッセージを読もう

言って、成して、示す

  • 締め切りがなければプレッシャーは無いし、何かをやり遂げる意欲は生まれない
  • 作業計画を可視化し、計画と実行のリズムを作ろう
  • マネージャーに作業計画を伝えるようにする。段々と長期的な計画も立てていく
  • 計画だけでなく、実行した形も可視化し、有言実行を身につける

第4章「マーケティング…スーツ族だけのものじゃない -Marketing... Not Just for Suits-

視点が違えば認識も異なる

  • 他人の評価は気にするべき
  • 何かすごいことしても、誰も見ていなければやっていないことと同じである

アドベンチャーツアーガイド

  • IT分野について、顧客のツアーガイドになれ
  • ビジネスの最大の擁護者は顧客である

オレ、作文的なのは得意っすよ

  • 自分自身を表現するためにも、文章力は必要
  • 説明できることがわかってもらうための第一歩

そこに居ること

  • 直接顔を合わせる方が、はるかに効率的である

スーツ語

  • 自分の業績をビジネスの結果として説明できるように
  • エレベーターピッチはいつでもできるようにしておくこと

世界を変えよう

  • 小さな変化でもいい。信念を持って。改善の余地があれば自分からやらないと

業界で名前を売ろう

  • 人脈が多い程、適職やキャリアブレイクにつながる可能性あり

自分のブランドを築こう

  • 認知と尊厳の両方を築く
  • 自分のブログとかにお粗末な物は書かない。一生残る

自分のコードをリリースしよう

  • オープンソースに寄与する方が、何かの知識があると主張するよりも明らかである

目立つこと

  • 目立つには何かをすること。何かができることではない

コネを作る

  • プロと知り合いになるのは自分を高める最善の方法
  • 恐怖心が隔たりを作っている

第5章 「研鑽を怠らない -Maintaining Your Edge-

既に時代遅れである

  • 今日の経済で同じような投資が成功する見込みはない
  • 未来を見据えて意識的に自らのスキル育成に取り組む。ギャンブル要素もあるけどね

君は既に職を失っている

  • 何事も変化する。思春期の厄介な若者みたいなもの
  • 遠い存在の未来を頑なに思い定めるのはダメ

終わりのない道

  • 結果ばかりに注目すると、プロセスの質を高めることが疎かになる

自分のロードマップを作る

  • 自分自身の製品ロードマップは自分が前進しているかどうかを示すものである

市場に気を配る

  • 目と耳を大きく開いて、技術系ニュースに目を通し、業界にさざなみを立てそうな新技術をチェックすること
  • アルファギークを追え!

鏡の中太った男

  • 自分自身の成長具合を計る簡単な方法は信頼できる第三者を探すことだ
  • 自分自身を省みる時間をスケジュールしよう

南インドのサル捕獲トラップ

  • 価値観の硬直化とはあるものの価値を強く信じるあまり、それに対して客観的な疑いを持てなくなることを指す
  • 僕らはほとんどそれに該当するものを持っている

ウォーターフォール式のキャリア計画はやめよう

  • 自分のキャリアアップもビジネスの考えと同じ
  • キャリアの変更は可能であり、必要だ
  • 大きな目標を立てたら常に見直すこと

昨日よりよく

  • 大きな問題であれ、まずは昨日と比較してどうであったかが大事

独立する

  • 各部署の均質化のなかに埋没していると、人より抜きん出る意欲がなくなる

感想

  • 読んでいて、「あ!そういう考え方すればいいのか!」というような新しいインスパイアはある訳ではなかった。
  • でも「そうだよね!そうそう!」みたいな、プログラマとしてこうあった方がいいよっていう話を振り返るには非常にためになった。

各章で最も気になった言葉

  • 第1章
    • 一番の下手くそでいよう
  • 第2章
    • ビジネスの仕組みを学ぶ
  • 第3章
    • 言って、成して、示す
  • 第4章
    • 世界を変えよう
  • 第5章
    • 昨日よりよく