Hero Image
達人プログラマーとは

はじめに エンジニアとしてコードを書くようになって、もうすぐ2年というタイミングに差し掛かりました 心境の変化としては、がむしゃらに毎日のタスクを通して「動く」コードを書くことから、メンテナンスしやすいコードを意識することが多くなりました 「達人プログラマー」は、プログラマとして次のステップを踏み出そうというときにベストな一冊となっています 達人の哲学 ソフトウェアのエントロピーの話は心当たりがありすぎた エントロピー とは、物理学の用語で「ある系における無秩序の度合い」のことで、 時間が経つたびにエントロピーは増大していく ソフトウェアも同様に、時間が経つたびに無秩序になっていく これを 割れ窓理論 というメカニズムで説明していたのもわかりやすかった 窓が1枚割れているのを長期間放置しておくと、それをメンテナンスする気力もなくなるマインドが 植え付けられて、最終的には建物全体が破壊されていく ソフトウェアではこれを、悪い設計、誤った意思決定、質の悪いコードに見立てることができて、 放置しておくと潜在的なバグを生み出すことになりかねない こういった「割れた窓」を発見したと同時に速やかに修復するべきだ、そして時間がなくてもコメントを 残すといった何らかのアクションをしてくださいと言った主張だった 茹でガエルの話は、ある程度精神的に余裕がないと気づくことが難しいと感じた あっつあつの熱湯にカエルを放り込むとびっくりして飛び出してくるが、 常温の水にカエルを入れて段々と温度をあげていくと、カエルは気づかないまま茹で上がると言った話 要するに、いつもメタ認知を意識して行動しようということ これは仕事に限らずしていきたい 達人のアプローチ 章前半のDRY 原則については膝を叩いて同意できるといった実感があった また、曳光弾の考え方については目からウロコだった 複雑なシステムを構築していくときに、各機能を一つずつ作り込んでいくのではなく、各機能を最低限使えるようにするシンプルな箇所を探していくといった手法 シンプルな箇所に最初に取り組んでその他は後回しにする(未実装)というのは初心者視点では至らないと感じた 章後半のプロトタイプ、見積もりの話は現実でも問われることがあるものの、 実際に見積もりが大きく外れるような難しい設計をした経験がないということもあって実感が持てなかった 「言語の制約はそれを使う人の世界を制限する」 - ヴィトゲンシュタイン 毎回トピックの初めに、名言があってモチベーションが上がる プログラミング言語に限らず、日常使っている日本語にも問題に対する考え方や コミュニケーションに対する考え方に影響を及ぼしているという構造主義的な話もあって興味深い 基本的なツール 「悩んでいる君、そしてその悩みの原因は他の誰でもない、君自身によるものだ」 ということを知るのはつらいものだ - ソフォクレス デバッグの最初の心構え → 「パニクるな」 妄想の達人 契約プログラミング(DbC) は素晴らしい 仕様を記述(契約)しておくことで、プログラマにバグになりかねないようなことをさせないプログラミングをする トラッシュ(メチャクチャ)にするのではなく、クラッシュ(停止)させる Go のif err != nilで毎回エラーチェックしてるのはこれに則っているのかなと思った。 確かにcatchで新しいエラーがくるたびに分類するのは怠い気もするかな、、 柳に雪折れなし 列車の衝突事故を例にして依存をわかりやすく説明している 1つのメソッドであまりにも多くのことをやろうとすると、 連結されている全ての車両に影響が及ぶように、メソッドと属性が影響を受ける 例)割引料金を算出するメソッドの中で、これらの操作を行う。 顧客の注文履歴を参照する 注文履歴から特定の注文オブジェクトを取得する 注文オブジェクトの総額を返す 総額から割引した値をオブジェクトにセットする 次のような考え方がある 照会せずに依頼する TDA(Tell, Don’t Ask)

Hero Image
アジャイル開発

はじめに バックエンドエンジニアのロードマップに沿ってエンジニアとしての自己肯定感を養うシリーズです。 アジャイル開発 「アジャイル開発」っていうとなんかカッコいいしモダンっぽいというイメージをおそらく持っている人もいるでしょう。(私を含めて) 逆に「ウォーターフォール開発」はなんか古臭いし、どこぞの金融系ぷ r、、おっと誰か来たみたいなのでこの辺で。 とまあ、もてはやされたアジャイル開発ですが、フタを開けてみれば「要件定義 → 設計 → 実装 → テスト」の全工程を1つの単位として反復するという手法なのです。 反復する期間はチームやプロジェクトによってまちまちですが、1 週間〜4 週間ほどです。 ってことはですよ、V 字モデルのウォーターフォールを短いスパンで回してるだけ?、、それウォーターフォールじゃねぇか!! 、、というヤジも分からなくはありませんが、ちゃんとメリットがあります。 メリット 1. スピーディー(早い) だってそうですよね。ウォーターフォールでは全工程を段階的に進めていくのでリリースまでに時間がかかってしまいます。 対してアジャイルでは前工程を1つのサイクルとして反復するのでリリースまでの期間が短く済みます。 2. やすい(安い ×) しかもアジャイルは、開発サイクルが短い分、仕様変更や追加機能の対応がしやすいというのもあります。 ウォーターフォールだと、段階的に進めるので、1つの仕様変更があった場合、工程を戻すことになり、、おぉ、、考えただけでも恐ろしいですね。 3. ユーザーファースト(うまい?) これも納得ですね。 リリースが早い分、クライアント(ユーザー)に効率よく素早く提供できる → クライアント喜ぶ → 褒められる → 嬉しい=うまい? (これは数合わせです) アジャイル開発の手法 手法は以下の3つです。 スクラム エクストリームプログラミング ユーザ機能駆動開発 この中で私が経験したのは、スクラムのみです。(2020/07 時点) どのサイトでも言われている通り、この開発手法ではメンバーとのコミュニケーションが非常に重要です。 そのイテレーション(スプリント)でリリースする機能も複数人が関わっていたり、メンバー間での連携が必要な機能だったり。。 極めつけは1つのアプリの全機能を全メンバーが把握しているのがヨシとされるので、知らない機能は教えたり教わったりしないといけないからです。(これは私のチームだけなのかは知りませんが) まとめ 、、とすごく大変そうに見えますが(実際に大変ですが)、スクラムならではの団体戦みのある開発でまあうまく回せるんではないでしょうかというのが感想です。 備考 表紙イラスト:Loose Drawing