貴重な経験。プログラムをゼロから作る機会があれば挑戦していこう。
この記事は仕事で趣味でソフトウェア開発をしている方向けの記事です。およそ3分で読むことができます。
つい最近、自社で新しいソフトウェアを設計するプロジェクトが立ち上がりそうだとう噂を聞いて、機会があればやってみたいなぁとぼんやり考えていました。
どうして仕事を増やしてまで、そんなことを僕はやろうと思ったんだろうか?自分にとってどんな利益があるのだろうか?という疑問に対して、自分の頭の中を整理してみました。
ソフトウェアをゼロから作り上げる機会に挑戦するべき理由 その1
ゼロから新しくソフトウェア開発を始めた経験のあるソフトウェア開発者は多くないので、チャレンジした経験はとても貴重なものになるでしょう。
例えば、業務で新しいソフトウェア開発をスタートすることになったら、それまで利用していたソフトウェアをベースにして改良を加えていくことがほとんどです(うちの職場だけかもしれない)。
それまで積み上げてきたソフトウェア資産を流量して、大規模で高度なソフトをゼロから作り上げるより短い期間で済ませることができるからですね。
当たり前のことだけど、改良を続けている職場にいると、ゼロから作り上げる大変さが分からなくなってくるのです。知識としては理解しているけれど、体験できていないので。
ゼロから作り上げた経験たがない、経験が少ないプログラマーではいけないのでしょうか?
そんなことはありませんが、ソフトウェアの基本構造をデザインするチカラの差は明らかに違ってきます。何度も試行錯誤してきた人と、そうでない人では設計スピードが全く違いますし、上手くいかなかったときの対応策も違ってきます。
経験の浅い僕がそうでした。何故メモリ管理をこのオブジェクトが一括管理しているのか?何故、スレッドの数が制限されているのか?何故、多重継承を許可していないのか?何故、オブジェクトのインスタンスポインタを引数として伝達していくのか?自分のチームのソースコードを見ても、他人に説明するどころか、自分自身も理解できないという状況だったのです。
ソフトウェアをゼロから作り上げる機会に挑戦するべき理由 その2
新しいプログラミング言語やネットワークやデバイス制御技術に触れることができたり、自社で枯れた技術とされたものを再確認できたりするので、やはりソフトウェアをゼロから作り上げる経験は貴重です。
例えば、同じOS上で動作するアプリケーション同士のやりとりを見直してみると、これまで通りの方法で十分だということを確認することになるかもしれません。見直しをする前の段階では、初期の設計が古いので、今の技術ならもっと効率よくできるはずだ、なんて考えていたり。
GPU演算に関して、最近は低レイテンシのローレベル制御が主流になりつつあるので、例えばDirectX9や11で記述された古いソースコードをDirectX12で置き換える作業をする必要が出てくるかもしれません。そうなると、DirectX12についての知識が必要になってくるわけですが、持ち合わせていなければ、自学する必要が出てきますよね。
ゼロから作り上げるといっても新しい技術を使わないかもしれないし、枯れた技術を流用しないかもしれない?と思ったりしませんか?
少なくともどちらか片方の状況になることはあると思います。新しい技術でソフトを作り直すのか、これまでのソフトを流用して、問題のある部分だけ作り直すのかのどちらかです。しかし、どっちでもない状況のソフトウェアを作ることはゼロから作り上げることとほぼ同じ状況になってしまうので、先ずありえないと僕は考えます。
まとめ
プログラムをゼロから作ることって貴重なので、機会があれば是非挑戦してみて欲しいです。
ソフトウェア技術者としての経験値を増やしたり、新しいソフトウェア技術に触れる機会になったり、自社が枯れた技術と認識しているものは何かを知る機会になったりするためです。
今後の業務で、ゼロから作り上げるソフトウェアがあるそうなので、僕も積極的に関わっていきたいと思っています。

C/C++で組み込み系ソフトウェア開発の仕事を10年以上やっています。怪しげなデジタルガジェットが大好きです。