ソフトウェア開発には知識オタクが向いている理由
■現代のソフトウェア開発は「部品の組立て+α」である
現代におけるソフトウェア開発者の仕事というのは、全てのソースコードをゼロから自分でキーボートを叩いて書くということは殆どなくなっていると思います。
例えば僕が携わっているWebアプリケーションでは、頻繁に用いられる仕組みは「フレームワーク」としてまとめて公開されているものが数多くあります。この分野の開発者であればお馴染みですが、フレームワークが含む仕組みとしては、
- 特定のURL+HTTPメソッドを特定のコードと結びつける"ルーティング"
- アクセスしてきたブラウザごとにデータを保存し管理する"セッション"
- ロジック処理からHTML出力を分離し管理しやすくする"テンプレートエンジン"
- リレーショナルデータベースへのアクセスをオブジェクトにマッピングして抽象化する"ORマッパー"
などなど、上記は一部に過ぎず、多岐にわたります。開発者は、これらのあらかじめ出来上がったコードを利用することで、ゼロから自分で全部のコードを書くことに比べれば大幅に開発期間と労力を節約することができます。
上記のようなフレームワークに含まれないコードも、世の中には便利なライブラリとして公開されているものは豊富です。例えばJavascriptライブラリのjQueryなどが有名です。
これらの「できあがった部品」を組み合わせ、意図した動作になるよう組み上げ、それでも足りない部分は自分で作る、つまり「部品の組立+α」というのが現代におけるソフトウェア開発者の仕事で最も多いパターンになります。そのスピード感は全てのソースコードをゼロから作っていた時代とは比べ物になりません。ちなみに現代で"フルスクラッチ"と呼ばれている開発もフレームワークやライブラリは使ってたりすることが多いのでゼロからじゃないんですよね。
■ますますスピードが求められる
さて、ビジネス的な背景としても、ソフトウェア開発は「コスト」から「利益の源泉」へと多くの分野で移行しつつあり、今までは業務支援のツールが多かったのが、直接商品なったりあるいは商品価値に深く寄与するものになってきているため、ライバルよりも先に商品を提供したいという要求から開発者に求められるスピードはますますシビアになっています。
もちろん、ビジネス的に「利益の源泉」として重要になるのは前述した「それでも足りない部分」つまりオリジナルの「+α」の部分になるのですが、開発期間の時間の多くを占めるのは、実はそれ以前の部分、すなわちオリジナル部分の土台に相当する「できあがった部品を組み上げる」工程だったりするのです。
つまり、オリジナル部分に掛ける時間を確保するためには、いかに土台の部品を組み上げるスピードを上げるか、が重要になります。
■知識が生産性に直結する
そのためには「いかに部品のことを知っているか」が鍵です。特定の機能を実現するのに、とあるライブラリが応用できることを知っているかどうかで15分で完成することもあれば5時間掛かることもあります。よくプログラマの生産性は人によって100倍違うことがあると言われますが、100倍も開くのはレアケースとしても数十倍の生産性の差が出るのは誇張でも何でもなく普通によくあることです。
要するに、知識の差が生産性に直結してしまうのが現代のソフトウェア開発です。ここで言う知識とは、「知識を探すための知識」という類の知識のことです。例えばプログラミングで使うライブラリだったら、具体的なコードの書き方などはネットで検索すればいくらでも出てきますので憶えておく必要はありません。そうではなく、そういうライブラリが存在すること、そして使い方を検索するためのキーワードを知っていることが重要です。
■だから知識オタクが向いている
だから生産性を向上させるためにできる1つのことは、単純に知識の幅を広げることです。これが苦になるようだとソフトウェア開発者としては辛いでしょう。逆にむしろ気になることはつい関連することをどんどん調べてしまい、それが楽しめるようなタイプはソフトウェア開発者として非常に良い適性があると言えるでしょう。
もちろん、ソフトウェア開発に求められるのは知識欲だけではなく、ユーザがソフトウェアを使う際の背景・目的・心理状態などの具体的な状況を推定する想像力や、処理の手順や流れを分解し整理するための論理力、全体の整合性を俯瞰的に眺めて調整できるセンスなど色々あります。
ですが、現代のソフトウェア開発において求められるスピードを満たすためには、やはりソフトウェア開発には知識オタクが向いている、と思うのです。