優秀なエンジニアは、仕様変更に弱いプログラムしかかけない傾向にある

  • 投稿 : 2014-07-19
  • 更新 : 2014-07-20
「優秀なエンジニア」は、「意識の高い学生」と変わらない側面を持っていると思ってもよい。ここで、本当に優秀なエンジニアはそうでないという言説は、本当に意識の高い学生はそうでないと言っているのと変わらないところも自覚したほうがよいだろう。

こないだのちょっとした酒席でのこと。
最近入社する人は、優秀で意識高いんだけど
「いや、これをやるにはこういう設計ではダメだ・・・」
とかなんとか言って、なかなかコーディングが進まない、との話。
詳細な話は聞かなかったが、僕のなかではやれテストを書かないとダメだとかそういうのなんだろうな、と理解した。
それで、「そういう人に限って、不具合多いんですよねー」とのこと。でも、そういう意識高い人に「なんでもいいからちゃっちゃとコーディングしてよ」とは言いづらいそうで、なかなかやりづらい職場である。
よくわからないけど、意識高くて不具合多いのは、既存のコードを読んだり、コードを書いたりすることに集中できないから?確かに、全てにテストが必要とかカバレッジが 100% とか言って人は、100% になることばっかりに気を取られて、本来どういうコードを書けばいいのか?について集中できてない気がする。
意識の高いエンジニア、低いエンジニア:ある nakagami の日記:So-netブログ

なぜ、優秀なエンジニアはそういう傾向を持ってしまうかと言えば、プログラミング(コーディング)に対して原理原則を大事にするという美徳感がものすごく高いからかもしれない。

ここで、変数の数やコードの長さに大差ない、数とおりの書き方があって迷ったときに初めて、責務や凝集度のような指標でコードの指針をえらぶ。
つまり、「責務としてはこっちだけど、コードが単純になるからこのコード」は許されるけど「コードは複雑になるけど、責務としてはこのクラスに書くべきだからこのコード」というのはほとんどの場合よくないコードになる。
オブジェクト指向は禁止するべき - きしだのはてな

設計ミスやモデル化の失敗だ?!

ちょっと知った新しい知識(方法)を導入しようとする場合は、たいてい欠陥まで抱え込む。優秀なエンジニアは自尊心が高いから、そういうことを認めないんですね。

そこで多いのは、設計ミスやモデル化の失敗だとかいろいろ外部要件を出してくるわけなんだが、それは後付論だとおもってもよい。

大体、設計でもコーディングでもプログラミングでも、3回は作り直さないとマトモなものにはなりにくいというのがある。でも、仕事では3回も作り直すことなんてできない。1回勝負です。

あとの2回はどうするか?というなれば、過去の失敗を2回にするしかないんですね。じゃぁ、前の2回は失敗してるんじゃ?ということになるわけです。

そこで、アジャイル型開発手法をつかって疑似的に3回作り直すことを実施しようという方法論はあります。でも、本質を見失うとアジャイルでも結局は同じになってしまいます。

仕様変更に強いプログラム

そういうプログラムをみると、何も知らない人が見ると、くそコードと言われることも多々ある。

仕様変更というのは、理不尽なものが多いというか、理不尽な仕様変更に対応しようとすると構造がゆがむのは当然と言えば当然なんですね。

実際には仕様変更に強いのではなくて、おそらくこういう仕様に変更されるだろうというものにコーディングされるものもある。しかし、現仕様も満たさないとダメなのが仕事なので、どういうコードになり得るかわかるだろう・・。

拡張性の高いものにしようとして、失敗する

仕様変更に強いと、拡張性がたかいというのは別物だと思ったほうがよい。
優秀なエンジニアに多いのは、仕様変更に強いでなくて、拡張性が高いという傾向が高い。

しかし、汎用性をあまり求めていない状況で、拡張性の高さなんていうのはあまり必要ないというか、無駄なところに労力を割かれるのは、効率が悪い。

効率悪いだけならよいのだけど、拡張性の高さゆえに、不具合を作りこむ、バグを作りこむ、仕様変更に弱いとなる傾向が高くなるのも面倒なところ・・・。

自身の現状の8割の知識で書かないと・・・

精いっぱい背伸びして、オブジェクト指向で書かないとと思いだすと、自身の能力を超えているので、うまくいかないところが、ますますうまくいかないというジレンマに陥ることもある。

そういう点で、割り切っているいい加減なエンジニアのほうが、仕事上では周りに迷惑をかけにくいコードが書けることが多い。その中身が、優秀なエンジニアに揶揄されるようなものであっても・・・。

優秀なエンジニアは、書いたコードで評価されない

厳密にいうと書いたコードそのもので評価されないという点はあろうかと思う。
やった仕事の成果によって評価されるんです。

中身が美しいに越したことはないけど、
美しいことが評価につながらないことのほうが多いってだけ・・・。

そんなことはないというのならご勝手にとしかいえないけど
周りが美しく書かないので迷惑というのはわかるけど、美しく書いているあなたが評価されないのはなぜ?という問題は依然として残るとは思う。

だからといって、エンジニアに優秀さや知識が必要ないわけではない

意識が高い学生の問題点は、能力の低い?学生の問題とは別だから
能力は高すぎても、障害になるケースがあるというだけの話。

優秀なエンジニアは、クソなコードを書く無能な?エンジニアを問題とするけど、
別の人たちは、優秀なエンジニアを問題とするだけの話です。

なぜ問題とするかといえば、無能なエンジニアを排除するよりも、優秀なエンジニアをコントロールするほうが難しいからです。排除するわけにもいかないという実情もあるかとは思います。

優秀なエンジニアの独裁化

誰も、面と向かって批判できない、行動を正せないとなれば、独裁化するのは普通のこと。

優秀なエンジニアは融通が利かない傾向にある

周りに合わせようとは思わない傾向にあると言い換えればよいかも。

仕様が変更されるのがダメなのか、仕様を変更できないのがダメなのかなんて、本当は誰にも分らない。

本当に、優秀なエンジニアはそうじゃない?

そんなの言いだしたら、きりがないというか、言葉の定義だけの話だと思う。

エンジニアは、商売センスがないというのはある程度本当だとおもうけど、
本当のエンジニアは、商売センスもあるとか言いだすのと似たようなことで、無限ループを生じさせるだけ。

優秀なエンジニアは、周りの迷惑をかける人たちには厳しいけど、
自分が周りの迷惑になっている可能性については、意識しないんですよ。

だって、優秀なんだから、周りに迷惑をかけるどころか、頼りにされてると思ってるから。
実際、頼りにされてる部分もあるでしょう。

スポンサーリンク
タグ#IT