(職業)プログラマの生き残り戦略

ttp://d.hatena.ne.jp/satosystems/20090703/1246638153


色々なプログラミング言語を広く浅く知っていても意味はないし、
生き残れない。


自分の知らない言語を学ぶ事が新しい技術の習得に繋がるという
思考は的外れ。近年注目されるようになった言語や新しく登場した
言語は既存の普及している言語にはない概念が導入されている
ことが多いのは事実、しかし、新しい技術、それ自体は既存の
言語でも実装可能であり、その習得のために自分の知らない言語
を学んでいくという発想は明らかに間違い。


最近注目のスクリプト言語に新しい概念や技術が取り入れられて
いる場合が多いが、それらの実装はネイティブ系の言語(C,C++)
つまり広く普及している既存の言語で行われている。


多数のプログラミング言語をなんとなく習得はしているものの
1つ1つのプログラミング言語については浅く知っている程度
で生き残れる程、業界は甘くない。


A言語より実行速度の速いB言語を浅く勉強しB言語で仕様どおりに
動くプログラムを組めるBさんはA言語をある程度深く掘り下げた
AさんがB言語にトライしてきたとき、BさんはAさんに対して自分を
差別化できるモノを持たないので、B言語を軽く勉強したAさんに
追い抜かれてしまって、生存競争からLOSTしてしまうことに
なる。


プログラミング言語を仕様通りに動くモノをなんとか作成
できるレベルで理解している程度では生き残れない。


プログラマは仕様通りに動くモノを作成できて当たり前、そこ
から他者との差別化を図らないといけない。
自分を他のプログラマとどのようの差別化していくかを
考えなくてはいけない。

プログラミング言語の習得法

1つの言語を(ある程度、深く掘り下げて)マスター
するのが基本。


Ruby等のスクリプト言語Java等の習得の容易な
言語ではある程度深く掘り下げておかないと
応用が効かない。


そこから、その応用として他の言語に広く浅く手を
出す、基礎がしっかりしているので他の言語の基本を
短期間で習得あるいは理解できる。広く浅く手を出した
中で自分の琴線に触れた言語を深く掘り下げていく。


1つの言語を表面上理解しただけで他の言語に
手を出すと基礎がなっていないので、結局、
どの言語もものにならない。


Ruby等のスクリプト言語Java等の習得の容易な言語を
自分のテリトリーにするなら、実行環境の挙動をある程度
熟知しているレベル(つまり実行環境の実装の詳細について
ある程度(ソースを読む等で)理解しているレベル)まで
その言語を掘り下げていく必要がある。


実行環境の挙動を知るためにはソースコードを参照するのが
手っ取り早く、ソースコードを参照するにはネイティブ系の
言語(C,C++)のある程度の知識が必須。


仕様通りに動くモノを作成できて満足しているプログラマが五万と
いる中で、実行環境の特性を理解し、より速くより洗練された
プログラムを組めれば他者との差別化に繋がる。

新しい技術の習得

新しい技術を学ぶ場合には表面上の理解ではなく、その技術の
本質等をある程度深く理解しなくてはいけない。


また、その技術が数年後に生き残るかを感じ取る嗅覚も必要、
その技術を時間を掛けて習得したはいいものの数年後に消えて
いましたでは無意味。自分の嗅覚に自信がない場合、信のおける
他人の意見を参考にする。


仕事の都合で、数年後生き残るとは自分では到底思えない技術を
習得しなくてはいけない場合に限り、表面上の理解に止める。

プログラミング言語の選択

深く掘り下げるプログラミング言語はその言語で自分と他者との
差別化が可能か、その言語が将来的に勢力を維持できるのか、
その言語が(将来的に)飯の種になるか等を考慮して決めなくては
いけない。プログラマは趣味の言語オタクではなく一種の職人
なので飯の種になるかはかなり重要。


最初に習得するプログラミング言語の選択を間違えると
後々かなりの痛手になる。


難易度が低く誰でも容易に習得できる言語や
分野ではなんとなく組める人間が五万といる
ので、それらを選択しているときには注意が必要。
深く掘り下げるか、他の言語や分野に移行する
ことを視野に入れておかないと生き残れない。


最初に深く掘り下げるプログラミング言語C言語類似の構文
を採用している言語が無難。C言語類似の構文を持つ
言語は大体飯の種になっているので。


需要はあるものの難易度が高く習得に時間の
掛かる言語や需要はあるものの難易度は高い
分野を最初からターゲットにする戦略もある。


関数型言語は趣味として勉強するのは構わないと思うが、
将来的に飯の種になることは先ずないので仕事への転用を
を考えるのなら手を出すのは止めた方がいい。関数型言語
はその言語のインタープリタコンパイラを書けるレベル
まで自分を昇華しないと飯の種にはならない。


書ける人間の極めて少ないプログラミング言語を勉強
してもそのプログラミング言語を実務に使用する許可の
出る組織を探すのが困難なので、その言語はほとんどの
場合、飯の種にはならない。
(組織内に書ける人間が一人しかいない言語でシステム
(の一部)を実装した場合、その一人が組織から離脱した
場合にシステム(の一部)がメンテナンスできない状態に
なる、そのリスク理解した上でリスクを許容するリーダ
はほとんどの組織にいない。)


推敲中...。