善悪の彼岸

社会人5年目、ものづくりと哲学と研究が好き

技術者として成長するには「なんとなく」「とりあえず」をなくすことが大事(なのかもしれない)

ここ,3か月ほど知り合いのフリーランスエンジニアの方に指導いただきながらウェブアプリの開発をしている(Todolist系のアプリでVue.jsとかFastAPIとか使って作ってる).

 

その方(仮にAさんとする)はバチバチフリーランスとして稼ぎまくってて(案件掛け持ちしながら技術顧問とかもされてるらしい),凄まじい技術力を持っている.マジモンのフルスタックエンジニアという感じだ.私が2か月かかることをマジで3時間くらいで,私より正確にできる.

 

そんな凄腕エンジニアであるAさんと仕事をしている中で,技術者としてレベルが上がっていけばいくほど「なんとなくこうする」「とりあえずやろ」みたいなことが減っていくんだろうなということを考えた.

”えいや”で決めない

私はメーカーで働いていた時に製造装置のUI設計を主にしていた.その中で,まぁ前のUIの操作方法を今回もそのまま踏襲しよう,とか,新しい画面や操作系でも,「まぁこんなもんだろう」のように,なぜその方法を選んだのか?他の方法と比べて何が優れているのか?をちゃんと言語化しないまま決めてしまうことがよくあった.

このように明確な理由がないまま何かを決めることを「えいやで決める」と言っていた.ソフトだけでなくメカやハードの技術者の間でも「えいや」は使われてて,大体「えいや」で決めた部分は後で重大な問題を引き起こしていた.また,誰かが何かの意図を持って設計しても,後任の人に意図が伝わらず,よくわからんから「えいや」で踏襲しているみたいなこともよくあった.

 

Aさんと仕事をしていると,そういう「えいや」がほとんどない.画面一つとっても,「誰が」「どのような状況で」「どんなことを期待して使うのか?」「どのくらいの頻度で使うのか?」を明確にしてそれに合わせてUIの部品を決めていく.

私が,「まぁこんなもんだろう」と作った画面も「ダイアログ表示にしたのは何故ですか?他の方法は考えました?ラジオボタンチェックボックスじゃダメですか?」というように徹底的に設計意図について詰められる.

一番厳密さを求めるのが,プログラム中の定数の命名の仕方で,スネークケースやキャメルケースの統一はもちろん,その定数をどんな英単語で表すか,定数が持つ意味と紐づける単語のイメージに差異がないかをとても気にする.他の人がプログラムを読んだときに誤解を生まないためである.

そうやって,全ての設計に厳密であることで結果的な二度手間を減らしているようである.

 

(ちなみにAさん曰く,設計資料を作ることよりもプログラムを見やすく読みやすくすることの方がよっぽど大事とのこと.基本的にコードと対になるような設計資料を作るとコードと資料の二重管理になるので,どうしても必要ならやるが,必要最低限らしい.基本的にコードベースで会話できるようにコードを綺麗にしろ!!!とのこと.会社で永遠に設計資料を作り続けてた身からすると衝撃を受けた.)

 

「とりあえず手を動かす」をやめる

また,Aさんを見てると「とりあえず手を動かそう」みたいなことも少ないように見える.もちろん最終的にコードは書くが,あらゆる可能性を考慮してからコードを書くので基本的に慎重である.コーディング自体というより,コーディングするにあたって行う意思決定に一番時間をかける.

また,書くコードはプロトタイプだとしてもあとで製品として使えるように,セキュリティ,可読性を考慮して初めからある程度クオリティの高いものを作る.(特にAPIを叩く権限チェック等のセキュリティに関してはプロトタイプの時点でもある程度考慮しておく癖をつけているらしい)

 

私の場合は,まぁとりあえず「こ~んな感じの画面かな~」と思ったら画面側から作り始めてしまう.あとでAPIの機能がないことに気づいてサーバー側を付け足したりして抜け漏れが多い.セキュリティなんて知らんこっちゃである.とりあえず動けばええやろの精神.なので動くまでは早いが,動いた後に完成度を上げていくのにめちゃくちゃ時間がかかる.二度手間も多い.

 

なんというか「とりあえず手を動かそう!」と言って作業に逃げないで,考え抜いてから作業に入るのが大事だなと思った.

 

結局,想像力が働くかどうか

おそらくAさんがこういう作り方をするようになったのも様々な案件を通して痛い目を見てきたからだろう.月並みだが,自分がやろうとしていることがどんな結果をもたらすか想像し,予め手を打てるようになることが大事だと思った.そのためにはたくさん失敗する必要があるので焦らずやっていくしかない.

 

(これは余談だが,やっぱ設計だけ社内でやって,実装を協力会社に頼むとか無理があるなと思った.設計の意図を実装側に伝えるのも実装の意図を設計側に伝えるのもめちゃくちゃ大変.めちゃくちゃコミュニケーションコスト高い.設計側がこれくらい簡単だろうと思っても実装側で長時間かかったりするし.あと致命的なのが設計側が痛い目をみないので,永遠に実装側のコストに気づけないのがヤバイ.自分で考えて自分で実装が正義やなと思った.)