見出し画像

老人性無知と(自分なりの)対策



最近の気づき

すでに年齢も50歳を超え、かれこれ5年以上Pythonでプログラムを書いている。大概のことはPythonでプログラムを書けるし、人に教えられるレベルだと思っていた。だがしかし、優秀な人のコードを読んで参考にしていると、わからない箇所が所々ある。ネットでわからない箇所を調べつつ自分で同じようにやってみてもエラーとなる。結局自分のわかるやり方で書き直すといった日々を過ごしていた。それでなんとかなっていたからやり過ごしていた。

ただある時本当にこのままでいいのかな?と思い、良質なコードと自分のコードを比較すると何が違うのだろうと考えてみた。良質なコードはすっきり書かれており可読性が高い。ただ、これは結果の話でありそこに至るまでにはしっかりとした技術と知識やその選定があることに気づいた。ではなぜ自分は今までその良質なコードを書く人たちと同じようなことができなかったのだろうかと深掘りをしてみたのがこの記事の内容である。

老人性無知

無知といっても本当に何も知らないわけではない。場合によっては様々な成功体験を積んでいる人も多い。にもかかわらず、無知と呼ばざるをえない状態になるのである。

目的が達成できればどんなやり方でも問題ないと言う考え方

プログラミング言語とは文字通り言葉であり、ただ会話(指示を出す)相手がコンピューターという違いがあるだけである。どの言語にも共通して言えるのが、表現の自由があるということである。
システム開発におけるプログラミングには非機能要件と呼ばれるプログラムのパフォーマンス(アウトプットを出すための速度、リソースの消費量、リリース後のメンテナンスの容易さ)が依頼者から要求されることがあまりなく、また受入試験の時に評価されることもあまりない。そのため多くのプログラマは自分の知りうる知識と経験の中で表現の自由を駆使して好きなようにプログラムを書く。どんなにめちゃめちゃなコードでも、ググって見つけたコードのコピペでも動けばいい!ということになりがちだ。言われた通りに動かないのが悪であり、言われたことだけを守れていれば完璧というパシリの考え方である。老人性無知が蔓延するにはこのような背景があると知っていただきたい。

深掘りの甘さ

これは老人に限ったことではないが、表面的なこと、たとえば文法だけを真似できるようになるが、なぜそれが必要とされるか、どういう時にそれが活かせるかまで考える人は少ない。老人に限った話ではないと前置きしたが、歳をとった時でもこのままだととても辛い。

例えばPythonのジェネレータはどうだろう?非常に強力な仕組みだとあちこちで紹介されており、なんとなく「関数のreturnの代わりにyeildが入ってるやつね!」程度の理解の人が多。正直うまく使いこなせくともまぁ別に問題ないし!となってしまう。ですが例えば大量のデータを処理する場合には使用メモリ量を節約できる可能性があります。これは今時のAWSやGCPを使った共有リソースを安価に使い回す環境に非常にマッチします。ランニングコストの最適化に貢献します。このような背景をきちんと理解せず、機能要件的には同じ結果が出せるからと、メモリリソース(やCPUリソース)などをジャブジャブに使って達成したものは果たしてどの程度の価値があるのでしょうか。プラスの面だけみていれば同じ価値かもしれません。でもランニングコストといったマイナスの面に目を向けると相手に必要以上の損害を与えることになりかねないのです。こう言った深掘りをしようとしないのです。

自己評価の甘さ

歳をとると自分は十分大人であり、完成された人間であると考えがちではないだろうか?なぜなら上記のように本質的にはおかしなことをやっているが、それが顕在化しないために自分に問題がないと思うからである。そういう人は学ばない。自分をメンテナンスしようとしない。実は正確に理解していないことがあっても、自分の知っている何かで置き換えてしまい、分かったつもりになってしまったりもする。そこで気づきも勉強するきっかけも失われる。
私は自己評価が割と(甘いわけではないが)高いのでこの問題に陥ることがある。幸にして私の周りにはすごい人が多い。これは目上の人ばかりではなく、むしろ年下の人にこそ、敬意を払いたいと感じる人が多くなっている。そんな人たちと会話をしたり、自分の悩み事、苦労話を聞いたりしているうちに、なるほどどういう勉強が足りなかったと気づき、次の勉強のきっかけにつながる。改めて自分は恵まれているなと思う。

老人性無知の成れの果て

老人性無知とは、今まさに必要かつ重要な知識を知らないことであり、知ろうとしないことである。物事を表面的なところだけで捉え、その本質が何かをわかろうとしない。それゆえに何か問題を起こしていても気づくことができず、それを咎められても自分は十分に成熟した人間であるので問題はない、昔はそれでよかった、社会が間違っているといったロジックになってしまっていることである。そして周りから老害と言われる。

一般的に言って老人のイメージとはこんな感じではないだろうか?

  1. 頑固、偏屈である。特に昔のやり方にこだわる。

  2. 新しいものが出ると拒絶する。

  3. それゆえ世代の違う人たちと考え方や行動様式が違う。

これは老人の表面的な特徴であるが、よくよく掘り下げてみるとこの老人性無知に問題があるように思えてきた。

70歳でも働き続けるための抗い

われわれはエンジニアであり、パシリではない。何かをエンジニアリングすることで、何かをより良くし社会貢献に繋げる人種である。また、今後老人大国日本で生き抜くためには70歳を過ぎても働かなければいけない時代になるだろう。
序盤に「大概のことはPythonでかける」とふかしたが、今思えばこれは老人性無知の典型症例だ。同じことを実現していたとしても正しい知識、技術、そしてその選択をした人の作品とそうでない人の作品には雲泥の差がある。そのためにも自分がマスターしたと思っていることでも改めてもう一度勉強しなおそうと決意をした次第である。


おまけ

今すぐ必要な知識をオンデマンドで取得するにはネットがいいが、包括的に知識を取得するにはやはり読書であり、資格試験の勉強だと信じてる。
そこで最近読んだものをご紹介!

  • Python Distilled

    • ジェネレータをきちんと理解してなくて不安になった。他にも洗練された可読性も高く、簡潔なコードを書くためには何があるのか知りたいと思ったので。

  • システム運用アンチパターン

    • DevOps知ってるし!とかいうやつに限ってそのために何をすべきか知らなく、その旨みを享受できてない

    • 今のごちゃごちゃな環境をなんとか改善したいと思ったので。

  • Real World HTTP

    • HTTPとか知ってるし!とかいうやつに限ってCORSとかにはまる

    • REST API設計でStatus Codeの設計が雑だなと思ったので。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?