プロジェクトにおいて低いスキルの人に引き継ぐ可能性があるのでプログラムの抽象化はほどほどにとどめるべき、という論について

元ネタは各自検索のこと(えー)。
かなり暴論におちつきます。


ことプログラムを実際にコーディングする作業において、抽象度を上げることがデメリットを持つことはあり得ないとする立場に立って話を進めます。可能な限り抽象度は高いに超したことはないと思います。
まずは抽象度が高い方がいい理由を。人間の思考能力には限界があります。複雑な事柄を複雑なまますべて理解することはできません。
このため、複雑なプロジェクトにおいては物事をすべて俯瞰した状態という観点をどこかに作る必要があります。このために使われる技術を総称してここでは「抽象化」と呼んでいます。この観点を前提にすると、抽象化を止める理由は基本的にはなくなります。プロジェクトは進むごとに複雑さを増していきますので、可能な限り抽象化を進めていかないと理解できなくなる瞬間が(つまり、作れなくなる瞬間が)くることが判ります。


ここで問題となるのは、スキルの高い人の抽象化は、スキルの低い人の抽象化よりもずっと高度(できあがった観点が単純なものを提示する)となることなのだと思われます。さらに、スキルの低い人はスキルの高い人の示した抽象化が理解できない可能性が高いです。
ようは、題目に挙げた「ほどほどにとどめるべき」という論は、スキルが低い人が理解できないことを避けるために提唱しているものと思われます。
でも、そこまで判った上で極端なことを言います。
「スキルが低い人」を前提とした組織、もしくはエコシステムは様々な意味で破綻への道を進んでいます。もし、「スキルの低い人のために抽象化を進めない」という方針を持っている組織があるとしたら、その組織は技術者のプロジェクトとしてはすでに破綻しています。
技術に欠けられるトータルコストとしては、抽象化が進んでいる方が圧倒的に低く抑えられると思います。それが判っていながら、その方針を取らないのは、技術的にはすでに破綻があります。組織の構成人員をその抽象化に耐えるよう教育しないことには、トータルコストを下げることはできません。


ちなみに、こう断言しながらも世間の趨勢がその方向にないことは知っています。
まず、技術者としてのトータルコストという視点がない人からはこの結論は導き出されません。なので、技術者以外はこの結論を出しません。
次に、人間の弱さを容認している人は、弱い自分を肯定するために楽な方法をとります。具体的には、トータルコストがどんなに高くなろうとも、自分がその瞬間に楽な方法を常にとります。特に、スキルを上げるのは非常なストレスがいるので、ストレスから逃げる人はトータルコストを考えずに自らのスキルを上げません。
そして、技術を実際に行使する人の技術に対する視点が実はないという可能性が考えられます。というのも、ソフトウェア技術者はソフトウェアの制作を以降も行い続ける予定がないためです。システム開発系のソフトウェア制作を行う企業において、実際のコーディングを行う職種の人間は、キャリアパスとしてコーディングないしはソフトウェアの開発に従事しなくなることが判っています。それが判っているので、わざわざ使わなくなる技術を会得する理由がなくなります。
まぁ、だいたいのところ、暴論で言うと「文系出身の実務系ソフト屋が人数比でソフトウェア従事者の大多数を占めている現状では、常に破綻する方向で動いている」という話になります。抽象化を推し進めなくていいということを言っている限り、もしくはスキルを上げなくてもいいということを言っている限り、ソフトウェア産業からデスマーチは無くならないだろうと。
ちなみに、根っから理系の人たちは、様々な出来事に対して「これをこの先も続けていくとどん詰まりになる」ということに非常に敏感です。感触というか、鼻がきくといったらいいのでしょうか。自然科学なんかを相手にしてると再現性のある事象に対する予想が大分できるようになると思いますので。
なので、今回の元ネタを読んだときに、背筋に何か落ち着かない悪寒を感じた方はかなり鼻がきいている理系の方なんじゃないかと思います。
いや、この程度のことはせめて均しく感じるべきだとは思うんですけどねー。