😌

プログラマーの二つの技術

2024/09/28に公開


プログラマーとして知っておきたい2つの技術があります。これについて簡単に説明していきますね。


その2つの技術とは、ざっくり言うと「プログラムをちゃんと動かす技術」と「保守や拡張がしやすいプログラムを書く技術」です。


別の言い方をすれば、「コンピュータが理解できるプログラムを書く技術」と「人間が読めるプログラムを書く技術」です。この先では、図に合わせてそれぞれ「青の技術」と「緑の技術」と呼びますね。


「青の技術」は、小さなプログラムに特に重要です。一方で「緑の技術」は、大きなプログラムにとって特に大切だと言えるでしょう。


プログラミングを始めたばかりの人は、まず青の技術からスタートします。なぜなら、青の技術がないとプログラムはそもそも動きませんからね。動かないプログラムは意味がないですから、最初はここから始めるわけです。


そして最初のうちは「青の技術をどんどん磨いていくぞ!」と思うでしょう。まだ「緑の技術」についてはあまり意識していないことが多いです。実際、青の技術を極め続けるプログラマーもいます。


でも、多くのプログラマーは、途中から青の技術を磨きつつ、徐々に緑の技術にシフトしていきます。面白いのは、自分でその変化に気づかないことも多いんです。ずっと同じ方向に進んでいると思っていても、実際に役立つ技術は緑のほうになっていることに気づかないことがあります。


この話をすると、「青の技術は初心者向け」と聞こえるかもしれませんが、そんなことはありません。


青の技術は、むしろ非常に高度で難しいものです。特に科学技術計算やコンパイラ開発、CPUの設計に携わる人たちは、青の技術を極め続けているでしょう。これは、天才的なスキルが要求される分野です。


でも、少なくともプログラミングを始めたばかりの人は青の技術しか目に入らない、というのも事実です。逆に緑の技術を知っている人は、ある程度の経験を積んだ人たちです。


青の技術は、初心者でも必ずどこかで触れますが、緑の技術を理解するためには、少し経験を積む必要があります。


「コンピュータが理解できる書き方」と「人間が読める書き方」の違いについて、もう少し詳しく説明していきますね。


よく「他人にわかるコードを書こう」と言われますが、「他人」って誰のことなんでしょう?
私が新人だった頃、5,000行のメソッドの保守を手伝ったことがありました。分割しようとしたら、先輩に「分割しないほうが追いやすいからやめてくれ」と止められたんです。それ以来、「なぜ5,000行のコードが他人にとってわかりにくいのか?」を考え続けていますが、未だに明確な答えは出ません。その先輩にとっては、確かに分割しないほうがわかりやすかったのです。
なので私は、今では「数年後の自分が読んでもわかりやすいコード」を目指すようにしています。それが一番客観的に定義しやすいですね。


次に、「小さなプログラム」と「大きなプログラム」の違いについてお話ししましょう。管理の方法が本質的に違います。


図書館の本の管理を例に考えてみましょう。自宅に5つくらいの本棚がある人が、図書館でアルバイトを始めたとします。本をしまうときに、「適当に本を並べておいて」とだけ指示されるとします。
そのアルバイトは、自宅の感覚で適切だと思う場所に本を置くでしょう。でも、多分先輩に怒られるはずです。図書館では、新しい本はきちんとシステムに登録して、適切な番号をつけて管理する必要があるのです。自宅の本棚と図書館の本棚では、管理方法が全く異なるわけです。


小規模のプログラムならその場の判断で十分なこともありますが、大規模なプログラムでは細かいルールや手順が必要です。


最後に、プログラムを上達させるための能力の鍛え方について話しましょう。
プログラミングスキルを脳に鍛えさせるイメージです。


最初は、知識をどんどん蓄積していきます。


そして知識を増やし続けますが、やがて限界が来ます。


その頃には、プログラミングにも慣れて、どんどん脳の回転も速くなります。



ですが、脳の能力には限界があります。数百行のコードから、いずれは数万、あるいは数億行のコードに直面することもあります。鍛えるだけでは限界があるんですね。


そこで、より多くのプログラムを効率的に扱える技術が必要になります。それが「保守性」「可読性」「変更容易性の高いプログラムの書き方」です。そうすれば、少ない脳の要領で、同じプログラムが扱えるようになります。


これを身につけると、限界以上の規模のプログラムも扱えるようになります。



例えるなら、脳を鍛えるのではなく、大きな荷物を運ぶためにトラックを使うようなものです。普通の可読性では不十分な場合でも、TDD(テスト駆動開発)やCI/CD(継続的インテグレーション/デリバリー)などの工夫を加えれば、より効率的に作業を進められます。


青の技術を磨くには、脳の能力そのものを鍛える必要があります。一方で、緑の技術では、いかに脳を使わずにプログラムを扱えるかが重要です。できるだけシンプルで、考えなくても扱えるプログラムを書くことが求められるのです。


ただ難しいプログラムを読めるようになるだけでは、小規模のプログラムしか扱えません。難しいことをあまり考えずに、シンプルで効果的なプログラムを書けるようにしましょう。


もちろん、最初にお話ししたように青の技術も大切です。プログラミングを始めた頃に感じた「難しいプログラムが読めるようになる」という目標も、非常に重要です。コンパイラやCPUの設計ができるようになる道も、プログラマーにとって素晴らしい選択肢です。


ただ、より多くのプログラマーにとって必要なのは、緑の技術――つまり、大規模なアプリケーションを作る技術です。
同じ機能なら、できるだけ短く(ただし、変数名は長くてもいいからしっかりとわかりやすく!)、そしてわかりやすく書けるように努力しましょう。

1秒で理解できるメソッドを書く。シンプルな設計を身につける。使いやすいライブラリを作ることで、コードは短く、そして読みやすくなるのです。

こうした技術を身につけたプログラマーが、これからの開発現場でますます必要とされています。そういう道を目指していきましょう!

(編集協力:ChatGPT 4o様)
(当記事はQiitaにもマルチポストされます)
Qiita
(スライド全体はこちら)

Discussion