【ちゃんなるぶろぐ】社会人1年生が日々の学びをアウトプット!

>>> 読書・遊び・プログラミング・アプリ開発などを通して学んだことを、文章という形で出力 <<<

3分でわかる!「プログラマが知るべき97のこと」その④

読み終えるまで約3分

 

 

どうも、ちゃんなるです! 

今日も"できる"プログラマーになるべく、思考を磨きます!

 

今回は、次の書籍の一部を要約します。

プログラマが知るべき97のこと』

 

下の記事の続編です↓↓ 

chan-naru.hatenablog.com

  

 

今回選択した3つのテーマ

本書はタイトル通り97のことについて書かれています。

今回は、10~12番目の項目についてまとめます。

  1. ツールの選択は慎重に(No. 10)
  2. ドメインの言葉を使ったコード(No. 11)
  3. コードは設計である(No. 12)

 

①ツールの選択は慎重に

このテーマで述べられていたことは、

「既存のツールを適切に活用するのが最もコスパが良い。ただし、ツールの採用は慎重に行おう。」

ということです。

 

以下、要約です。

 

昨今、アプリケーションをゼロから開発することはほとんどなく、既存のツール(コンポーネント、ライブラリ、フレームワーク)を組み合わせて作ります。

それには次のような理由があります。

  • プログラマのリソースを最大限活用するべく、インフラのコードよりもビジネスドメインのコードに時間と能力を向けるため
  • 広く使用されているツールは、自前のものよりもバグが少ない傾向があるため
  • 高品質のソフトウェアを無料で入手できる時代であり、かつ、知識と技術を持った技術者と簡単に出会える時代であるため
  • 開発や保守には多大な人件費がかかり、新しいものをゼロから作るよりも既存のものを買った方が結果的に安上がりのため

 

しかし、既存のツールを組み合わせるのも難しいです。

以下のことに留意し、十分に検討しましょう。

  • どういうインフラ、制御モデル、データモデル、通信プロトコルなどを前提とするかがツールごとに違う。アプリケーションと前提条件が一致しないツールを使ってしまうと、対処策や回避策をたくさん講じる必要が生まれてコードが複雑になってしまう。
  • 機能の追加、設計の変更、バグの修正などによって、他のツールとの齟齬が生じるかもしれない。利用するツールの数が増えるほどリスクが高まる
  • ツールによっては複雑な設定作業を強いられる場合がある。
  • 特定のベンダーのツールに依存すると、保守性、パフォーマンス、拡張性、価格などに制約が生じ、ベンダの動向に影響されかねない。
  • フリーソフトウェアだからといって、商用サポートを受ける際にその費用が安いとは限らない
  • ライセンスに関する条件確認がかなり重要である。

 

既存のツールは諸刃の剣でしょう。

便利だからといってたくさん活用するのは良くありません。

 

『必要最低限のツールだけを活用する』ことがベストではないでしょうか!

 

 

ドメインの言葉を使ったコード

このテーマで述べられていたことは、

「コードがどのような概念を表現しているかを、一目でわかるようにしておくべき。」

ということです。

 

以下、要約です。

 

次のようなコードを見て、どう思いますか?

if (portfolioIdsByTraderId.get(trader.getId())

    .containsKey(portfolio.getId())) { ... }

(本書22ページより)

ぱっと見よくわかりませんね…

 

traderオブジェクトからIDを取得して、

そのIDを使って『MapのMap』からMapをを取得して、

そのMapにportfolioオブジェクトのIDが含まれているかを確認していますね。

 

ちなみに、portfolioIdsByTraderIdの型は、『Map<int, Map<int, int>>』です。。。

 

どうやらこれは、あるとレーダーがあるポートフォリオにアクセスできるかどうか判定するコードっぽいです。

 

次のようにしたらどうでしょうか?

if (trader.canView(portfolio)) { ... }

(本書22ページより)

より私たち人間にわかりやすい書き方になりましたね!

おそらくこの処理の裏側では、上記のMapからMapを取得して、、、のようなことをしています。

しかし、条件判定の際には具体的な処理を知る必要ありません。

具体的な処理は、traderオブジェクトに任せましょう。

 

ここで重要な点は、

プログラマが実際に扱うコードが、上記2つのどちらの表現に近いか」

ということです。

 

プログラマは、その処理が一目でわかるように実装するべきなのです。

これにより、他者がコードを見たときに、どんな処理なのかすぐにわかります。

 

 

③コードは設計である

このテーマで述べられていたことは、

「変化が早く、高度な製品を素早く提供しなければならない現代では、設計が不十分なまま製品ができてしまうことが多い。しかし、設計を適切に行わなければ製品の将来性を奪ってしまう。ソフトウェア開発においては、『自動テスト』を活用して十分な設計を担保しよう。」

ということです。

 

以下、要約です。

 

プロダクトは、プロダクトの仕様作成をした後にコーディング(設計)することで作られます。

変化の早い現代では、高品質の製品を素早くリリースすることが求められており、 このような状況下では設計が不十分なまま製品が作られることが多くなります。

 

どうすればいいのでしょうか?

 

「自動テスト」をするのです。

プロダクトが、たくさんの厳密なテストに耐えうると示さない限り、設計が完了したとみなさないようにするのです。

有効なテストを作成することが必要になりますが、これは、優れた設計のできる技術者が必要なことを意味します。

 

技術者の皆さんは、優れた設計をできるように相当の努力を行い続ける必要がある、このように肝に命じておきましょう!

 

まとめ

①広く採用されている既存のツールは、便利でバグも少ないので活用するべき!

しかし、必要最低限の活用にしましょう。

②コードは一目でわかるように書くべき!

実現したい処理が複雑な場合は、我々人間に分かりやすい命名で切り出すといいでしょう。

③プロダクト開発とそのリリースまでの期間が比較的短くなっている現代では、設計を疎かにしがちです。

しかし、適切な設計ができてなければそのプロダクトの将来性は乏しいです。

技術者は、優れた設計を行えるようになるべきであり、そのための努力をし続けましょう!

 

*より深く知りたい方は、ぜひ本書を手にとってみてください!

書籍情報

プログラマが知るべき97のこと [ ケブリン・ヘニー ]

価格:2,090円
(2021/5/13 11:12時点)
感想(1件)

【中古】 プログラマが知るべき97のこと /ケブリンヘニー【編】,和田卓人【監修】,夏目大【訳】 【中古】afb

価格:825円
(2021/5/13 11:12時点)
感想(0件)

【書籍名】プログラマが知るべき97のこと

【著者名】ケブリン・へニー、夏目大(訳)

【出版社】オーム社

【出版日】2010年12月

【ページ数】243ページ