10倍効率的な開発者が死につつある

4ca69aa76b948b9a24223a5378757a16.gif

[編集者注] この記事は、10 倍効率的な開発者の概念に対する著者の批評と考察です。著者らは、この概念は誤った仮定と測定方法に基づいており、個人の英雄主義への過度の依存、チームワークの軽視、ソフトウェアの品質と保守性への注力の欠如などの望ましくない結果につながると主張しています。著者は、ソフトウェア エンジニアリングの原則と実践を重視すること、チームの信頼とコラボレーションを育むこと、より合理的な評価基準とツールを使用することなど、いくつかの代替的な見解と提案を提案しています。著者は、ソフトウェア業界が成長し変化するにつれて、10x 開発者の神話は消え去り、よりプロフェッショナルでバランスの取れた開発者に取って代わられるだろうと予測しています。

元のリンク: https://blog.testdouble.com/posts/2023-07-12-the-looming-demise-of-the-10x-developer//

許可なく再配布しないでください!

著者 | ジャスティン・サールズ 翻訳者 |

担当編集者 | Xia Meng

出品 | CSDN(ID:CSDNnews)

最近、Ruby プログラマーの開発効率を大幅に向上させる Sorbet 型チェッカーを Mocktail プロジェクトに導入することにとても興奮しました。

しかし、期待された目標はまだ達成されていません。

これまでに 150 のコードコミットを行ってきましたが、プロジェクトをリリースする前に解決しなければならない問題がまだたくさんあります。これは大変な作業です。Sorbet の学習に多くの時間を費やす必要があるだけでなく、さまざまなエッジ ケースや特定が難しいバグにも直面します。その一部は型システム自体の問題であり、一部は型システムによって明らかにされるコードの問題です。革新的なことをやっているので、興奮と恐怖が交互に起こります。

私の現在の探求に加えて、私たちプログラマー全員が考える価値のある、より深い疑問があります。それは、「なぜ私はいつも自分自身に多くを要求しすぎるのか?」ということです。

4afd300faac388675f0cae7df93d2eb9.png

何が私を他と違うのか

私はプログラミングが大好きな人間です。

私はしばしば難しい問題に遭遇し、解決策を見つけるために夜も眠れなくなります。毎朝、私は新しいアイデアで目覚めます。睡眠時間が足りず、寝ていても頭で考え事をしている。そのため、生活と仕事のバランスをとることができなくなります。結局、仕事の20%しか終わっていないことに気づき、毎日このサイクルに陥って時間だけが過ぎていきました。ある日まで、問題を解決したいという欲求が、他のことを無視することへの罪悪感を上回り、急いで答えを見つけるようになりました。突破しようとしたとき、私が自分に課したプレッシャーは、厳しい上司によって設定された「生きるか死ぬか」の期限のようなものでした。

そして、普通の日曜日の午後4時、ようやく仕事が終わりました。

時々、人々は彼の活動に興味を持ちますが、通常はそうではなく、彼自身でさえもそうではありません。

郵便物を整理したり、部屋を片付けたり、髭を剃ったりすることに時間を費やします。次に、自分でスケジュールした次の繰り返しのタスクに進みます。

私の生活パターンは13歳の頃からほとんど変わっていません。革新的なアイデアを実行し、さまざまなサブタスクで忙しかったことは間違いありませんが、健康的な私生活と持続可能な仕事生活を維持するのは困難でした。

Crowe でコンサルタントとして働いていたとき、クライアント向けに 1 年間で 2,100 時間のコンサルティング業務を行っていました。これは、移動時間は含まず、年間を通じて休憩なしで週 40 時間以上に相当します。これには、移動時間と週あたり約 6 時間の管理作業は含まれません。それでも、私は夕方と週末を費やして、バグだらけで文書化が不十分な初期の iPhone SDK を使用して Apple アプリケーションを開発しようとしました。このアプリは vBulletin Web フォーラムのネイティブ クライアントであり、基礎となるテクノロジーについては何も知りませんが、完成させることに心血を注いでいます。その年、私は十分な休息をとれましたか?もう忘れてしまいました。その年の記憶も曖昧になってきました。

結局、ユーザーがわいせつなコンテンツや写真を投稿するリスクがあるとして、私のアプリは Apple によって拒否されました。残念ですが、別の製品を開発できるので、大したことではありません。

私の上記の行動を、あまり価値判断を含まずに客観的に説明するにはどのような語彙を使用すればよいのかわかりません。完璧主義者?狂信者?愛好家?この衝動を何と呼んでも、それは必ずしも良いことではありませんが、私にいくつかのマイナスの影響をもたらしました。しかし、これは、自分自身の特性や性格上の欠陥に直面したときに、受動的に抑圧したり変化したりするのではなく、積極的に解決策を模索するという私の選択の反映でもあります。

他の例:

  • ストレスを感じると、常に考えてしまいます。構築中のプロジェクトに関連するストレス反応を引き起こすことで、ある程度のコントロールを取り戻し、自分に利益をもたらす仕事について脳に深く考えるように強制します。これは、日常の非生産的で不合理な心配を隠すだけでなく、ストレス反応を利用して生産性を高め、より有益な思考を生み出す方法でもあります。この間、キーボードから離れていても、キーボードで直接作業しているのとほぼ同じくらい効率的に生産的な思考を生み出すことができます。

  • 私の聴覚はあまり良くなく、特に集団や騒がしい環境ではさらに悪くなります。(私がいつも何とか何とか何とか何とかという理由の 1 つは、相手の言葉を誤解して気分を害する危険を冒すよりも、会話を主導するほうが安全だと感じるからです。)穴埋めゲームに参加するときと同じように、誰かが何を言っているかを理解するためには背景知識を知る必要があると感じることがよくあります。長年にわたり、私はこの「空白を埋める」テクニックを革新とユーモアの源に変えてきました。私のダジャレや言葉遊びのほとんどは、実際には、私の聴解力のギャップを埋めるときに行った驚くべき発見から生まれています。私の最も革新的なアイデアは、他の人が言っていることを誤解し、後で彼らが実際には別のことを議論していることに気付いたときに生まれます。

  • 私は勉強がとても苦手で、興味が無く、気が散りやすく、反論するのが得意です。私は勉強が好きではなかったので、学ぶことを避けようとしました。何かを理解しようとしているとき、少しでも不快感を感じると、一瞬の逃避を与えてくれるものにしがみつこうとします。進歩し始めると、いくつかの前提に疑問を抱いたり、著者に異議を唱えて間違っていることを証明しようとしたりする傾向があります。しかし、ある知識点を本当に習得したら、それを上手に使いこなすようになります。つまり、あらゆる落とし穴を避けるために、あらゆる詳細を徹底的に調査します。職業的には、この明らかな弱点が私のスーパーパワーになりました。私はすべてを難しい方法で学ぶことに慣れているので、自然にアドバイザーやメンターになれます。私は間違った道をすべて探索してきたので、彼らが行き詰まる前にそれを予測し、正しい道から外れた理由を理解し、正しい道に戻る方法をガイドすることができます。

私が今日このトピックを選んだ理由は、上記の点のいずれかが私を特別なものにしているからではありません。実際、このような矛盾は 1990 年以前に生まれたプログラマによく見られ、標準になっています。

de3a8e76e117279cdf556bb31a936f95.png

プログラマーのユニークな時代

私が今説明したことは、ビッグバン セオリーやシリコンバレーの登場人物を思い出させます。私は真実を認めます:私が最高の瞬間に、私はむしろステレオタイプで過剰に作られたキャラクターです。何十年もの間、私たちはプログラマーの多くの否定的な特徴を、あたかもその関係が本質的で避けられないものであるかのように関連付けてきました。私はいつも、この固定観念はナンセンスだと思っていました。誰もがコーディングを学び、上手になれるのです。しかし今では、それは私たちが生きている時代の産物であるかもしれないと気づき始めています。

言い換えれば、独学で学び、テクノロジーに執着する、個性的なプログラマーの時代は終わりに近づいていると私は考えるようになりました。

では、なぜ私はそのような考えを持つのでしょうか?なぜなら、特定の世代の瞬間に、ソフトウェア業界に引き込まれた人々のグループがあり、私もその一人だったからです。この瞬間は、家庭用コンピュータの広範な普及と主要なプラットフォームの閉鎖の間の短い移行期間中に起こりました。情報技術の成熟の中間段階では、コンピューターはアクセス可能であり、探索可能です。コンピューターを使用するだけでも、簡単に分解できない消費者向けデバイスになる前に、コンピューターがどのように機能するかをよく理解する必要があります。コンピューターがどのように動作するかを理解しながら成長すると、プログラミングを習得しやすくなります。いくつかの幸運な偶然と、RadioShack のような企業のマーケティング戦略のおかげで、社会は意図せずして、アメリカのアッパー中流階級の少年たちに社会的移動の機会を与えてしまった。彼らは、仲間たちと屋外で過ごすよりもコンピューターと一緒にいることを好むのだ。私もその一人であり、私と同じような経験をした多くのプログラマーにも会いました。

ただし、プログラマーは常にそうであったわけではありません。2003 年に私たちの学校の男女格差についてコンピューター サイエンスの教授に質問したことを覚えています (私のクラスには女性は 1 人だけでしたが、後に専攻を変更しました)。教授は 1990 年、ハッカーやゲーマーのサブカルチャーが台頭する前、私の大学にはコンピューター サイエンスの女子学生が多数いたことを思い出しました。全国的に、女性のコンピュータ サイエンスへの入学者数は 1984 年の 37.1% のピークに倍増しましたが、その後、急激に減少しました。

プログラマーのイメージが固定的ではないと考える理由はあります。次世代のプロのプログラマーがもはやプログラミング愛好家だけで構成されるわけではないという証拠がたくさんあるからです。今日ソフトウェアを開発している人々は、以前の人々とは大きく異なります。私が言いたいのは、ソフトウェア業界は給料が高いということです。ソフトウェア業界は、本当にコンピューターを愛する人だけが魅力的な中流階級の仕事から、自分の経済的将来を確保したい人なら誰でも魅力的になれる、快適なアッパー中流階級の仕事にプログラミングを変えました。過去 10 年間に何人の転職者が「プログラミングを学ぶように」と勧められたかを考えてみてください。プログラミングが比較的安定していて高収入のキャリアであるという理由だけで、この業界を選んだ人は数え切れないほどいます。(もちろん、それは悪いことではありません!)

02150931a51da3f2a4c82b7f657cc54c.png

世代間対立の醸成

私の両親に「OK Boomer」と言う人がいるかどうかはわかりませんが、そのようなタイトルは両親を不快にさせないかもしれないと想像できます。

同様に、私の世代に特定のタイトルを持っている人がいるかどうかはわかりませんが、社会に十分な不満が蓄積されているため、誰かがTikTokでキャッチーなタイトルを作り出した可能性さえあると思います。

私の仲間の多くは、両親の家の地下室でブラウン管テレビを見て育ったので、自分たちを社会の部外者だと今でも思っています。しかし、次世代は、パーカーとサンダル(さらに靴下も!)を履いた一見均質な40代の集団が、成熟した経済の中でソフトウェア業界を巧みに掌握する姿を目にすることになるのではないかと私は推測している。

この変化について考えてみると、これらの年配のプログラマは熱心な世代だと考えるようになるかもしれません。なぜなら、彼らは再現される可能性が低い独特の開始環境にいたからです。「世代」という概念を導入すると、過去 10 年間に生じた多くの物議を醸す問題を、世代間の対立というレンズを通して見ることがより理解できるようになりました。世代に関する議論と同様に、境界は明確ではなく、多くの例外が存在し、多くの観察は特定の地理や文化 (米国やおそらくカナダなど) に限定されることに注意することが重要です。人々をさまざまな世代に分類することは、人口の変化を観察する新しい方法を提供するだけですが、それには数十年にわたる緩やかな変化の蓄積を確認するのに十分な長い期間が必要です。

例として、注目を集めている 3 つの対立に焦点を当て、世代交代というレンズを通して説明します。

情熱

8年ほど前、「情熱」という言葉が大流行したのを覚えています。これには少し不快感を感じます。しかし実際には、ほとんどすべてのことが不満を感じさせる可能性があります。

「『情熱』という言葉を禁止すると、人々は『自発的』、『高いモチベーション』、『向上心』といった他の言葉を選ぶようになるだけだ」と考えたことを覚えています。「プログラミングを仕事以外の趣味として捉えている候補者を選考すべきでしょうか?」と自問したのを覚えています。もしかしたら、チームの他の誰かが頼まれてもいないのに残業を申し出るかもしれません。おそらく、いわゆる「無制限」休暇が昇進の機会を妨げているのでしょう。おそらく、ネットワーキングには、Emacs や Vim、メカニカル キーボード スイッチ、または Hacker News のトップページに掲載されるトピックに関する昼休みの議論について、最先端の視点が必要となるでしょう。特にプログラミングが毎朝ベッドから起き上がる動機ではない場合、それはかなり苦痛な存在のように思えます。

私たちが世代交代を経験している可能性を考慮に入れると、「情熱」の問題について議論することは、ほとんどのプログラマーが常にプログラミングに情熱を注ぐだろうという仮定が間違いであり、その逆が真実であることを証明するでしょう。

職人技

これは、別の物議を醸す言葉、「創意工夫」を思い出させます。私は、その起源が、より収益性の高いソフト スキル トレーニングやコンサルティング サービスを支持して、2000 年代後半のアジャイル ソフトウェア運動の技術的側面が軽視されたことへの反動として、この目で目撃しました。見逃した方のために付け加えておきますが、創意工夫に関連するトピックのほとんどは「スロー コード」運動 (ソフトウェア開発の速度を落とし、品質と保守性を重視することを奨励する運動) に要約できます。「実行する前に考える」こと、新人プログラマーを訓練するための見習いプログラムの確立、テスト以外のさまざまな目的での自動テストの利用については、よく話題になっています。

私はこのコミュニティの積極的なメンバーであり、カンファレンスで何度も講演し、マニフェストに私の名前を載せ、耳を傾けてくれる人には常にソフトウェアの品質向上を奨励してきました。

しかし、振り返ってみると、創意工夫運動の目的は、エクストリーム プログラミングなどのアジャイル手法に伴う優れたエンジニアリングの洞察を再活性化することだけでなく、私たちほどコードの品質を気にしないプログラマーの世代が急速に増加していることへの対応でもありました。真面目なプログラマーは脅威にさらされており、それほど真剣でないプログラマーと数を比較することはできないという意見があります。チームがコードベースの内容を厳密に制御できていない場合、複雑さにはまり込み、長いビルド時間に対処できず、また別のレガシー システムに直面することになります。

この緊張点を、私たちが経験している世代交代のもう 1 つの現れとして見ると、問題はさらに明らかになります。「コードベースでどのような種類のコードを許可するか」は、「コードベースに対する権限を誰に与えるか」と簡単に混同される可能性があります。

「テスト駆動設計」のような用語は非常に多く、日常的な会話ですら修辞的な罠に満ちています。徒弟制度を重視することには、まだ解明されていない仮定もいくつかあります。それは、プログラミングする「正しい方法」は 1 つだけであり、私たちの世代がそれを独自に見つけ出し、それを学ぶ唯一の方法は先人たちの真似をすることである、ということを意味します。配管工、電気技師、専門的に認定されたエンジニアやライセンスプログラマーと同じように、ソフトウェア開発を職業として扱うことについての議論を私はよく見てきました。誰もが悪いソフトウェアを書きたくありませんが、この運動の指示に従えばコードを書くことはできません。

10x 開発者

主張を始める前に、いわゆる「10x」開発者についておそらくすでに意見をお持ちだと思います。おそらく、この記事やあの記事など、いくつかの記事を読んだことがあるのではないでしょうか。この用語は、他に 10 人ものプログラマーを生み出すことができると信じられている謎の開発者を指します。ただし、「10 倍」の開発者にとって、出力のどの側面を参照し、10 人のプログラマーのどれを参照するかについて明確な定義はありません。

「10x」の概念は、現代のプログラマーについて話すずっと前から存在していました。これは 1968 年に実施された信頼性の低い調査に由来しているようですが、その研究では、経験豊富なプログラマの中で、最も優れたプログラマは最悪のプログラマよりも (平均と比較して) 生産性が 10 倍高いという結論に達しました。私たちがそれを覚えているのは、フレッド・ブルックスの独創的な本『神話の人月』で言及されていたからです。

一部の人が他の人よりも仕事が得意であることは事実です。少なくとも 2010 年代までは、これに異論の余地はありませんでした。しかし、起業家は「10倍の開発者のみを雇うべき」と主張するベンチャーキャピタル関係者を中心にこの概念が議論されるようになり、業界関係者の間で激しい議論が巻き起こった。

これに対して、多くの人は、この公式を支持する人たちが奇妙な議論を選択し、「10 倍の開発者は存在しない」と主張していると感じました。ほとんどの人が自分の仕事の10分の1の価値しかない人々の例を挙げることができたため、これはさらなる反批判を引き起こした。時間が経つにつれて会話は停滞し、支持者と批判者を分ける明確な戦線が生じた。一方で支持者らは、高給取りのプログラマーの多くは必ずしも優秀ではないが、中には一般的な給与範囲をはるかに超える価値のある人もいると主張している(これはかつてGoogleが誇らしげだった「不当な給与」でもある)。一方、批評家は、プログラマーに関する否定的な固定観念をすべて、これらのいわゆる超生産性の開発者のせいにする傾向があり、10 倍の開発者の高い成果には、測定するのが難しい組織的および技術的なコストが伴うことが多いことを暗示しています。

しかし、振り返ってみると、この議論を世代間の対立の表れと見なしていれば、結果は大きく変わっていたかもしれません。

率直に言って、私の経験に基づくと、一部のプログラマーは他のプログラマーよりもプログラミングが少なくとも一桁優れていると私は信じています。私が解決するのに数日、場合によっては数週間かかった問題を数分で解決できるプログラマーと仕事をしたことがあります。私は個人的に、チーム全体が完成させるのに 2 週間かかるものを 1 人のプログラマーが 1 日で構築し、反社会的で持続不可能な副作用も発生させないのを目撃しました。実際、その逆に、何日も、何週間も、あるいは何か月も何の進歩も見られず、ようやく面目を保つ方法を探すプログラマーを私は経験しました。

これを認めるのは不快かもしれませんが、一般に、プログラミングに情熱を注ぐアマチュア プログラマーの方が、毎日仕事が終わってからキーボードを置くプロのプログラマーよりも優れた成績を収める可能性があると推測するのはまったく不合理ではありません。

私の経験では、この 2 つは次のような特徴によって区別されます。

  1. 飽くなき努力: 単に長時間労働を強いられるのではなく、プログラミングの練習にもっと時間を費やしたいという意欲は、本質的に動機付けられた自発的な行為であり、多くの場合、その人をより優れたプログラマーにします。

  2. 忍耐力: 仕事内容に含まれるオープン ソース コード スタック トレースの探索でも、他のチームのコードのデバッグでも、答えを追求する際に限りない好奇心と絶え間ない粘り強さを持ち、この追求がより良い情報とより迅速な進歩につながります。

  3. 黄金律: 自分の仕事の品質に誇りを持ち、卓越性を目指して努力しますが、完璧主義の罠に陥らず、必要に応じて適切な妥協点を見つけて、より優れた、保守が容易なソフトウェアを作成します。

この世代間の亀裂の文脈において、上記の 3 つの点の特徴は、前の世代のモデルに反映されているだけでなく、より広い適用可能性を持っています。これらの特性は、空き時間にプログラミングをする人、難しい問題を諦めないことに執着する人、自分の成果物の品質に個人的に投資する人に見られます。

週に 40 時間以上コンピューターの前で過ごしたくない、家族との重要な約束がある、または家事をこなしながらテクノロジーを非同期的にリファクタリングすることについて考えたくない新世代のメンバーにとって、このダイナミックな仕組みが楽しいとは思えません。彼らは常に、より熱心な同僚に追い越されます。そして、これらの同僚にとって、「プログラマー」は単なるステータスではなく、職業です。答えはありません。

それは不快な現実を明らかにするので、不快な会話です。

b2b8bde1af67b37305c1442191fd20f3.png

この現象に対処するための戦略

異なる世代のプログラマーが異なる世代に属している場合、彼らはこの業界の大きな変化を主導していることになるため、このアナロジーは、今日私たちが直面している多くの課題の共通点を特定するのに役立ちます。このアナロジーは、より多くの以前の世代のメンバーが徐々に脱落するにつれて避けられない将来の困難を予測し、計画することも可能にします。

ここまで読んで、次の 2 つの観点を受け入れたとします。

  1. 次世代のプログラマーは、前の世代ほどプログラミングへの愛情によって動かされる可能性は低く、他の理由でこのキャリアを選択する可能性があります。

  2. ソフトウェア業界は、次世代のプログラマーの特性とニーズを十分に考慮しておらず、古いモデルと手法に従っています。これにより、ソフトウェア業界が時代の流れを失い、新たな変化や課題に適応できなくなる可能性があります。

もしそうなら、おそらくご想像のとおり、ここには解決すべき問題がたくさんあります。上で検討したホットな問題のいくつかは、当時は共通の原因が見つからなかったとしても、すでによく知られていました。おそらく、さらに多くの課題が水面下に潜んで、その火花を待っているのでしょう。これらの問題を積極的に特定して解決するかどうかは、私たち次第です。

数日間考えた後、私の頭に浮かんだいくつかの質問は次のとおりです。

  • 新世代のプログラマーは、人事や経営陣からのサポートを期待する傾向が高いのに対し、前世代のプログラマーは、積極的な経営陣(キャリア開発計画、指導、目標設定など)が自らの自主性や内発的動機を低下させると考える傾向が高い。組織は両方のグループのニーズを効果的に満たすことができますか?

  • 業界では、コーディングを教える方法を誰も知らないという一般的なコンセンサスがあります。コンピューター サイエンスの学位を取得しても、プログラマーはプログラミングの仕事に就くことができません。それは常に、学生が自分の時間でそれを理解するために残された演習でした。この業界が私たち熱心なプログラマーよりも長生きするつもりなら、次世代にすべてを独学で教えるのではなく、持続可能なアプローチで次世代を教育する必要があるのではないでしょうか?

  • 無限に自発的で、自給自足し、自己規律を備えた候補者にビジネスを賭けることは、化石燃料採掘の長期的な見通しに投資するようなものです。情熱的なプログラマーを中心とした企業文化は、より多くの指導、サポート、説明責任を必要とする新世代にどのように適応しているのでしょうか?

私たちが確実に知っている唯一のことは、時間の経過とともに変化が​​起こるのが常であるため、過去とは異なる未来に向けて計画を立てることには、多くの場合、余分な時間を費やす価値があるということです。

この世代交代にはどのような課題があると思われますか? コメント欄であなたの意見を共有してください!

f18e439bf94d0db3833e14a6699406f3.gif

おすすめ

転載: blog.csdn.net/FL63Zv9Zou86950w/article/details/131862261