やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

「分別のある行動」を読んでみた感想

プログラマが知るべき97のことの第1項、分別のある行動を読んでみた感想。

前回まで

http://ytyaru.hatenablog.com/entry/2017/12/12/000000

私はどうすれば快適にプログラミングで問題を解決していけるようになるのかヒントを得たい。

1. 分別のある行動

  • 文章が読みやすかった。私の文章とは大違い
  • プロの経験に基づいた話のようなのでとても参考になりそう
  • プロとの差を感じた

感想を述べる以前に、話についていけない。プロと私の立場や視点の差を想像して読解することに注力することになった。今後読み進めて行くたび同じように感じそう。

どういう話だったか

  • 自分のしたことがどういう結果を生むか、よく考えるのだ。

  • 先送りされていく修正作業のことを「技術的負債(Technical debt)」などと呼ぶ

  • 技術的負債はできるだけ早く返済する。

プログラマなら先々のことを計算して、先送りした作業を早めに達成するよう行動しろという話に読めた。そのために「分別のある行動」をせよと。

さもなくば次のような状況が生じてしまうと。

  • 早くできるからと手を抜いてコードを書く
    • 機能追加やコードのリファクタリングが難しくなる
      • 新たな不具合を生む温床となる
        • テストケースの価値を損なう
  • 長く放置するほど害は大きくなる
    • 元々の問題を解決したが…
      • その問題が原因で生まれた新たな問題が山積みになっていた
        • 正しい設計の選択が出来ない
  • 事態が極端に悪化してしまい、もう他にどうすることも出来ない
    • 元々の問題の修正に取り組み始める
      • 修正は極めて難しく手のうちようがない
        • 膨大な時間がかかる
        • リスクが高すぎる

解決するためには以下のことをせよと。

  • 負債を忘れないようにする
    • タスクカードに書く
    • 問題管理システムへの登録をする
  • 負債による利息を監視する
    • 負債によるコストを明確にする
      • 影響の大きさを自覚できる
        • 優先順位向上
  • 次のスケジュールに組み込む

これにて修正コストを最小化できる。という話だと思う。

プロと素人の違い

技術レベルの違い

本文はプロ目線で書かれているため、素人の私と大きな差があると気づいた。

「正しくやる方法」と「手早くやる方法」があって、どちらの方法も理解していることが大前提として話が進んでいる。本文では早めに「正しくやる方法」に修正すべきというのが本題。

それに対して私は、そもそも「正しくやる方法」を知らない。Pythonを書いていても言語仕様を知らなかったり、バージョンにより書き方に違いがあるなど様々なことについて知らない。書きながら何度も調べたり書き直したりしている。

自分がそういう状況であるということにも中々気づかない。「分別をつける」以前に「分別をつけるための知識がない」状態だと思った。私の場合、基礎学習が必要なのだろう。

基礎は多岐にわたる。言語仕様、デザインパターン、開発環境、OS、ツール、ライブラリ、サーバ、WebAPI、HTTP通信規格、RDBMSなど。それらを知ろうとするだけでも大変なコストを要する。修正コスト以前に学習コストが膨大なので本文の話についていけない。

立場の違い

本文の一行目からして趣味でやっている私とは立場や状況が違うことがわかる。話についていけなくて当然だ。

項目 プロ 素人
立場 仕事 趣味
スケジュール ある ない
コード規模 大きい 小さい
実装人数 複数人 自分一人
実装者と保守者 別人 自分一人

プロは一人では完結できないため引き継ぎを考えて「誰が見てもわかりやすいコードを書く」ことが重要になるのだろう。しかし定められたスケジュール下で遂行せねばならないなどの理由で「故意」「不注意」による技術的負債が生じやすくなるという。

私の場合は素人なので「無知」という根本的な問題が大きい気がする。上記のような繊細な話についていける立場にいない。この立場の違いが大きすぎて、話についていけないのだと思う。

私はどうすれば快適にプログラミングで問題を解決していけるようになるのか

私は私の立場で、私なりに考えてみる。私の場合、本文に書かれていること以前にもっと下層のことが必要だと思った。以降の話はもはや本文から大きく外れた内容になる。

今の私はPythonGitHubにコードをアップロードするスクリプトを書いている。書きながら勉強し、修正するスタイルでやってきた。しかし最近、コードの規模が大きくなってきて、今までの方法だと後戻り作業が大きくなってしまうことに気づいた。解決するためにはPython言語仕様やオブジェクト指向デザインパターンについて学ぶことが得策と思えてきた。

  • 無知だがとにかくPythonコードを書いてみた。動けばいいと思っていた。やりたいことを書いているうちに重複コードが増えた。修正箇所がふえて動作確認の手間もふえた。コードを書く時間がなくなっていった。
    • オブジェクト指向について学ぶ
      • デザインパターンについて学ぶ
        • 各言語での実装方法について学ぶ
          • 再利用性の高いコードを書いて重複コードを解消する
            • 類似コード書き、コード読み、修正、テストの手間を減らす

所感

次回は私の立場で具体的に何をどうするか考えてみる。