プログラミング
初心者
翻訳
新人プログラマ応援

まずはじめに

 こちらの記事は、The Dangers of Learning Just Enough, Why "Just Enough" Is Quickly Becoming “Not Enough”という記事の翻訳記事になります。長いです。

この記事を紹介した理由は、

  • 自分がエンジニアになるにあたって重要視していた部分が綺麗に言語化されていたこと
  • 近年のプログラマーの急増に関して、自分と同様の意見を述べていたこと

が理由です。
エンジニアを目指している方を脅したいわけではありませんが、これからエンジニアという道を選ぼうとしている人、エンジニアとして働いでいて、現状に疑問を抱いている方に読んで欲しいと思っています。

基本的に原文に忠実に翻訳したいと思っていますが、重要な部分については意訳しています。
もっといい表現があればぜひ指摘していただきたいです。
記事中で頻出する”Just Enough”は、「ちょうど十分」と訳しています。

”getting a foot in the door"の精神

 人は新しい領域や新しいキャリアに乗り出す時、しばしば”getting a foot in the door”(日本語でビジネスの機会を得たという意味)と言っている。特にプログラミングに関してよく使われている。

 ハイテクな業界は、インパクトのある仕事であり、挑戦的な問題に挑めること、給料の面などでも非常に魅力的である。
ただ、その業界に入っていくことと、その業界で最高な仕事に就くことは別問題である。業界内の競争は激しく、新しい知識を身に付けるには時間を必要とし、就職活動は大変である。
 結果として、一般的な技術を身に付けたい人々、特にプログラミングを身に付けたいと考えている人たちは、しばしば前述した“getting a foot in the door”の考えを取ってしまいがちになる。

 「ちょうど十分」に学ぶことは、あなたが仕事に就くのに役立つかもしれないが、キャリアのスタートとしては正しい方法ではない。良くないプログラミングジョブは快適ではないし、後々より良い仕事に就くための経験を与えてくれるのものではないからである。
 また、市場の変化はそういった転職をより困難にする。これはしばしば見落とされているが、一つの真理である。この真理は、私が様々な仕事の違いを探ることに時間をかけることが重要と考える理由であり、あなたが、「ちょうど十分な」知識で仕事を見つけ、「ちょうど十分」な習熟度でキャリアをスタートさせる理由でもある。

「ちょうどいい」仕事の台頭

 そういった問題の外にいる人にとっては、プログラミングはいつもある種の神秘的なものである。まるで許された人だけが行う暗い芸術のようにも思われる。そういったプロフェッショナルな人々によってプログラミングは不可侵的なオーラを発している。

実際には、プログラミングは論理的な追求である。それ自体は容易ではないが、志を持って努力することで学ぶことは可能だ。しかし、プログラミングの難しさはそういった理解を得ることはできていなかった。その結果、プログラミングをする人は少なくなり、比較的簡単なプログラミングスキルが着実に高給を必要としていた。

それでは「ちょうど十分な」仕事とはなんだろうか?なぜ近年業界を席巻していうるのか?私の見解では、Web業界に関しては、この台頭を以下のように定義し、説明することができる。

  • 「ちょうど十分な」仕事は、基本的なランディングページの作成とメンテナンスに過ぎず、多くの場合、あらかじめ製作された作品で行われ、深い考察については限られた理解しかできない
  • 反対意見として、「ちょうど十分な」仕事は、完全なアプリケーションやシステム設計が必要な仕事ではない(これらの仕事には常に高い専門性を必要とするからである)
  • 「ちょうど十分な」仕事は、比較的容易に参入できる。しかし、この比較的浅いスキルセットであっても、歴史的には多くの雇用者を脅かすほどのものであった。結果として、スキルに見合わない高給与は長い間標準的であった
  • 「ちょうど十分な」仕事とは、エンジニアリング中心のビジネスだけでなく、事実上すべてのビジネスがウェブの存在を必要としているときに、電子商取引やソーシャルメディアの台頭に対応して発生していった

 これらの要因が相まって、「ちょうど十分な」プログラミング知識の大幅な過大評価に繋がっていった。また、獲得が比較的容易なスキルが大幅に過大評価されると、市場が活気づくようになる。これはまさにコーディング・ブートキャンプの登場で起こったことである。突然、単純なコーディングスキルの市場が発生し、起業家は人々に数カ月で仕事を得るのに十分なプログラミングを教えることができることに気づいた。そして、意外なことに、そのチャンスで多くの人がそういった市場へ飛び込んでいったのである。

 この点を他のほとんどの分野と比較すると、「ちょうど十分な」モデルが支持されているのかが明らかになる。あなたがプロのミュージシャンになりたかったと想像してみてほしい。あなたがギターを弾くことを学ぶのに10週間を費やすなら、おそらく、スケールやコード、そして基本的な音楽理論について多くを学ぶことができる。これは音楽知識のランディングページ(Webの訪問者が最初に見るページ)に相当しており、重要だが、それはまだ単なるプレハブ作品に過ぎない。しかし、このレベルの音楽知識でギグを予約できるだろうか?おそらくそうではない。しかし、この現象は、2010年代初めにプログラミング技術をもつ大量の労働者を生み出すきっかけとなった。

自動化された選択肢の登場に伴い、企業は基本的なHTML/CSSおよびJavaScriptスキルを持つ人材を必要としなくなった。

 最初は、ブートキャンプモデルが非常にうまく機能していたが、結局のところ、一般人からプロのプログラマーに移行するためのハードルが非常に低かったからである。多くの場合、10〜12週間は「ちょうど十分な」プログラミング知識を得るのに十分だったが、プログラミング・ブートキャンプの急速な成長は、プログラマーの市場が変化する率を考慮していなかった。自動化された選択肢の登場に伴い、企業は基本的なHTML/CSSおよびJavaScriptスキルを持つ人材を必要としなくなった。その結果、求職者はランディングページ型スキルよりも多くの技術を要求するようになった。これは、多くのコーディングブートキャンプが、

  1. すでにかなりの経験がある、もしくは
  2. 最も基本的な仕事だけを望んでいる人間

に焦点を当てるようにモデルを完全にシフトした理由でもある。
 しかし、プログラミングの難しさを企業に誤って知らせてしまった、プログラミングの不浸透性と同じように、今や「十分な」プログラミングに対する雰囲気は、良い仕事を得るために必要なことを誤って伝えてしまっている。
 前述したように市場は変化しているが、熟知した経験豊かな開発者がプロ​​グラマを志望する人間にするアドバイスはそうでは無い。だが、それでも多くの人々は、“just get your foot in the door”、「とにかく踏み込んでみなよ」とアドバイスしている。結局のところ、これが始まりであり、そのアドバイスは今日の初心者にとっては実に有害なものである。

「ちょうど十分」が「十分」ではなくなる

 間違いなく、今日のソフトウェアデベロッパーは、歴史上もっとも必要とされている。実際には、現在必要とされている仕事の数と、それを満たす資格のある人の数に大きな隔たりがあるからである。しかし、重要な違いは、これらの仕事は「ちょうど十分な」仕事ではないということだ。開発者の雇用市場はわずか数年前から大幅に進化している。理由はさまざまだが、いくつかの重要な点について言及したいと思う。

過密:今日の市場は、ジュニア開発者があまりにも多く、シニア開発者が不足している。ランディングページを作成し維持する能力はもはや仕事を得るには不十分であり、今やプログラマは複雑なアプリケーションを設計し実装する能力をもつ必要がある。

新しいツール:ランディングページ、ブログ、コンテンツ管理システム、または完全機能のeコマース市場を必要とする企業は、開発者を雇う必要がなくなっている。企業は代わりにWix、Weebly、Wordpress、Shopifyのようなものに非常に低コストで替えることができる。プログラミングの専門知識は必要ない。

競争:これまでは、ランディングページ型のスキルだけは十分な生活を送るだけでなく、それらの経験を元によりよい仕事に就くことも可能だった。しかし前述の新しいツールの出現により、多くの開発者がより良い立ち位置に移行しようとするあまり競争が激化している。

Tech業界は、多くの点で容赦のない業界である。それは急速に動き、適応しない人々の後ろに残る。技術の変化はすでにいくつかの低レベルのプログラミングジョブを排除しており、その技術が向上するにつれて他の低レベルのジョブも危険にさらされることになる。 「ちょうど十分な」雇用が次の景気後退の中で最初の犠牲者になるという事実は言うまでもない。

仕事とその仕事の満足度の関連性

 市場の条件はさておき、「ちょうど十分な」仕事には別の問題が存在する。長期的な仕事の満足を提供しないということである。プログラミングの不浸透性のもう一つの不幸な副作用は、「何が良いプログラミングの仕事になるか」という問題についての理解が不足していることだ。
 テクノロジーのあらゆる仕事が刺激的で、挑戦的で、充実しているのであれば素晴らしいことではあるが、そう単純ではない。真実の一つとして、プログラミングの仕事の多くはひどく恐ろしい。場合によっては、仕事のものは純粋に賢明であったとしても、外部からは評価されず、雇用に見合っていないと判断されるようなことも少なくはない。

これから参入しようとしているプログラマにとって、プログラミングとソフトウェアエンジニアリングが「Cost-Center」ではなく「Profit-Center」である企業で働くことを目指すことが重要だ。 つまり、同社はコスト削減を目指すのではなく、プログラミングとソフトウェアエンジニアリングに投資することを目指していることに注目すると良い。

Profit-CenterとCost-Centerの違い

 プログラマとして、エンジニアリング部門がProfit-Centerの企業で働くことと、Cost-Centerの企業で働くこととの違いを考えてみよう。

Profit-Center

・同社の主力製品はエンジニア駆動型。
・会社の利益はプログラマーの仕事に直接結びついているため、プログラマーの報酬は高い。
・企業のリーダーシップは、高品質のコードを評価する。
・プログラマーは面白くて挑戦的な仕事に取り組める。
・プログラマーは、企業の利益をあげることによってより大きな自主性を持っている。
・同社はプログラマーの成長と教育に積極的に投資している。

Cost-Center

・エンジニアリング部門の唯一の役割は、同社の利益センタをサポートすること。
・エンジニアリング部門は収益の生産者ではなく、収益の消費者と見なされるため、プログラマーの報酬は低くなる。
・プログラマーは利益センタをサポートするのに必要な最低限の人員しか必要とせず、その結果、面白い仕事が少なくなる。
・企業はエンジニアリング部門に投資するのではなく、エンジニアリングコストを削減する方法を積極的に探している。

Profit-CenterとCost-Centerの違いは、日々の視点とキャリアの視点の両方の視点で違う。 これはプログラマーだけでなく、多くの分野に当てはまる。あなたがキャリアを変え、Techの分野に足を踏み入れようとしてる場合、この違いは、あなたの仕事の満足度に大きく影響する重要な考慮事項になる。
 これは、古いエンジニアリングの企業で働かなければならないという意味ではなく、エンジニアを会社全体のパーツの一部ではなく、会社にとって不可欠なものと見なす文化を持つ企業を目指す必要があるということを示している。
 エンジニアリング中心の企業は自然にプログラマーにとってより良い経験を提供しようとしてくれるが、そういった企業でのポストは競争が激しい。

なぜ「ちょうど十分」以上に学ぶことが満足度をあげる鍵になるのか

 あなたがエンジニアであるなら、エンジニアリングを評価してくれる企業で働くことはそうでない企業で働くより良いことは明らかだ。
 しかし、必ずしもエンジニアリングが商品である企業である必要はない。企業がエンジニアの仕事の重要性を認識し、エンジニアリングを単なるコストシンクでは無く、競争上の優位性を得るためのものだと認識しているということが重要である。
 また、そういったことを認識している企業では、手当や敬意、メンタリングや相互理解といった形で、あなたたちへのリスペクトを表してくれるだろう。また、そういった表現があなたの仕事全体への満足度にも繋がってくる。

 もちろん、これらの関係にもバランスがある。 素晴らしい企業はあなたへの評価を示してくれるが、その前にまず自分自身の価値を証明する必要性がある。一体どう証明するべきだろうか?
 それらは、自分の技量と長期的かつ一貫的なパフォーマンスを通して証明すべきであり、「ちょうど十分な」仕事のことではない。

 逆に、これらの仕事を得ること(そして維持すること)には、基本的なスキルの習得と生涯学習へのコミットメントが必要になる。 素晴らしい企業での仕事は競争が激しく、あなたがそれらの企業に貢献できる何かを持っている必要がある。
これは、あなたが常人をはるかに凌ぐエンジニアの1人でなければならないということではないが、あなたが会社の文化に適しており、チャレンジングな環境に対応できる(かつ結果を残せる)人間であることを証明するべきである。

より良い環境へ移ることの重要性

 「とりあえず初めてみる」で仕事を見つけ、仕事についている人で、前述したProfit-centerに転職することを躊躇してしまう人もいるかもしれない。
しかし、この2つの職種の間には大きな壁があり、そうやって自身のキャリアを選んでいくことは、「ハンバーガーをひっくり返すファーストフードのジョイントから始めて、一流のシェフへの道を歩んでいくこと」と同じである。そうした壁を飛び越える最速の方法は、基本的な構造化学習である。
 プログラミングスキルを持つ人々の市場は、今や活発になっている。 現在では、基本的なプログラミングスキルの過大評価は下降傾向にあり、高い能力が「ちょうど十分な」能力以上に報酬を得られる、より古典的なフェーズに入っており、自動化できる簡単なジョブは自動化されている。 この移行の結果、「ちょうど十分な」プログラミング知識が間もなく「十分ではない」状態になってきている。

一部の人にとって、これは悪いニュースのように聞こえるかもしれませんが、あなたにとってはそうではないだろう。 競争力が適切に評価され、つまらない仕事が自動化された世界は私たちにとっても良い世界になるだろう。 さらに重要なのは、「ちょうど十分な」職場からのこの移行は、一般的なプログラミング業務からの移行を意味するものではない。 ソフトウェアエンジニアは依然として非常に高い需要があるからである。 しかし、業界に飛び込んでいくには、ますますコアスキルの基礎が必要になってくる。 これらのスキルを習得するには少し時間がかかるかもしれないが、正しいアプローチの上では間違いなく必要であり、長期的に見れば十分に時間をとる価値があるといえる。 

まとめ

・エンジニアの需要の高まりによってエンジニアの数は増え、敷居は低くなり、「ちょうど十分な」学習、スキルを持ったエンジニアが増えていった
・しかし、自動化などに伴って求められるスキルは高くなっている
・その結果、エンジニアの需要と供給が釣り合わなくなり、いままでの「ちょうど十分な」学習と知識では満足度の高い仕事を得ることはできない

最後に

 最近のエンジニア需要によってエンジニアを目指す人は増えてきているような気がするが、エンジニアとしてのその後を考えると安易に就職・転職することを簡単に勧めるのは無責任なのかもしれない。

自身も来年からエンジニアとして働き出すが、記事にもあるように生涯学習へのコミットは必要であり、一時の勉強だけではすぐに知識が追いつかなくなることは自明であると思う。

これまで散々脅すようなことを書いてきたが、エンジニアになることに対して求める見返りは人によるだろうから、ただの意見の一つとして理解していただけると幸いです。

追記:2018/10/22
Youtubeでこれらの内容に関する素晴らしい動画を見つけたのでリンクを貼らせていただきます。英語の動画ですが、CSとプログラミングは違うということを教えてくれます。
https://www.youtube.com/watch?v=EFwa5Owp0-k

Twitterやってるのでよかったらフォローしてください
Twitter:@tomiokasyogo