home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2019/01/13/ソースコードの内面化

日記/2019/01/13/ソースコードの内面化

日記 / 2019 / 01 / 13 / ソースコードの内面化
id: 1455 所有者: msakamoto-sf    作成日: 2019-01-13 22:47:37
カテゴリ:

この歳になってようやく気がついたが、数年に渡りほぼ自分一人でメンテナンスしているソースコードは、自分そのものだ。

自分の内面的な思考が染み付いていて、どこになにがあるか全て把握し、日々の生活(開発作業)が行われる、家であり寝室であり台所であり浴室でありトイレである。

そもそも会社からの帰り道やプライベートタイム、ましてやお風呂に入ってる間に思いついたり練ったアイデアが展開されているのだから、その点からも自分の内面・プライベートがそのまま延長されたテリトリーであり縄張りである。

そのためか、土足で上がってくるようなエンジニアを想定すると自分でも驚くほど攻撃的な感情が湧く。それは「俺の家で勝手に何してやがんだ!」という感情が最も近い。自分のモノであり、また自分そのものでもある家。それを主人に断りもなく勝手に上がり込んでこちらの流儀などお構いなしに散らかすような人間を想定すれば、怒りが湧いても当然といえる。

逆に、「他所様の家に上がらせてもらってる」という謙虚さが感じられる相手であれば許容できる。具体的には、相手の中の常識や流儀で家を使うのではなく、「お宅の流儀を学ばせてください、お宅ではどうやってますか?これはどう使っていいのですか?」と、こちらの流儀を聞いてくるような相手であれば信頼できる。

少なくとも、どうやら自分は、そう感じてしまうタイプらしい。

もちろん、特に仕事で開発しているものであれば、ソースコードは製品であり、自分そのものとして扱うわけにはいかない。
とはいってもなんだかんだの事情と歴史で、できる範囲で「自分色」は薄めてきたつもりではあるものの、フレームワークの手当が薄いとどうしても自分が作ったオレオレ流儀の部分が大きくなってきてしまう。

例えるなら、もともと売家として自分一人で建て始めた家だが、当面は自分一人しか住まないこともあり、自分が住みながら内装や部屋を増改築している間に、どうしても自分にとって居心地がいいように作ってしまったところが多い。

これをチーム開発に適合させるにはどうすればいいか?
自分一人の内面と濃密に結びついた、内面そのもの。これに入ってくるには、新しい人も相当なストレスというか居心地の悪さにさらされる可能性が高い。
扉の開け閉め、便器の蓋の開閉、トイレットペーパーのブランドや交換方法、台所での細かい道具の使い方、お作法、e.t.c...
それら全てに、それまでただ一人の住人であった自分の内面・価値観・判断基準が染み付いていて、まずはそれに従わないと、家に居させてもらえない。
あるいは、自分がその人を受け容れられなくなってしまう。

そうした感覚無く、「俺は私は」で自分の考えを自分の流儀で設計・コーディングしていくようなタイプはどうしても排斥したくなってしまう。

他者の意見は参考にするなり受け入れる方が良い。
だが、同時に家全体のメンテナンスや維持という責任がある。

家全体の設計の統一感・メンテナンスの容易性を実現するために、絶対に守るべきラインがあるし、絶対とは言わないけどなるべく守ってほしいラインがあるし、妥協できるラインもある。

重要なのは、そのラインが今の所、最初の住人であり数年に渡り家を建て増ししてきた自分の頭の中にしかない、ということかもしれない。

文書化するか、あるいはそれこそつきっきりでペアプログラミングするなりして、自分のお作法・判断基準のラインを徹底的に新しい入居者に叩き込むというのもありだろう。

それでも当面は家全体の責任を負うのが自分であれば、自分が100%納得するか、ある程度妥協できるソースコード以外は全てリジェクトする他ない。
作品というのはそういうものだろうし、今の所もっとも内面が反映され作品としての統一感を出しているのが自分であり、またぼちぼちユーザが使っている以上、自分が納得するか、納得の上で妥協するもの以外は出せない。
というか、出してしまうと、作品としての統一感が崩れてしまったり、結局のところ居住者にとってそこが永遠にストレスになってしまう。
そこだけルールが異なるのだ。

ソースコードは、機能を売るものではあるが、同時に開発者にとっては「棲家」だ。

必要なものがどこにあるか、どういうコンセプトで家具は配置されているか、どこにコンセントがあるか、あるいはどこにコンセントがあるように作られているか、天井の高さは、照明は、床の材質は、家具とのこすれは考えられているか、e.t.c...

これを整えようとすれば整えるほど、整えた人の内面や価値観、判断基準が色濃く生活空間に染み付いてしまう。
避けようが無いのかもしれない。
そのかわり、うまくマッチすれば居住者=開発者のパフォーマンスを最大限引き出すことができる。

とはいえ、全てが「オレ流儀」というわけでもない。
フレームワークを使っていればフレームワークの、ライブラリを使っていればライブラリの、あるいは使っている言語で一般的なスタイルの、それぞれの流儀がお互いに主張する。
それをうまくコーディネートするのも開発者の腕の見せどころだろう。
そういった外部が推奨する流儀やスタイルは、いわば「モジュール化」だ。
ある程度一般化されており、他の人も容易に馴染むことができる。
見慣れた玄関、見慣れた照明スイッチ、見慣れた便器、見慣れた水道蛇口、見慣れたガスコンロ。
別にその家の主に確認を取るまでもなく、自分の経験で問題なく使えるし、主もそれを許容している。だって主も同じように使ってるのだから。

例えば、フレームワーク/ライブラリ/言語のお作法が 3 割で、残りが「オレ流儀」のクラス設計や命名規則などになってたとしよう。
そうなると、他の人が違和感なく作業できる領域が3割で、ほかは逐一、「オレ」にお伺いを立てて「この場合どうしてますか?」と聞かないと、「オレ」は機嫌を損ねてそいつを追い出そうとしてしまう。「オレのやり方を聞かずに、何勝手に自分で使おうとしてるんだ」と。

この状態ではチーム開発は覚束ない。
いくつか解決方法はあると思うが、個人的に挑戦するなら、フレームワーク/ライブラリ/言語のお作法を7割、いや8割程度まで高めて、残りを「オレ」の、流儀ではなくアイデアだけに絞り込む。

つまり「お作法」や「流儀」は可能な限り一般化されたモジュールを使うことにして、本当にコアの思考や言語化し辛い設計の勘所だけを属人性の塊として残す。
実際は「フレームワーク/ライブラリ/言語」が5割、「DDD/関数型プログラミング」などのパラダイム・哲学が3割、「コーディングスタイル・命名規則」が1割で、ここまでが全て一般的に受け容れられているものにして、「オレ流儀」じゃなくて「オレの思考」を残り1割に絞る。

こうすれば、他の人(= 新しい入居者)は「オレ」のお伺いを立てる気苦労がずっと減り、一般化されて学ぶ価値のあるフレームワークやライブラリ/言語/プログラミングパラダイム/コーディングスタイルなどを勉強してすばやく馴染むことができる。

そうなれば、家の増改築は「オレ」一人の仕事ではなくなり、近しいスタイルで力になってくれる戦力が増えるだろう。

気をつけなければならないのが、「オレの常識」を振りかざすのは良くないが、かといって作品等しての統一感を崩すのはもっと良くない、ということ。中長期的なメンテナンスビリティに影響が出てしまう。

理由を示すのが重要だろう。なぜ今はこんな「オレの常識」に従う必要があるのか。それは長期的にどう変わっていくのか。なぜ理不尽で不合理な「オレの常識」に従う必要があるのか。

それはひとえに、自分が売り物としての家のコンセプト・全体設計・品質に責任を負う以上、自分が納得できないものは絶対に入れられない。そうである以上、今は自分のこれまでの判断基準の積み重ねとしての「お作法」「流儀」を学び、まずはそれを真似ることに徹してほしい。
徐々に「オレ独自」の色を削っていく。そうすることで、お互いに納得度の高い仕事をできるようになる・・・多分・・・そうなるといいなぁ・・・。

このようなことをつらつら考えるに、やはり息の長いアプリケーションでは、ある程度大きなフレームワークの方が良いかもしれない。
フレームワークが小さいと、不足部分を手作りすることになり、そこで初期開発者の内面が色濃く出てしまう。
そうではなく、大きめのフレームワークを選択して、初期からフレームワークの流儀にうまく従うことで、初期開発者の内面の色付けを押さえて、入りやすいものにできるのかもしれない。

とはいっても、大きいフレームワークって結局そのフレームワークの開発者たちのお作法や流儀の塊なので、それを学んで適切に使いこなすのがまた一苦労なのだけれど・・・。

そんなことをつらつら風呂に入りながら考えていた。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2019-01-13 23:28:45
md5:6fe4e5542032f16f2b2542206d0d244d
sha1:ddbb2acc675befa77c834cc9e89c8dfb56b107a1
コメント
コメントを投稿するにはログインして下さい。