2014/11/03

エンジニアなら時間を売るな、技術を売れ!

私には、目標がある。

『時間ではなく、技術を売る技術者(エンジニア)になる』


この目標を考えた当初はただの思いつきだった。
どうすれば目標を達成できるか模索していくなかで、明確な理由が固まってきたのでここにまとめる。



人月商売への疑問


IT業界以外の人には馴染みがないと思うが、IT業界(特にSIer)には古くから「人月見積」という悪しき風習がある。

簡単にいうと
  • 1人が1日でできる作業量を1人日
  • 1人が1ヶ月でできる作業量を1人月(約20人日)

あるシステムを10人体制で半年かけて完成する規模だとすると、10人 × 6ヶ月 = 60人月となり、見積額は 60人月 × 100万円(単価) = 6,000万円 になります。っといった具合。


この「人月」というのが、IT業界の一般的な見積手法であり、諸悪の根源である。


そして、この「人月」には大きな問題がある。
  • 多重下請けも相まって、利益率がクソ悪い
  • 「1人が1日で作業できる量」の定義が曖昧
  • 成果でなく労働時間が評価される

※ それぞれ何が問題か説明すると長くなりそうなので割愛する。


つまり、人月商売とは時間の切り売りなのだ。



IT業界は労働時間と成果が直結しない仕事


エンジニアが生みだす成果は、時間となんら関係ない。
それを「人月」という"魔法のことば"で密接に関係付けているのが、そもそもの間違い。


たとえばプログラマ視点で考えてみる。

ファイルを読み込み、"ERROR"という文字列が含まれている行数を出力する要件があるとする。

以下の3つの処理は全く同じことをしている。

まず、以下のコードを見て欲しい。
(C#がわからない人はなんとなく感じが伝わればOK)

// プログラマA
StreamReader sr = new StreamReader("C:\\log.txt");
try
{
    string line = String.Empty;
    int errCount = 0;
    while ((line = sr.ReadLine()) != null)
    {
        if (line.IndexOf("ERROR") > 0)
        {
            errCount = errCount + 1;
        }
    }
    Console.WriteLine(errCount);
}
finally
{
    sr.Dispose();
}

// プログラマB
using (var sr = new StreamReader(@"C:\log.txt"))
{
    string line;
    int errCount = 0;
    while ((line = sr.ReadLine()) != null)
    {
        if (line.Contains("ERROR")) errCount++;
    }
    Console.WriteLine(errCount);
}

// プログラマC
var errCount = File.ReadLines(@"C:\log.txt").Where(s => s.Contains("ERROR")).Count();
Console.WriteLine(errCount);


要求に対して提供できている機能は全て同じだが、行数が上から18行(223文字)、10行(170文字)、2行(108文字)と異なってくる。


単純に1文字書くスピードが同じだとすると、プログラマCはプログラマAの半分以下の時間で実装したことになる。
しかもプログラマAはちゃっかりバグも組み込んでおり、テストや保守を考えるとそれ以上に差が開く。
単純に時間をかければ良いモノができるというわけではないのだ。


これが、労働時間と成果が直結しない理由だ。



非効率な人ほど評価される矛盾


残念なことに日本のIT業界では、プログラマAのように産廃コードを生み出す人の方が評価される傾向にある。

なぜか?

理由は、人月商売は「働いた時間 = 売上」になるため、プログラマAのほうが売上も大きくなるから。
反対にプログラマCのように「速く、短く、効率的に」やっていると売上があがらない。


勘違いしないでほしい。


エンジニアに求められているのは、いかに短い時間で多くの成果を生み出すかであり、評価対象は労働時間ではなく成果であるべきだ。

お金も時間ではなく、成果に対して支払われるべきだ。



時間ではなく、技術を売るエンジニアになれ!


こんな矛盾だらけの仕事なんてイヤだ!
だから私は、「技術を売る技術者(エンジニア)」になる道を選んだ。


しかし、技術を売るエンジニアへの道は、長く険しく非常に危険である。

IT業界では日進月歩で技術が発展し、昨日売れた技術が今日売れなくなるなんて日常茶飯事のこと。
10年後にはなくなると言われている職業でもある。


だから本当の意味で「技術を売るエンジニア」になるためには、以下の2つが必要不可欠だ。
  • 高い技術力
  • 学び続ける強い意思

「高い技術力」がなければ、技術は売れぬ。
「学ぶ」ことをやめた技術者は、排斥される。



少しでも多くの人に「技術を売るエンジニア」になってほしいと願っている。
そうすれば、きっとIT業界は豹変するだろう。



以上

written by @bc_rikko

0 件のコメント :

コメントを投稿