「プリンシプルオブプログラミング」の「1.1 プログラミングに銀の弾丸はない」を読みました。
内容は「ソフトウェア開発で起こる問題を簡単に解決することなんてできないよ。地道に改善していくしかないよ。」というものでした。
この考え方は非常に納得的で、かつ有用なものだなと改めて思いました。
普段開発をしている中で一度作った機能が負債になったり、半年前に書いたコードを「なんでこんな書き方をしたんだ」と思ったりすることはしょっちゅうあります。
こういったときに「やってしまった」と落ち込むか、こういった問題は起こるものだと開き直って問題の軽減に努めるかだと後者の方が健全で生産的だと感じます。
本によると、ソフトウェアとは以下の 4 つの性質を持っているものであるため、本質的に難しいものであるそうです。
- 複雑性
- ソフトウェアは大きくて複雑
- 同調性
- ソフトウェアはこの複雑な実世界に同調しなければならない
- 可変性
- ソフトウェアへの要求は変わり続ける
- 不可視性
- ソフトウェアは目に見えない概念の集まり
複雑性でいうと、私は今同じソフトウェア開発に約 3 年間携わっていますが、自分が作った機能でさえ詳しい仕様はコードを読み直さないと答えられません。
同調性の難しさは、自社内システムを構築するときなどに感じます。複雑な業務フローをしっかりサポートする機能を作らなければならず要件定義から困難です。
可変性の難しさは、要求が頻繁に変わることでいつも感じています。
不可視性の難しさも、自分が携わっていない部分のコードの思想や設計の意思決定が見えないことでよく感じます。
こういった問題を一発で解決できるようなツールや開発手法は残念ながらこの世には存在しません。
毎回毎回しっかり思考し、今起こっている問題・今後起こりそうな問題を軽減していくということを愚直にやっていくしかないのだなということを再認識できました。
自分のやったことに対して必要以上に落ち込まず、また後輩がやったことに対しては上記の考え方をしっかり伝えリフレーミングしてあげ、問題を軽減方法を一緒に考えていこうと思いました。