プログラマにとって大事なことを考えるのが大事な理由 | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

その人が優秀なプログラマかどうかって話は、結構そのチームで求められる役割に大きく左右されたりして、コミュニケーションをとるのがうまいとか、コーディングのスピードが速いとか、フルスタック的にインフラからアプリケーションレイヤまで幅広く話が通じるとか、様々あったりするのですけど純粋にプログラマとしての役割だけを見た場合、何か一歩足りないというか突き抜けていない感が出ている場合があったりします。

 

それは、実際にコードレビューとかをしてみると、仕事は早いんだけど単に動くだけのコードであったり、コーディング規約がばらばらで見づらいものであったり、プログラムへのこだわりが感じられなかったりと、要はシステムとして見ればなんら影響は無い(少なくとも表面上は)のだけど、蓋を開けてみれば色々と問題があるなと感じたりする時です。

 

 

プログラマとしてののこだわり

 

例えば、(記事としては古いのですが)最近話題になってた記事で


新人プログラマーに読ませて欲しいネーミングの大切さ

 

というようなものがありますけど、これも要は動くからどうでもいいと思ってしまうのか、俺がちゃんと書かないと後々面倒になると思うか(というよりそれが自然にできる)が分かれ道になってくると思うのです。

 

それは、過去に苦い経験をしたことからくる心理からかもしれませんし、世の中に出ているハウツーを見たときに得た共感によるものかもしれませんが、こういうことってプログラミングの世界で何が大事なのか、つまりはプログラマとして何が大事なのかってことが頭の中にあるかどうかによってくるんじゃないかと思ったりします。

 

それは細かいことかもしれませんけど、そういったこだわりを持つことでコードの質もだいぶ違ってくるでしょうし、プログラマにとって何が大事かを考えるってことは、それに反した状況に陥ったときに「じゃあどうすればいいのか」という探求の反復にもつながります。

 

技術レベルで言うと特定の技術であっても、技術同士が連動するため深く掘り下げていくことはかなり困難なわけですけど、そういったこだわりを持っている人はその辺を気にしなかったりします。

プログラムのレイヤーを離れてミドルウェアやカーネルのレベルまでソースを確認したり、そうするために必要な知識を身につけることを苦に思っていなかったり。

 

こだわりというのはもちろん自分の好き嫌いというものではなく、プログラムとして何が正しいのかということを知っているということです。

 

何が正しいのかを知るためには、正しい方法を知る必要があります。

つまりは正しい方法を知るための模索が必要で、それにはかなりの努力を要します(そして本人的にはあまり努力しているという感じを見せませんし実際にそうは思ってないんだと思います)。

この探究心がある限り、その人はプログラマとしての成長が望めますし、コードの善悪がわかることでシステム全体の質を上げることに貢献してくれます。

 

単に動くコードを書くというのではなく、その場に適した正しいコードがかけるというのはプログラマの能力として大きな違いがあると思うわけです。

 

 

何故正しいコードを書く必要があるのか

 

それは、開発の生産性があがるとか、保守性が向上するとか、教育コストが抑えられるとか様々なことが言われたりしていますが、そういったことを改めていいたいのではなく、肝心なのはコードはコピーされるという事実です。

 

新人プログラマが学習するために書くコードは、ネットで調べたものや参考書の中のコードを書き写したものが多いと思います。

 

実際に現場でコーディングをすることになってもサンプルとして参考にするプログラムを教えられたりしますので、正しくないコードは正しくないコードとして学習されてしまいます。

 

正しくないコードでも正しく動くのは事実だったりしますが、パフォーマンスに問題があるかもしれませんし、セキュリティ的なリスクが内在しているかもしれませんし、レガシーの枠を超えることができずにプログラマの知識向上が行えないかもしれませんし、そんなコードを何時までも保守することでモチベーションが下がるかもしれません。

 

ですので、例えそれが動くコードであったとしても「このコードはテストをパスするかもしれないけど、そんなコードはクソコードだ!」ってはっきり言える人が必要なんだと思います。

(もちろんそんなにはっきり言うプログラマは扱いに難しい側面もあるわけですが)

 

そうしないと正しくないコードがどんどん生産され、それがコピーして量産されていきます。

 

その結果は先ほど書いたとおりのことが起きるかもしれないわけで、優秀なプログラマを育てたいというのと正反対の環境が生まれます。

何がプログラマとして正しいのかということを知っている人がいれば、コードが是正されていくわけでそこで正しいコードというものが作られていくきっかけとなります。

 

正しいコードこそが、プログラマとして何が正しいのかという知識を深め、優秀なプログラマを育てるための環境を作ってくれると思うわけです。