仕事のある勉強とない勉強

フレンスブルガー ヴァイツェン

なんとなく思ったこと。
ここで、「仕事のある」というのは、数として、という話。
プログラマの勉強の分野を3つに分けてみる。
一つめで、一番大きいものは、データベースアクセスだったりWebなどのユーザーインタフェースだったり、プログラム外部とのやりとり。
二つめは、計算理論やアルゴリズムなど、実装力。
三つめは、ドメインを実現するための理論。
そして、番外編として、開発を効率よく行うためのプロジェクト管理。プロジェクト管理をやるのは、基本的にプログラマではないので、番外編。

で、一番仕事の数があるのが、外部とのやりとり。
プログラムは、外部とやりとりしてナンボでどんな分野でも必要になるし、外部とのやりとりの方法は状況によっていろいろ変わるし、時代のトレンドもあるので、つねに需要がある。一番仕事の量が多い。
業務アプリなどの大部分は、データベースのデータをユーザーに提示したり、ユーザーの入力をデータベースに格納するだけだったり、理論はおろか実装力もほとんどいらない。
その代わり、状況によって時代によってコロコロ変わるので、勉強しても飛距離は短い。

次に、理論。
特定業務や数学など、理論を求められることは多い。ただし、ある理論を求めるところはある分野だけ、という風に、理論と分野は結びつきが強く、ひとつの理論を勉強したとしても、仕事の量はそれほど多くない。ある程度なら、理論を知らなくても外部ライブラリやツールで実現できたりする。
けれども、一度勉強した理論が不要になることというのは少ない。

最後、実のところ一番仕事がないのが実装力。
おそらく、実装力だけを求めるような仕事というのは、皆無ではないだろうか?
ソフトウェア以外の理論もしらないしユーザーインタフェースとかわからないけど、計算量の計算は得意だし、ソートのアルゴリズムはよく知ってますとか言っても、ほとんど仕事はないだろう。
けれども、ほかの要素と組み合わせれば、非常に効率よくなるし、仕事に無駄はなくなるし、実現できるものも増える。
そして、プログラムを組んで仕事をする限り、一度身につけたものが不要になることはないし、必ず役に立つ。
なくても仕事はあるし、あったからといって仕事があるわけではないけど、実装力があれば常に役に立つ。そういうものだと思う。

そして、実際問題として一番仕事があるのがプロジェクト管理。
業務アプリのほとんどでは、データベースとユーザーをつなげることができさえすればいいので、実装力も理論もほとんど必要ない。そのかわり、多数の開発者、さまざまな開発者をうまくまわす必要がある。なので、実装力の勉強をするかわりに、管理能力の勉強をすることが求められる。で、一番仕事がある。

最近はユーザーインタフェースやらデータベースやらライブラリやら、ぜんぜん勉強してなくて、JavaScriptとかの知識なんておそらく2年以上前のものだったりする。
基本的にひとり仕事なので、管理能力があがったりもしてないしね。
勉強したのは、理論とか実装力のようなものばかりで、そうすると、なんか仕事なくなったなぁと思うのは無理がないかもしれない。