地方エンジニアが感じる地方・中小企業での悩み

誰にでもできる仕事

»

 色々な仕事を行っていると、時として名指しでの指名が入ることもあります。今までの繋がりからそのように呼ばれることもありますが、そこまでに見せてきた結果が良好だった事が大きい理由となることもあります。前に受けた仕事でユーザーに良い結果を見せることが出来た、プロジェクトとしては結果を残せなくとも個人の姿勢に共感を持ってもらえた、色々な理由がそこにはあるでしょうが、呼ばれる側としては非常に嬉しいものです。

 特に大きな案件の場合では、一人の作業員として中々に顔が見えない状況となることが多々あります。そのような環境では自らの事を、歯車、と揶揄される方もいるでしょう。黙々とただ作業をこなしていく日が続くと、エンジニアとして疑問を抱くことも不思議ではありません。

 IT 業界全体としては、「誰にでもできる」という方向性を目指して進んでいます。コードの保守性や、システム仕様のドキュメント化、自動化による安定化など、可能な限り属人性を排する事を正しいとして、今も新しい技術や仕組みが登場し続けています。それ自体は業界の発展という視点からも、必要不可欠な事なのは間違いありません。

 ただ、私自体が年を重ねたからなのか、古い思想をまだ捨てきれていないからなのかはわかりませんが、属人化と簡単に切り捨ててしまい「誰にでもできる」システム開発が出来てしまうことは、本当に良い事なのでしょうか。

 コードを書く、システムを保守する、そのような分野で「誰にでもできる」という発展が進むのは悪い事ではありません。今まで多くの時間がかかった事や、特定の人でなければできなかった作業のレベルを下げることで、元々レベルが高い人たちが更に新しい領域を切り開くことは、非常に大切なことだと思います。
 しかし自分たちがやってきたことを、全て「誰にでもできる」ようにするというのは、かかる時間やコストを考えてみるに、あまり得策ではないのではないでしょうか。

 もちろん、元々満たすべき要件が簡易な場合など、その後を誰にでもできるような状態に持っていける案件もあります。そのような開発当初から既に、誰にでもできる、内容であったのならば、そこに属人性を持ち込むことは反対です。それは却って物事を複雑にしてしまうだけだと思います。
 ですが多くの案件は、その時点で実施できる高い技術を元に対応していくことが多いと感じています。コードの書き方や、設計の方針、オンプレミスなら利用するハードウェア構成、といったように常に同じでは行わない部分がたくさん存在しています。このような領域で、誰にでもできてしまう事を行うのはエンジニアとして手抜きです。それはユーザーに対しても非常に失礼な事となります。

 このような事を考えていると、誰にでもできることを過度に求めることにそれほどの意義があるとは思えません。ある時点では特定の人間しか成せなかった事が、一概に悪い事だとは思えないのです。そうでなければ、ユーザーにより良いシステムを提供することはできないのではないか、と私は思います。

 ここのコラムとして、過去に何度か保守性を話題に取り上げたことはあります。その都度感じることなのですが、保守性はそこまで重要視しなくてはならない要素なのでしょうか。誰にでもメンテナンスができることを否定するものではありませんが、それは本当に「誰にでも」ではなく、特定の人達の間でメンテナンスができれば十分であり、口うるさく言われるような、本当に誰にでもメンテナンスができるコードである必要は全くないと思えるのです。

 何度でも言いますが、保守性は重要ではないとは言いません。ですがシステムを作る上でまず重要なのは、要件を満たすことであり保守性を叶えている事ではありません。要件を満たそうとするために、保守性を犠牲にせざるを得ないという場面もあって良いのだと、私は考えています。

 勿論このように言っているからといって、書き上げたコードが読みにくい、非常に複雑になっているという状況を作り上げてよいものではない、と認識はしています。ただ、そこで技術が不足している人に水準を合わせるのではなく、足りていない人でも理解ができるよう、環境を整えることや理解の手助けとなるものを残すといった、レベルの底上げにもなるような方向で保守性を考えていくのも、一つの方法なのだと思います。

 保守性や可読性といった、既に業界内では一般の考え方として浸透しているものは非常に多いです。ですがそういった言葉の後ろには、その対象をどこにおくか、という問題が常に付きまとっています。誰にでもできる、を優先してしまう事は、この対象を技術が低いエンジニアに合わせてしまう危険性を常にはらみます。そうすることが一番楽で面倒が少ない、ということを多くの人がわかっているからです。

 しかしそれをやってしまうことが、自分たちの作り上げるシステムそれ自体を、誰にでもできる、他の会社でもできる、という全体の価値を低く貶めてしまう事へとつながっているのだという事を、肝に銘じていきたいものです。

 私達エンジニアの仕事と言うのは、決して誰にでもできるものではありません。言葉上の誰にでもできる、というものに惑わされずにより良いものを提供できるよう、全力を尽くしていければ、それはきっと私達自身にも良い形となって却って来るものだと、私は思い続けています。

Comment(4)

コメント

まりも

状況によって一つの言葉にいろんな意味が込められるのはよくあることですが、
にしても、この文脈での「保守性」という言葉には違和感があります。

世界のプログラマーがプログラムのいろんな技術を作り上げる目的の多くは保守をやりやすくすることだというのに、
それをなるべく使わないことを保守性のためというのは、どう考えても詭弁ではないですか?

Ahfさんもその「保守性」は避けたいと思っているのですから、
せめてコラムの中だけでも別の言葉で呼んだほうがいいのでは。

わからなん

ちょっとよくわかりませんでした。
保守しやすいシステムはそれだけで金銭的な価値がありますよね。

同じ性能で保守に年間100万円かかるシステムと50万円かかるシステムを
同じ価格で保守を受注していたなら50万円で済むシステムのほうが多く利益が出ますもん。

保守しやすいシステムを作ること自体誰にでもできることではないし
だからこそ保守しやすいシステムを作れよってみんな言うんだと思うのですけど…

このコラムはたぶん、そういうのはわかった上で違うことを言いたいんだろうとは思ったものの…
いまいちよくわかりませんでした。

要件を満たすために保守性を犠牲にすることはあってもいいと思うけれども
要件を満たすために誰にも真似できないコードや誰にも真似できないハードウェア構成を犠牲にすることがあってもいいとも思うし。
結局、誰にも真似できないコードや誰にも真似できないハードウェア構成も、コスト的にそれが優秀だからそれを選択するのであって、コスト的に優秀なら保守性の優先順位をもっと上げてもいいと思うのですが、経験的に保守性の優先順位を上げてもコストに見合わないということなんでしょうか。

ばしくし

要件定義をやりますと
大抵の場合、保守性・運用性は、機能要件および非機能要件の一部として含めて考えますからね。

要件と保守性を対立させるというオルタナティブな妄想も、常識の殻を打ち破るという意味で、時には思考訓練の場としてはあっていいと思いますが

要件から外れてしまうことが多いので
保守性軽視の視点は、実用性皆無ですな。

Ahf

まりもさん、わからなんさん、ばしくしさん、コメントありがとうございます。

今回のコラム、よくわかりにくい書き方や内容となっていて
大変申し訳なく思います・・・。
全て私の執筆力のなさが原因ですので、もっと努力しなくてはと
改めて痛感しました。
その中でもコメントして頂き大変ありがたく思います。

>Ahfさんもその「保守性」は避けたいと思っているのですから、
>せめてコラムの中だけでも別の言葉で呼んだほうがいいのでは。

全くもってご指摘の通りです。
もっとうまく表せるよう、別の言葉を使えばよかったですね・・・。
次回からはもっと意図が伝わるものを書けるよう頑張ります!


>同じ性能で保守に年間100万円かかるシステムと50万円かかるシステムを
>同じ価格で保守を受注していたなら50万円で済むシステムのほうが
>多く利益が出ますもん。

そうですよね。純粋にかかる金額を見るとその通りだと思います。
後は社内か社外かで変わるところはあると思いますが、
原則は言われる通りだと私も思います。

ただ、その 50 万円で済むシステムを、他の会社はもっと安く済むように
作れるとしたら、損得勘定で考えると他の会社のシステムに切り替える事も
検討することがでてくるかとも思います。
そうならないためにも、下のレベルに合わせて考えるのをやめましょう、
というのが今回書きたかった事となります。


>要件から外れてしまうことが多いので
>保守性軽視の視点は、実用性皆無ですな。

言われることはよく分かります。
要件を満たしたうえで、今回のような話題を考えるのが当然ですよね。
ここで言われる保守性というのを、どのレベルで考えればよいのか、
というのが私が疑問に思っている箇所となります。
そのレベルを技術的に下の方向で考えていると、
会社の為にも、業界の為にもならないのではないでしょうか。

コメントを投稿する