私は実務では茶色~緑くらいのアルゴリズムしか出てこないと思っている。
とはいえ、水色くらいあれば、そのあたりのアルゴリズムで解決可能な問題の責任を任せられるかというと、チーム開発において実態は違うと思っている。茶色の課題解決に必要なのは、水色以上のアルゴ力に加え、実務の能力、コミュニケーション力、政治力が必要だ。
前提として、何でも課題をアルゴリズムで解決しようとする姿勢が正義だとは到底思わない。実際の課題はアーキテクチャとして解決すべきものや、ハードウェア性能を見るべきもの、そもそも課題の要件定義レベルで見直すべきものが存在する。
しかし、純粋にアルゴリズムでの解決が求められる場合において、水色の実力のみでは、コミュニケーション上の問題で課題を解決できない。
水色程度だと、茶色程度の自明な問題に対して、同僚から筋が悪く性能が劣化するようなアルゴリズム案を提案されても、何故問題かの説明に十分な説明コストを払うことが要求される。
基本的なCSは習得済みの相手でも、競技経験がない相手だと何故問題か(何故自分の提案する内容の方が優れているか)が往々にして理解されないので、このコミュニケーションにはしばしば衝突が起こる。
そういった衝突は、実際のパフォーマンスの計測で押さえつけるものではない。「分からないから客観的に比較」したものでなく「自明だが理解されないので、証拠を突きつけて糾弾する」ような形になるためだ。
非競技勢は、水色に対して「お世辞でアルゴリズム凄いですよね」と言うことはある。一方で「でも上位ではないんでしょう?」という評価なので、「自分の直感とは違うけど、あの人が言ってるんだから正しいのだろう」と思ってくれる可能性が低い。ベテラン戦士であれば自身で一問も問題を解かずして「お前はデータ構造とアルゴリズムが分かってない」と非難することすらあるだろう。
そう言う意味で、茶色程度のアルゴリズムを責任を持って担当するには、非競技勢にも上位層と思われる程度の称号が必要だと思う。最も分かりやすい称号は「レッドコーダー」である。
ただ、資格で黙らせる行為はバッドコミュニケーションの典型の所業である。
上位層でない競プロerが茶色程度のアルゴリズムに責任を持つためには、まず実務能力、コミュニケーション力、政治力を鍛える必要があるだろう。
昔から、大抵の業務ケースでは可読性のほうが高速化よりも重要であると言われていて、変にアルゴリズム厨が難解コードを書くと誰も保守できない事態になる アルゴリズムにこだわる...