講演資料
概要
良い技術者の基準を定義した上で、『仕様書とコードを大量に読んで、書いて、捨てる』という技術者の成長のための指針を、自身が行っている習慣を通して語る。
スピーカー
佐藤さん。某SIerのR&D部門の人らしい。 githubやツイッターなどで活動。 WebDBPressで連載。
詳細
- 今日は、自分の習慣のうち、明文化して効果を説明できるものを持ってきた。
- 技術者としての習慣を見直すきっかけを提供したい。
よい技術者とは
3つの基準がある。
読む力
- 仕様理解、類推
- 暗黙の条件や仮定を理解する能力。
- コードを理解する能力
- 短い時間で多くを把握する力。
- 関数やオブジェクトの関係性を把握する力。
- コードを評価する能力
- 設計や品質の妥当性を評価する力。
- 書きっぱなしでは良い技術者ではない。
- 自分の過去を評価するのも力。
書く力
- (当然だが)仕様に対して妥当なアルゴリズムを実装できること。
- 書いたコードの制約事項を明らかにする力。
- こういう条件、環境では動かないよ。
- 最低限の品質をテストによって保証する。
捨てる力
- 作り直す力。
- 厳密に仕様を再定義する力でもある。
- 同じ仕様を様々な方法で表現する力とも言える。
- ただし、実際、動く既存のものを捨てて作りなおすのはそう簡単ではない。
- 能力に大きく左右される。
- ただ、日々成長しているなら捨てられるはず。
良い技術者になる方法
仕様書とコードを『大量に』読んで、書いて、捨てる。
標準化された仕様書を読む習慣
標準化された仕様を読む意味
- 高度に整理された知見から都合の良い部分だけを拾う。
- 0からモノを作り出すには労力が必要だが、変更したり削除するのは遥かに楽。
- 原理、原則の理解
- 原理、原則を理解するのはエンジニアリングの根幹。
- とりあえず動いたからいいやを避ける。
- アプリケーションやミドルウェアの正しい動作確認
普段から読む習慣がない人は、HTMLがおすすめ
- HTML5は大きいので全部通して読む必要はない
が、仕様上どうなっているかを、グーグル先生に雑に聞くのではなく、仕様書に当たること。
RFCなら2119から読むとよい。
- 要求の程度を表す言い回し(Must,Shall…)を説明している。
- これを踏まえて、日本語の言い回しとしても一定になるように仕様書を書けると良い。
RFC7231(HTTP1.1)を開始点にする。
JSR
論文と仕様はIEEE
ISO
- どこかのタイミングで、必ず網羅性を気にする時がやってくる。そんな時はISO。
- ISO 12207
- ライフサイクル全般
- ISO 90003
- 品質保証に関するガイドライン
- ISOのプロセス系は、各プロセスがモジュール化されている
- 一部分だけ取り出すことに利便性が高い
仕様書を読もう。
- 良い技術者はこまめに仕様書を確認している。
コードを読む習慣
GitHubには成長の機会
- 大量の良いコードがある。
- が悪いコードもある。
- 貢献の機会がある。
毎日ログイン
- 毎日5分トレンド(Trending Repositories)を見る。。
- 惰性で見るようになるまで続ける。
- 頑張り過ぎない。
最近のGitHubのトレンドは"無理のない学習のやり方"。最近は"Til(Today I Learned)"がバズっている。
- 学習を続けた成果が共有されている。
- これを見ても分かる通り、GitHubの技術者たちは常に学んでいる。
GitHub以外だとTech Blogが情報源。
毎日30分コードを眺める。
- 理解しなくても良い。
- ソースコードを絵画的に鑑賞する。キーワードとインデントを認識できる程度。
- なぜ?
- 畏れを減らすため。
- 意識レベルになくても脳に記録されている。
- よりたくさんのコードを見た時に挫折しないようにするため。
- 良い処理構造は言語にあまり関係ない。
- なぜ?
- コードを見慣れよう。
- モチベーションなしにコードを見られるようにしよう。
- 呼吸するたびに意識を高める必要はないはず。
読むべきリポジトリ
- 得意な言語
- 説明がわかりやすい
- Readmeがしっかりしている
- 半年以内のコミット
- CIサービスによって成功が維持されている
読み始め方
- 依存ライブラリを確認
- 先に見たほうが役に立つ。
- ビルド環境、ユニットテスト環境を作る。
- ローカルでやるとこける。
- が、それが勉強になる。
- ローカルでやるとこける。
- 全部のコードを何度も眺める。
- 広く浅く。
- 境界面となる場所から読む。
- 仮説と検証を繰り返しながら読むと記憶に定着しやすい。
- 抽象度の高い部分から読む。
- 難しければブックマークして後回し。
- git blameを見ると、開発者たちの苦労がわかる。
- コードを動かしながら読む。
コードは高速に読もう
- コードを読む速度は改善できる。
- 良い技術者は毎日コードを読んでいる。
コードを書く習慣
- SIer企業では実装者に対する評価は低い。
一人砂場プロジェクト
- GitHubでやろう。
- 一人でコードを書き、学ぶ遊び
- 計画しない。
- 飽きたらやめる。
公開しなくてもいいが、公開しておくのがオススメ。
- 見られると恥ずかしいと思うかもしれないが、実際誰も見てないので大丈夫。
意味は?
- 自由を味わう。
- 自身の能力を客観評価する。
- 自身の価値観を変える。
- 価値の不明なものを評価する。
何すれば?
- 良さそうなものを何でも使ってみる。
- 言語
- ライブラリ
- フレームワーク
- CIサービス
- PaaS
- 良さそうなものを何でも使ってみる。
ネタがない
小さい車輪を再発明する。
- 他の言語にはあるけど得意な言語にはない。
- XUnitとかはそうやって広まってきた。
- 他の言語にはあるけど得意な言語にはない。
毎日少しづつ書く。
- 最初はエディタ起動とプラグインだけで良い。
- 毎日楽しくコードを書くほうが大事。
コードを捨てる体験
- 続けていると『もうこのコードに耐えられない』となる。
- 最高の体験。
- 別な方法で0からやり直すことで成長できる。
- 一人プロジェクトをやりなおそう。
- 始まりから終わりまで、そしてやりなおすこと。
まとめ
- 良い技術者になるには?
- 仕様書とコードを大量に、読んで、書いて、捨てる
- 無理せずやっていきましょう。