👶
新卒入社前に達人プログラマーを読んだ
はじめに
4月から新卒エンジニアとして社会人になります.
その前に「達人プログラマー」を読んでおこうと思い,手にとってみました.
読んでいく中で自分の中で大切だと思った部分を抜き出して紹介していこうと思います.
同じ新卒のエンジニアの方の参考になれば嬉しいです.
達人プログラマー
誰が本書を読むべきなのか?
本書はより効率的,そしてより生産的なプログラマーになりたいと願う方々のためのものです.
(中略)
我々はすべて(あるいはほとんど)の答えを知っているとか,すべての状況に我々のアイデアが適用可能だと主張するつもりは毛頭ありません.ただこのアプローチに従えば,経験を積む速度が飛躍的に向上し,生産性が高まり,開発ぷろせす全体のより良い理解も得られるようになるはずです.そして,結果的により良いソフトウェアを構築することができるようになるのです.
責任を持つこと
- 自身が個人としてベストを尽くすことに加えて,自らの制御を超えた部分にあるリスク状況の分析を行う.
- 過ちや判断ミスを犯した場合はそのことを正直に認め,取り得る選択肢の提案をする
- 他責にしたり,言い訳をしたりしてはいけない.プログラミング言語,管理のせいにしてはいけない.
- 代替計画を立てておく
割れた窓を放置しておかないこと
- 割れた窓(つまり悪い設計,誤った意思決定,質の低いコード)をそのままにしてはいけない.
- 発見と同時に全て修復するべき.修復するだけの時間がないのであれば,わかりやすいところにその旨を明示しておく.
毎年少なくとも言語を1つ学習する
- 言語が異なると,同じ問題でも違った方法で解決できる可能性がある.
- いくつかの異なったアプローチを学習すれば,思考に幅が生まれ,ぬかるみにハマった事態を避けられるようになる.
- 投資を継続し続けることが肝心.新しい言語や技術に慣れたのであれば,そこで立ち止まらずに,また別のものにトライする.
- プロジェクトに適用できるのか,それを履歴書に書けるのかは関係ない.学習の過程で思考に幅ができ,物事実現する新たな可能性と新たな方法が広がる.
- アイデアの相互交流もする.学んだことをプロジェクトに適用してみる.一部でもその技術のアイディアを借用してみる.
コンテキストは何か?
- あらゆる物事は特定のコンテキスト内で発生する.そのため万能な解決策とおいうものは存在しない.
- 前提条件は何で,短期的な結果と長期的な結果は何か?を考える.
直交性
- コンピューティングの分野ではある種の独立性,あるいは結合度の低さを表している.
- 2つ以上の物事で片方を変更しても他方に影響を与えないとき,それらは直交している
- データベースのコードとユーザーインタフェースは直交させる(データベースに影響を与えることなく,UIを変更できる)
見積もり
- 見積もりの際にはたった1つの数値が出てくるだけでなく,複数のシナリオが存在する.
- 楽観的時間,最確時間,悲観的時間という3つの時間で見積もる.
マウス・トラックパッドを使わない
- 1週間丸ごとキーボードのみを使って編集するようにしてみる.
- 最初の数日は生産性が低下する.しかし手をホームポジションから動かさずに操作する方法を学ぶにつれ,編集作業が今までよりも迅速かつ熟達したものになっていく.
バグの見つけ方
- まずそれがきちんとコンパイルされたコードであるか確認する.(コンパイラの警告レベルをできる限り最大にしておく)
- バグを再現する(再現できない限り,本当に修正できたかどうかを確認する術がない)
ゴムのアヒルちゃん
- 問題の原因を探し出すための簡単で効果的なテクニックとして「誰かに説明する」という手法がある.
- この誰かはバスタブに浮いたゴムのアヒルちゃんのように定期的に頷くだけで良い.
- 順を追って説明する,という単純な行為だけで問題の原因は自ずと画面を飛び出して姿を表す.
エンジニアリング日誌をつけよう
- ファイルやWikiではなく,紙ベースのものを使ってみる
- 手書きにはタイピングとは違う特別な何かがある.
- 1ヶ月ほど続けてみて利点があるかどうかを確認する.(なければNotionなどで管理するのもありだと思う)
その他の本
こういったプログラムを書く上でのアドバイスや(抽象的ですが)より良いエンジニアになるための本として以下のような本は有名です.
最後に
この本を読んでいく中でエンジニアとして成長するためのカギになるものを得られた気がします.
忘れないように定期的に読み直そうと思います.
Discussion