南極の図書館

ペンギンが寝ていた…。

優秀なプログラマが要らない理由(後半)

後半では、前半で出した2つの問題について考え、それから導かれる結論を出す。
・優秀な人には何をやってほしいのか
・それにはどのような能力が必要なのか
を意識して。

・問題1
「今から臨時チームを立ち上げる。人数は10人。要件の確認からリリースまで1年だ。」とマネージャから言われ、その中に自分も入っている。
そして集められた10人。
ここで、チームで明らかに一番業務知識があり、プログラミング能力があり、管理能力がある人間がいる。
チームとして何をやってもらうのが最適だろう。

さっくり考えて、その人にやってほしいのは「リーダー」。
個人的な理由は「尊敬できる人の指示は素直に聞ける」から。上に立つのはそういう人が嬉しい。


また、大抵は「リーダー」が「成果物の責任者+対外的な対応をする人」だからというのがある。
もちろん、スケジュール等を事務的に管理する「作業」は、出来る限りやらない。


つまり10人チームなら、以下の構成が最適と思ってる。
・リーダー(誰もが迷ったら質問できて、答えが明確なすごい人)が1
・リーダーの補佐(エクセルで進捗表を作ったり、各規約をまとめて整えたりする人)が1
・メンバー8


では、ここで求められたのは、3つの能力のどれだろうか?
そう考えると、私の印象では「業務知識」+「プログラミング能力」になる。
そして、質問を受け付けて返すということで、土台の「対人能力」には高いものが求められる。
従って、質問の答えは、抽象的に言うなら「リーダー」で、具体的に言うなら「全フェーズでの相談役かつ責任者」になる。

・問題2
上記の臨時チームを作って半年経過。予定より遅れている。
仕方がない、と一人だけ増員が可能となり、運よくスーパーマンが入ってくれた。問題1で出てきたスーパーマンと同程度の能力だ。
さて、何をやってもらうのが最適だろう?

前提として、フェーズの比率は(分析+要件:設計:開発:テスト+移行)=(1:1:1:1)とする。
(※ジャンルによって全然違うので簡単に考える。)
それを踏まえて、半年で予定より遅れているということは、設計の後半である。
または契約上仕方なく、穴がある設計書を納めたところかもしれない。
さてここでスーパーマンが入った。何をしてもらおうか。


…。
問題1,2の作り方があまり良くなかったと反省してるのだが、何をやってもらうかという問題じゃなかった。この状態ではいくつかの機能の担当となってもらい、プログラムを書いてもらうしかない。


では、それにどのような能力を求めるか。
採用するときにも思うのだが「プログラミング能力」よりは「業務知識」を優先する。理由は、過去の経験から。
それは心情的には嬉しくないのだが、業務アプリで書くコードなんてレベルが低くて誰でも(私でも)動くものは書けてしまうというのがある。(スケルトンとかあるし。規約は大抵「低レベル」な決めごとである。「あれを使うな」とか。)
ハードの性能も上がってきたため、「勘違い」したコードを書かれない限りは、問題が無いのだ。
ボタンを押してから5秒も反応がこない、なんてのは問題だが、それはテストで見つけて、そこだけ「有能なプログラマ」が修正する。
従って「ロジック」を整える人より「inとout」の「意味」がわかる人が欲しい。
コードを何行削れました。とか、呼び出しをいくつ減らしました。とか。それは必要なんだけど、クリティカルな要素ではない。
なぜここでこの値を返すのか。それは業務で言うとどこで使われるのか。それが分かる人の方が「やりやすい」。
それは設計書に書いてあるから読むだけだ、といいたいのだが、設計書にも会社ごとに特徴があって、それを完全に読み解くのは難しいと考えている。
(だからこそ、例えばA社が欲しい人材は以前にA社の仕事したことがある人間、ってことになる。)


…。
困ったことに、結論としては「優秀なプログラマは要らない」ということだ。日本の業務システムでは。


作るコードが貧弱すぎるから、「オフショア」とか「コーダー(未経験可)」とか「ワーカー(簡単なお仕事です)」とか、そんな募集もあるのだろう。
そんな中でどうするか、というと「作るシステムの業務知識を持つ」のが日本で戦う最低条件であり、それにプラスして開発の経験が豊富であればよいことになる。
今回の切り口以外でも、いくつもいくつも理由があり、私がなりたいものは決まっている。

(身内にも外にも)対人が強くて、業務知識が豊富で、プログラミングは必要とされるレベルよりもかなり上である人。

書いてみるとまだまだ抽象的だけど、そういうものを目指している。