全7834文字

 今回日経クロステックにて、この連載を始める機会をいただき、ソフトウエアエンジニアとしての半生を振り返るとともに、筆者がソフトウエアエンジニアとして生きていく上で切っても切れないテーマは何か?を投げかけたいと思います。

 「経営」という言葉を聞くと物々しい感じもしますし、距離を感じる方も多いと思いますが、筆者にとって「経営」とは純粋に「商売」とは何か?を考えることでもあります。コードを書くことによって自分が得る報酬の源泉とは何か?という疑問は誰しも考えたことのある身近なテーマではないでしょうか。

 ソフトウエアエンジニアに限らず、どのプロフェッショナル職においても、仕事は「経済活動の一部である」という避けて通ることができない事実にも直結している話だと思います。少し大げさに言えば、「経営」とは「いまこの単体テストを書くべきか否か?」という極めてささいかつ日常的な意思決定においても影響を及ぼす概念でもあります。

 今回はソフトウエアエンジニアがなぜ「経営」を意識すべきか、また、なぜ筆者が「経営」に着目するようになったのか、自己紹介ついでにお話ししたいと思います。

「コーディング」はソフトウエア開発においては一作業にすぎない

 ソフトウエアエンジニアの仕事とは何でしょうか。皆さんが真っ先に思い浮かべるのはコーディングかもしれません。コーディングはソフトウエアエンジニアにしかできない作業ですので、もちろんそれ抜きでは語れません。しかし実際ソフトウエア開発の1サイクルを俯瞰(ふかん)してみると、コーディングだけでは完結しないことに気付かされます。

 開発する内容を理解してコーディングする前に、要件における不明瞭な点や矛盾する点を念入りに確認したり、場合によっては利用者やステークホルダーとミーティングしたりします。コーディングが終わったあとも結合テストを行い、複雑なリリース作業のチェックリストを作成して安全な出荷のための計画づくりも仕事の一部です。

 アプリケーションを安全かつ安定的に稼働させるためのサーバーインフラの設計・構築・運用も必要です。いまでこそクラウドコンピューティングが当たり前になりましたが、十数年前は筆者のように小規模でウェブアプリケーションを開発していたソフトウエアエンジニアにとっては、物理サーバーの発注や設置作業までもが納品までの責任領域でもありました。

 もちろん大規模な開発組織では分業しますが、監視の仕組みを作ったりいざというときに備えて冗長化したり、トラブルへ迅速に対応できるようアラートの仕組みを作ったり、それらを運用するための組織や環境を整えたりする必要もあります。金融や医療の現場で利用するミッションクリティカルなシステムであれば、そういった非機能要件はさらに厳しいです。

 ウェブアプリケーション開発固有の脆弱性もあり、特に不特定多数が利用するようなサービスであれば、攻撃を受けないか、利用者のデータが盗まれて悪用されないか等を定期的に診断する必要もあります。

 冒頭に触れた「コーディング」という作業は、ソフトウエアエンジニアリングにおける象徴的な作業ではあるものの、ソフトウエアのライフサイクル全体を俯瞰して眺めると、「コーディング」はほんの一部でしかないことに気づくと同時に、当たり前の機能を当たり前に提供することの難しさがわかるかと思います。