かやのみ日記帳

日々感じたことをつれづれと書いています。

自分の思うソフトウェアエンジニアの難しさと最近の心の萎え

 

最近感じている自分の思うソフトウェアエンジニアの難しさと萎えてることをぐだぐだと書こうと思う。

 

自分はパソコンいじりが好きで得意だと信じていたから、ソフトウェアエンジニアになった。SEというやつだと思う。たぶん。

 

はじめの頃は楽しかった。初心者だから後先を考えなくてよかった。書き捨てだから。バグを治すのは楽だ。原因を探して直せばいいだけだから。チューニングだとか、ある要件があって、それを満たす実装をするのも楽だった。

 

設計って本当に難しい

でも、エンジニアの本当の難しさは設計にあるんじゃないかと気づいてしまった。そして、それこそ最も自分に向いていないのではないか。設計というのは広義、狭義的なもの両方だ。ここでは自分なりに定義させてほしい。

 

狭義の設計は、Webサーバの構成とかを考えたり、プログラムの繋がりを考えること。言語、フレームワーク選定とか。特に難しいのはメンテナンス性と拡張性をもたせること。

仕様変更に強いシステムを作る。それは非常に難しく思う。演習問題も少ない。テストをきちんと書いて、分割しやすくして…。関心の分離だとかドメイン言語だとか…。

他の人がメンテしやすく作る、本当に大事な基本スキルだ。それが…どうにも苦手だ。小手先で解決したくなってしまう。長期で戦うのが苦手なのだ。エンジニアとして反省すべきところだ。

 

自分の思う大きな意味の設計

広義の設計は、それビジネス的に勝てるのか?ということ。せっかく作ってもビジネスで勝てなきゃ会社でやっている以上意味がない。政治的理由で作るナンセンスなソフトウェアなんてたくさんある。他部署の謎のしきたりが原因で意味不明な連携システムが必要になったりする。

 

会社でやるならチームになる。チームにはたくさんの人がいて、ソフトウェアよりずっと複雑で、人情味あふれすぎている。役員説得用のために明日までにデモが必要?今障害対応中ですが?え?それ、スコープになかったんじゃ?情報共有してない?ん?他部署が泣きついてきてテーブル構成変えるって?なんで相談せず?本当にやるって言った?どこで?ん?時間がなかった…??そっか…しょうがないね…。

 

業界の格言?では「出来上がるシステムは組織構造を反映したものになる」と言われる。連携がうまく行ってない部署同士で作られたシステムは当然駄目なものになる。失敗を隠す文化のチームなら、潜在バグを隠したり、仕様がダメダメでも無理やり直せずに間違ったまま進んだりする。

この間面白かった発表では富士通の歪さがURLに現れてると話題になった。

 本当なら recruiting.fujitsu.com でいいはずなのに fujitsu.recruiting.jp.fujitsu.com というcomとjp、fujitsu二回と見た瞬間にヤバい、フィッシングレベルなURLになっているという異様さである。これは採用部門と本社Web部門が連携とれてない例だろうと指摘されている。

 

チーム、部門、会社(役員とかビジネスサイド)全体の認識合わせ、腹の中なにか隠してないか、意図を全部すり合わせて、全員で合意納得させて、情報共有を過不足なくし、懸念点を全部出せるように(隠させない、随時報告OKな心理的安全性確保&レポートラインや共有場所用意&明文化)などなど…。そういうのも含めて設計だと思っている。

 

で、やっていくとこんなに完璧なことは100%ないし、達成できない。だけど、理想とのズレをきちんと説明できるように。本当はこうあるべきだったが、どこからの歪みだったのか。政治的な理由なら次回の取引材料にとか。チームとして失敗したなら反省して共有して、次に活かせるように…。なんとなくを避ける…。

 

これらはもちろん理想論だ。自分の権限があったりなかったり、そもそも自分だけでやるには大変すぎることだったりする。口を動かすよりまず実行…でも一人の情熱で続けるのは難しい。

冷や水あびせる係化

とかとか…やっていると嫌になってきてしまった。冷めてきてしまった。だいたいは誰かの思いつきとか根拠不足で、問い詰めると本音で「だってやりたいから」「なんとなく便利そう」。

いや…エンジニアとしてはわかるよ。うまく行ったソフトも世の中にはある。OSSの話とかも美談というか…いいよね。闇雲に否定したいわけじゃない。

正直に話して、ついてきてくれる人でやってほしい。正直に言うと人が来ないのではと不安だから飾る。それが隠しているようにしか見えなくて、その体質が全体を歪ませると心配しているんですよ…。

 

既存の2つの有名ソフトが使い勝手悪く手間だから内製開発しちゃおう。いや、二個そのまま使えばいいんじゃないですか…。クラウドで運用やってくれて、アップデートもしてくれて…内製で運用回してアップデート、脆弱性対応とか工数ちゃんと見積もって、縮退はプライド的にいやでしょう?だったら今のうちにやめとけば…

 

いっぱい否定するようになってしまった。運用に苦労する人を見て、サポートに苦労する人を見て…。

でも、人をたくさん増やしてお金稼げてうまくいってるなら、ビジネス的に成功で正義だ。エンジニアがどうこういう領域ではないのだ。皮肉じゃない。エンジニアは…会社のシステムの一部だ。ビジネスとしてやっていることだ。ちゃんとわかってないといけない。

 

全部やらなくていいや

いつしか自分がやりたいと思うこともだんだんなくなってきた。だいたい世の中の誰かが作ってくれて、それを買ってうまく使えばいい…。価格が正当に感じられるなら、それがいい。高いから内製すると失敗するのはよくある話だ。見えないコストに目を向けないで安くなったと勘違いする。

 

じゃあ自分はいったい何がやりたかったんだろう?コードは…好きかもしれないけど、コードにはあまり価値がないことを知っている。よっぽどの手練じゃない限り。ガリガリチューニングだったり、あまりに未知すぎるトラブルシューティングだったり、OSSコミッターだったり。

どうしようもなく書かなきゃいけなくなった段階で、最低限書くのがいいエンジニアなのでは…でも、自分がたいしたレベルじゃない。

 

どこにいくんだろう

いつからか自分はコードをあんまり書かずに検証だとか方針とかゴールとか…そういうふわっと抽象的な方に向かっている。このスキルで生き残れる自信はあまりない。たまたまそういう人がいないだけ。ちゃんとしたPMやマーケティングだとかビジネスサイドもわかっている人がいれば蹴散らされる。

 

役職もないし、職業的にも名前もない。転職にも役に立たないふわっとスキルそのものな気がする。大学生のよくいうサークルでうまいこと調整やってました的な。エンジニアっぽいスキルが中途半端以下で、ビジネスっぽいこともかじってるだけで生きている半端者である。こういうのは空気でしかないから、評価もされない。しようがない。

 

大した労力もかけてないし、エンジニアとしてサボっているような気持ちがある。コードを書けない、設計をうまくやれないの逃げ道な感じだ。

コードを書かなくていいというのは楽だ。アラートもならない。運用もない。仕様変更は新しい仕事として分けて要求しやすい。偽コンサルみたいなものだ。システム設計が下手な人間が越権行為をしているように感じてしまう。

 

自分はどういう人間になりたいのか、まだ全然わかっていない。この先どうなるのか、ちゃんと考えないといけない。エンジニア、自分に向いてるんだろうか。職としてやっていけるのだろうか…。