【エンジニアの道は果てしない】 ソフトウェア開発における個人的な嗜好と苦手意識
こんにちは。すうちです。
今回はソフトウェア開発について、自分自身の気づきを書いた話です。
--
※タイトル画像:つめだ えんさん
はじめに
今は新しいプロジェクトの序盤なのですが、先週書いた開発基板などが届きはじめ、これまでの検討段階からそろそろ本腰!?を入れる時期にいます。
それもあって最近はプログラムを作る時間(コーディング)が増えています。その過程で自分の嗜好と苦手を意識する機会がありました。
※あくまで個人の嗜好であり、他の方に推奨するものではありません
ソフトウェア開発における個人的な嗜好と苦手意識
最初はとにかく動くものを早く作りたい
ひと昔前はウォータフォール型という開発スタイルで、ソフトウェアの仕様を明確に定義してそれを実現する設計をしっかり考えて、コーティングやテストする流れが一般的だったと思います。
この辺は職種や分野によっては今も同じかもしれませんが、最近はアジャイル型(小さい機能追加とテストを段階的に繰返して作っていく)が主流な気がします。
今の所属もどちらかと言えばアジャイル型の開発です。ちなみに、私はそれに加えて、頭にあるイメージをできるだけ早く動かして確認したい欲求が強いです。
そのため(良くないのは承知の上で)最初のプログラムは動かすこと優先で構造化の概念もなくベタ書きもあり、一番簡単に実現できる手段で書くことが多いです。
過去に経験した開発では、先に仕様書や設計書を作って…の流れもありましたが、私はその作業が苦手でした。
それは「何も作ってもない状態で先に仕様や設計の細かい所まで考えられない…」というのが理由でした。あと、本当にできるのかどうかわからない文章に時間を費やすより、実際にコードを書いて動かす方が確実というのもあります…笑
リファクタリングは好き
モノを作らない状態で設計を考えるのと違って、実際コードを書いてプログラムを動かすとその時になって気づくことが多々あります。。。
例えば「机上では気づけなかったけど、この実現にはこの処理も追加で必要」とか「ここは一旦この書き方で実現できたけど後々変わる可能性高いので、関数は汎用的にした方がいいな…」などです。
たぶん優れた方は、こんな所も先に見えているのだと思いますが、私の場合、コードを書かないと具体的な設計をイメージできない部分がどうしてもあります。
当然最初のコードで開発を進めていくのは後々メンテナンスに支障あるので最低限確認できたら、(機能は変えずに)一度作ったソフトウェアの構造を見直して最適化していくリファクタリングの作業は必要です。ただ、ずっと悩んで進まないよりはこちらの方が好みです。
実際のコードがあればその問題点を反映して、具体的にどういう設計にすべきがわかりやすいというのが大きいです。
また(形はどうであれ…)実際に動くモノがあると精神的な安心感があるので、そこから最適解に近づけていく過程が楽しいというのもあります(変更後に動かなかったら、その部分だけ見直せば良い)。
大規模開発と小規模開発の違い
こういうやり方ができるのは、担当範囲が比較的自由に進められる点と製品に直結するような大規模開発ではないというのはあると思います。
以前、製品直結の大規模開発に参加していた時はウォータフォール型の開発で、先にドキュメントありきで各工程もレビューが通らないと先に進めませんでした。その分、開発期間は長く人員もかなり多かったです。ただ、製品開発では品質面も重視されるので、第三者的な確認はそれなり意味があったと思います。
個人的にどちらも経験して思うのは、それぞれに良い点・やりにく点はありますが、今アジャイル型が主流なのは、比較的少人数でスピード重視で形にできることやウォータフォール型の弱点である致命的な問題が後で発覚するのを未然に防ぐことがあると感じます。
別視点では、ウォータフォール型は少人数の場合、ひとりの負担が大きく開発が遅れる反面、個々のスキルがバラバラな大規模開発では一定の管理をするので成り立つ面もあり、逆にアジャイル型は、個々のスキルや経験値がある程度ないと上手く回らないとも思います。
最後に
開発過程で気づいた自身の特性について、過去に失敗したり上手くいった経験も両方あるので、設計と実装どちらが優先ではなく結局バランスかなと思います。
私の場合、実装に進む前にもう一段階くらい全体の設計を決めて進めると手戻りが最小限で済みそうな予感はしてます…笑
以前、投稿した新人時代にお世話になった先輩に言われたことで今も覚えているのは「ソフトウェアに正解はない…けど明かな間違いはある」の言葉です。
若い頃はその先輩に「それ、明かな間違い!!」とよく指摘されていました。今はそれこそAIがコードレビューもしてくれるし、何ならコードだって書いてもらえる時代です。
プログラム以外も物語や音楽、イラストも指示次第でAIで作れるようになっていることを考えると、以前は一人では難しかったことを実現できるハードルは(その意志さえあれば…)どんどん下がっている気がします。
ソフトウェア開発もAIの自動化は避けられないと思いますが、逆に仕事を辞めた後、趣味で続けられることをAIを通じて今から磨いていくのもあり?と最近妄想しています。
少し脱線しますが、将来的にAIができることもあえて人がやる(趣味でやる)選択肢やAIでないからこそ生まれる価値は残るかな、とぼんやり考えてます。
今回あらためてコードを書いたり考えることは好きと気づけたので、AIで優れた実装ができるようになっても、自分の趣味では好きに考えてプログラムを書いていたいなと思いました。
最後まで読んで頂き、ありがとうございました。