Share
Embed
Transcript
47 slides
-
ギフティ入社:2019年1月 所属:技術本部 Distribution Section GiftExperience dev Unit 前職:バックオフィス系システムのパッケージベンダー (上流メイン) 言語:Go、Ruby、Java
分報:#times_nakaya 好きな4文字熟語:不労所得 自己紹介 -
エンジニアリングエッセイを読むと... • 具体的な技術プラクティスやノウハウが手に入るわけではない 一方で... • エンジニアとしてのマインドセット •
プロの思考プロセス • 開発現場でのあるある • 人間臭さ なんかが窺い知れたりして、自分の「働き方」に影響を与えてくれるかも...? -
• 人を一人追加したとしても、ひと月で一人月分の作業が進むわけではない ◦ 要員追加時には教育・訓練のコストが発生する ◦ コミュニケーションコストも増える ◦ タスクの分解粒度も見直され、システム(結合)テストの工数も増える • 人月交換可能な見積もりに対してプロジェクトが遅延し、さらに人員を追加し、また遅れ
ていく負のスパイラル • 遅れているソフトウェアプロジェクトへの要員追加は、さらにプロジェクトを遅らせるだけ (ブルックスの法則) 人月の神話 第2章 人月の神話 -
• 本質的な複雑性と偶有的な複雑性を区別する ◦ 本質的な複雑性は、解決すべき問題によってもたらされるもの ▪ 取り除くことはできない ◦ 偶有的な複雑性は、目下の生産には付きまとうが、本来不必要な複雑性 ▪ ソフトウェア開発者自身が発生させている解決可能な問題
▪ 例えば、クラス設計やハードウェアの性能などから生じる複雑性 人月の神話 第16章 銀の弾丸などない -
• ソフトウェアの基本的要素に含まれる固有の性質 ◦ 複雑性 ▪ どの二つの部分をとっても似通うことがないので、大きさの割に他のどの人工物よりも 複雑 ▪ 夥しい数の要素と状態、組み合わせがある ◦
同調性 ▪ インターフェースを人間の社会制度やシステムへの適合を強要される ▪ 周りのものに従わされる運命にある ◦ 可変性 ▪ 大当たりしたソフトウェアは大抵全て変更される ◦ 不可視性 ▪ 目に見えないもので、具現化しようとすると一つの有向グラフでは無理 人月の神話 第16章 銀の弾丸などない -
• 本質的な複雑性は取り除くことができないが、改善はできる • 複雑性への対抗策 ◦ 作るより買う ◦ 要件の洗練とラピッドプロトタイピング ◦ インクリメンタル開発
◦ 偉大なコンセプトデザイナーを育てる 人月の神話 第16章 銀の弾丸などない -
• 作る側の品質理論は自尊心と強く結びついている ◦ プログラマを満足させる最低の基準は、今までに達成した最高の基準である ◦ この水準はマーケットが望み、金を払って手に入れようとするものよりずっと高い • ユーザーは品質ほど大事なものはないと言うが、それにお金を払う段になると品質について本当 はどう考えているかが明らかになる ◦
「あと三週間あれば品質を高くできる」と聞いても、「いや三週間は待てない」という人がほ とんど • 早くリリースしろとせっつき、低品質の製品を受け入れてきたことを考えると、ユーザーの品質意 識はかなり低いことは明白である ピープルウェア 第4章 品質第一、時間さえ許せば -
• 上司であるあなたは組織の目標を心から受け入れているが、部下も同じとは限らない ◦ あなたの目標への情熱は単なるプロ意識を超えたところから生じている可能性 がある ◦ 自分の上司や経営者によって強固な動機付けをさせるための巧妙な仕掛けが 作られているかもしれない • しかし、平社員の動機付けはもっと複雑
◦ 宗教団体のような信仰でもなければ、組織の目標に対する自然な親しみを持つ ことを当てにできない ◦ 重役会が利益の大幅な増加で盛り上がっていても、平社員には増益などほん のつまらないものでしかない ピープルウェア 第21章 全体は部分の和より大なり -
• 守りのマネジメント • 官僚主義 • 作業場所の分散 • 時間の分断 • 製品の品質削減
• ハッタリの納期 • チーム解体の方針 ピープルウェア 第23章 チーム殺し、7つの秘訣 -
• 絵画と同様、ソフトウェアも多くは人間が見て、使うもの ◦ だからハッカーも、画家と同じように、本当にすごい仕事を為すには、 共感する力が必 要 ◦ ユーザの視点からものを見られるようにならなくちゃいけない ◦ 共感能力は、おそらく良いハッカーと偉大なハッカーの、
たった一つの最も重要な違い だろう ハッカーと画家 第2章 ハッカーと画家 -
• ベンチャーは他のベンチャーと同じことをやっていてはいけない • 私たちは Lisp を選んだ。一つには、このマーケットで素早く開発することが重要だというのが 明らかだったからだ ◦ Lisp はソフトウェアを素早く書くのに良い言語だ
◦ 他の会社が Lisp を使いたがらなければ、それは良いことだった • Lisp のおかげで私たちの開発サイクルは非常に速く、相手がプレスリリースを出した1日2日 後にはもう同様の機能を作ったこともしばしばある ハッカーと画家 第12章 普通のやつらの上を行け -
• 大学を出たてで、自分の能力を証明したくてしょうがなかった頃 • 初めて仕事を任された時、担当部分の作業にこれまで自分の学んできたことをどうしても実践 してみたくなった • 内容が似通っているコードを出来るだけライブラリ化してみた • しかし、意気揚々と臨んだコードレビューでそれが失敗だったことを思い知らされる •
コードをライブラリ化してしまったことで、それを利用する部分には依存関係が発生 • ライブラリのコードを1行変更しただけで、その影響は複数箇所に及ぶ プログラマが知るべき97のこと 共有は慎重に -
• 良いプログラマになりたいのなら、常に次のことを心がける必要がある ◦ どんな場合でも、「とりあえず動きそう」というだけのコードは決して書かない ◦ わかりやすいコード(どういうコードなのか、何をするコードなのか、他人が見てすぐに わかるコード)、保守しやすいコード(自分自身や、他のプログラマが、将来、簡単に修 正を加えることができるコード)、正しいコード(単に見かけ上、動くだけでなく、問題を間 違いなく解決できるコード)を書く ◦
他のプログラマと協調する ◦ 自分が扱ったコードは、必ず、自分が最初に見た時よりも少しでも良いコードにする ◦ 絶えず積極的に新しい言語、イディオム、テクニックを学ぶ。ただし、学んだことをむや みには使わない プログラマが知るべき97のこと 良いプログラマになるには -
• 一番の下手くそでいよう ◦ 自分より優れた人たちがいるチームで働く • GitHub に専念するためにマイクロソフトの30万ドルの仕事を断った ◦ 振り返って「確かにあれは安全だった」と思うより「あれは冒険だった」と思える方がい い
• 愛せよ、さもなくば捨てよ ◦ 向上するには、情熱が必要 ◦ やっている仕事に情熱を持てるかどうかがパフォーマンスに影響する 情熱プログラマー 第1章 市場を選ぶ