プログラムの生産性を高めるためになにを勉強するか

用語は形式的なものではなく感覚的なものであることをお断りしておきます。

言語・フレームワーク・プラットフォーム

まず最初に触れるものでとっつきやすい。何か使えないことには話になりません。多くの人が、勉強というとまずここ。
何かすでにつかえる人が新しく勉強することは、生産性をあげない。そのプラットフォームを初めて採用するときの準備が減らせる。どちらかというと仕事の選択肢を増やす感じですね。
深く知ることは、最適なコードを書きトラブルを減らしトラブルが起こったときの対策も早くなるので、生産性があがります。ただ、ある程度の深さ以降は生産性への寄与度がさがるので、その点では深くまで勉強する必要はありません。


プロダクトの使い方なので、プロダクトの寿命が勉強成果の寿命です。実際に使わないものの勉強は無駄になるし、使われなくなったら無駄になる。寿命もそう長くないです。
プログラマは勉強してもすぐ使われなくなるし新しいものもたくさん出てくるから大変」とかいうときは、ここの話。
つまるところは、ぐぐる量が減らせるという、暗記問題。


それでも、何かひとつは深いところまでちゃんと勉強しましょう。そのプロダクトが廃れても、「ひとつのプロダクトをとことん勉強した」ということそのものが力になります。

開発ツール

それなりにプログラムできるようになったら目がつくところ。バージョン管理、タスク管理、テストフレームワークなど。
作業の無駄を減らしてくれるので、生産性があがります。ただ、組織全員で使うとなると
同じ分野のツールなら、どのツールの操作方法も似ているので、勉強が無駄になりにくい。


慣れの問題。使えば慣れる。使えるものは使いましょう。
あと、インターネットだけで勉強できるのは、だいたいここまで。「勉強はネットでできるから本いらない」って言ってる人は、これ以降の勉強してない。

開発手法

設計手法とか、プロジェクト管理技法とか。
開発ツールに慣れてくると気になってきます。


勉強して何かやってる気になるけど、生産性としては効果を出すのが非常に難しいです。一般的に手間が増えるので、それを相殺するメリットを得るまでに時間がかかるし、なにより、メリットが得られないハズレもあります。
ハズレを引くと、いろんな意味で痛い。
ただし、新しい開発手法もそれまでの開発手法を踏まえたものになるので、勉強が無駄にはなりにくいです。


宗教であり、通過儀礼です。
開発手法にハマることは、開発者が人生において一度はかかるハシカのようなものです。治るまでとことん勉強しましょう。

ソフトウェア工学

開発手法や開発ツールをより抽象化した概念の話。
開発手法に挫折したころ気になってきます。
手法やツールは、ソフトウェア工学の概念を勉強するための道具として、ひとつの事例として勉強するほうがいいです。たとえばGitの勉強をするときは、Gitの操作方法を勉強するのではなく、Gitを通してソースコード管理を勉強するというふうに。設計手法も、その設計手法を通してソフトウェアの設計とは何かを勉強するのがいいです。


手法は必ず想定組織・開発対象があり、そして必ず自分たちとはズレています。開発手法のところで「ハズレ」と書いたものは、著しく自分たちの環境とズレているものです。適切な手法を選んでズレを自分たちで解消するしかありません。
つまりは、多かれ少なかれ自分たちで開発手法を編み出す必要があります。その力になるのソフトウェア工学だと思います。


ただ、生産性をあげるためには、個々人の知識だけではなく、組織に織り込んでいく必要があります。
手法をとりいれて失敗して改善して、という実践が必要です。失敗してもくじけない強い心が必要。

コンピュータサイエンス

アルゴリズムやコンピュータアーキテクチャ、ネットワークなど。
勉強して意味があるかどうかわからないし、なかなか勉強しにくいです。
でも、実は一番汎用的で強力。勉強すればそれが無駄になることはない。使われなくなることはないし、どんどん新しいものが出てくるということもありません。


ここまで出たものは、いかに最短距離を進むか、積載量いっぱいまでいかに効率よく積むかという話です。コンピュータサイエンスの勉強は速度を高め積載量を増やします。やればやっただけ生産性があがっていくと思います。ただし、そのあがりかたはかなりゆるやかで実感もできない。いつのまにか、なんだかプログラムの組み方が変わっています。


勉強には努力が必要です。努力と思わず勉強できるのが理想とはいうけども、1ページ1ページが重くなかなか読みすすまない上に分量も多い。
睡眠法だととらえるのがいいですね。横になって目を通してたらすぐ寝れる。

政治力

組織で開発する以上は、生産性をあげるために政治力が必要な場面も出てきます。
でも、ズバ抜けた技術力があれば、政治力とかふっとぶので、気にしなくていいと思います。