頼むからプログラミングを学ばないでくれ

編集部注:本稿を執筆したBasel FaragはiOS Engineerだ。(そう彼は思っている)。GPUプロセッサー、ロボット、AIなどへの興味の他にも、Baselはコンピューター・サイエンス、天文学、哲学に興味を持つ。かつて彼は、「the Draft Punk of people」と称された。彼はこのフレーズの意味を理解していないが、それはほめ言葉だとは理解している。

 

最近のテック業界で広まりつつある考え方がある。皆がプログラミングを学ぶべきだという考え方だ。しかし、その考え方には問題がある。プログラミングは、読み書きする能力のような必須のスキルではないのだ。

シリコンバレーにおける文化的なごまかしに常に注目している人であれば、「Learn to Code」というムーブメントを耳にしたことがあるだろう。政治家、Code.orgのような非営利団体、そしてニューヨーク市の前市長であるMichael Bloombergにいたるまで、彼らはそれを明日の労働者が持つべきスキルであると伝導してきた。

米国におけるエンジニアの需要に陰りが見えないことを踏まえれば、それはあながち間違いではないのかもしれない。

しかし、これはもっと複雑な問題だ。

私たちの世界は、人々が求められる人材に変わろうとする超競争化社会である。その世界においてプログラミングを学ぶことを経済的な救済として人々に売り込むのは誠意のないことだ。

コーディング・ブートキャンプを例にしてみよう。大勢の人々がシリコンバレーのエンジニアの成功を目の当たりにしていることから、皆が起業したり、エンジニアになることを望んでいる。HBOのドラマ「Silicon Valley」で描かれているのは、20代の若者がプログラミングをして大麻を吸いながら夜を過ごし、同時に何百万ドルものお金を稼ぐという姿だ。一夜にして何百万ドルもの資産を築いたように見える、Elon MuskやMark Zuckerbergといった人々にアメリカ人は驚嘆している。プログラミングに対する熱はホワイトハウスにまで広まったようだ。オバマ大統領は、すべての公立学校のカリキュラムにコンピューター・サイエンスの授業を取り入れようとしている。

不可解なことではあるが、プログラミングを推奨しているのはブートキャンプだけでなく、政治家が人々に奨励するものでもあるのだ。

ハリウッドからテック業界の有名人にいたるまで、社会のあらゆる人々がプログラミングを学ぶことを熱心に奨励している。その流れに逆らうようだが、私はそのコーディング・ブートキャンプにたいして懐疑的な見方をしている。私たちの社会がシリコンバレーをセクシーなものとして仕立てあげ、ブートキャンプのつやつやのパンフレットでは卒業後には給料の高い仕事を得られると謳ってある。だが現実には、多くの訓練機関はなんの認定も受けておらず、卒業後の就職に関する統計資料を公表していない。生徒が卒業後に成功するかどうかは、保証されたものではないのだ。正当なプログラマーの養成機関もあり、本当に生徒のことを想う機関も多い。だがそれ以上に多くの数の機関は、インチキ者に運営された、人々の必死な心につけ入るようなものなのだ。

誤解はしないでほしい。私もエンジニアリングやプログラミングは重要なスキルであるとは思っている。しかし、それは特定の状況下のみにおいて重要なのであるし、成功のために心血をそそぐ意思のある人のみにこそ重要なものなのだ。これは他のスキルにも言えることだ。私が人々に測量技術を奨励する度合いと、プログラミングを奨励する度合いは、なんら変わらない。

プログラミングが注目されたことにより、問題を理解することよりも、それを「正しい方法で」解決することに重きが置かれるようになった。

私が人々に測量技術を奨励する度合いと、プログラミングを奨励する度合いは、なんら変わらない。

プログラミングにおける何らかの問題に取り組むとき、まず私たちはその問題が何であるのか、そしてそれは本当に問題であるのかを見極めなければならない。その問題が本当にプログラミングで解決できる問題かどうかを考慮せず、プログラミングで解決することに固執し、「なぜ問題なのか」という視点を失ってしまっては、そこから何も得ることはできない。それがプログラミングで解決できる問題であろうと、なかろうとだ。

スタンフォード出身の私の親しい友人は、Association for Computing Machinary International Collegiate Programming Contestの優勝者になった経験を持つ。ACMチャンピオンシップに関して彼が私に語ってくれたことは、解決しようとする問題を理解することの重要性だ。

「本当に問題は存在するのか」そして「それにファインマンの原理を応用できるのか。それを他人が理解できるように説明ができるのか」ということを、あなたは自分自身に問わなければならない。

その友人いわく、エリート校の生徒でも問題の要綱を一度だけ読んでからすぐにコーディングを始める者がほとんどだと言う。

その友人がそのチャンピオンシップで優勝した年、彼はあることを学んだ。エリートでさえ「コード」という一つの武器だけで複雑な問題に頭から突っ込んでいくということだ。

一方、私の友人は問題を徹底的に理解してから初めてコードを書き始めた。問題を理解すること自体に与えられた時間のほとんどを割いたのだ。彼がコード書き始めたのは締め切りまであと数分というところだった。

彼はチャンピオンになった。

彼はプログラムを打ち込むこと自体は問題解決の手段ではないことを知っていた。冷静沈着な問題解決能力こそが、文字通り問題を解決する手段なのだということを。

プログラミングを過度に奨励することは、現存するディベロッパーの窮状を無視したものである。

テクノロジーはもの凄いスピードで変化している。

ほんの数年前まで私はObjective-Cを使っていた。しかし、今では私が書いたほとんどのプログラムはSwiftで書かれたものだ。iOSディベロッパーへの応募者のなかには、これまでにObjective-Cによるコードを一行も書いたことがないものもいる。Swiftは習得しやすく、安全で、モダンな開発パラダイムをもち、Objective-Cにはないエレガントさを持ち合わせている。新しいディベロッパーが、Objective-C独自の不完全さに対処する必要がないのは良いことだ。だが、それはプログラマーという職業がもつ現実を無視している。

シリコンバレーのロマンスに夢中になる間も、現実を直視することを忘れてはならない。

ディベロッパーたちは、たとえガイダンスが少なかったとしても素早く学ぶことを求められる。インセンティブは解雇通告されることへの恐怖だ。それはこの職業で成功するためのコストでしかないと主張する者もいるだろう。しかし、もし現存するディベロッパーたちが挫折し、取り残されているという現実があるのだとすれば、そしてその証拠があるとすれば、なぜ私たちは人々にその領域に踏み込むことを奨励するのだろうか。

昼夜Objective-Cを学び、WWDC 2014でSwiftの発表に愕然とした人はどうなるのだろうか?彼らは傍流となった言語でのプログラミングを続けるのだろうか。それとも、また始めから勉強し直すのだろうか。20代の若いディベロッパーにとっては、それは大した問題ではないのかもしれない。しかし毎月の支払いを抱え、家族を養わなければならない者たちにとっては、そのやり直しは非常に困難なものになる。

プログラミング言語は日々進化しているため、それ自体を理解することもできないまま、彼らはその問題に直面することになる。

プログラミングを学ぶことと、それを生業とすることの間には高い壁があるのだ。

本当に。

私がフリーランスとしての仕事を得るまでに、1年の独学期間が必要だった。その後も給料は微々たるものだった。コンピューター・サイエンスの学位を持っていないことを理由に、面接を受けることさえできなかったことが何度もある。

予算にあった住居を見つけられず、友人の親切心に頼らざるを得なかったこともある。何度も諦めようと考えながら夜を過ごした。しかし、進み続けるためのチカラを身につけた。

それは私の粘り強さだ。そのチカラがその時に私を、そして今でもこの領域に踏みとどまらせている。

ディベロッパーとして見習いになることすら、単純に難しいというのがこの業界の現実だ。職を得るためには、コネクションや推薦人、長い間メンテナンスされたGitHubアカウントが必要だ。機会の平等が世に広まりつつある。それにもかかわらずこの業界では、もしあなたが過小評価されたマイノリティに属していれば、人の2倍の能力を持たなければならない。単に能力を示すためだけのためにだ。

門番はいたるところに存在する。彼らはアイビーリーグの卒業生であり、「どのようにバイナリーツリーを反転させますか?」という質問が人の技術的能力を計る物差しになると信じる人々だ。彼らはホワイトボード・テストに取り憑かれたプロジェクト・マネージャーたちであり(告白:私も複数のホワイトボードを所有している)、募集要項に「5年間のSwiftプログラミング経験が必須」と書くような無知な人事マネージャーたちである。(ヒント:Swiftがリリースされたのは2014年)。良くも悪くも、まともな職とあなたの間にはこのような人々が立ちふさがるのだ。

私の知る限り、彼らのやり方に従うしか道はない。それがアンフェアなゲームであったとしても。

終わりに

もしエンジニアになりたいのであれば、誰にも(そして、その意味では私にも)その夢の邪魔をさせてはならない。そして、教育システムのような伝統的な制限を理由に夢に向かって突き進む速度を緩めてはならない。夢を叶えるための道のりに、正しい道も間違いの道もない。

しかし、シリコンバレーのロマンスに夢中になる間も、現実を直視することを忘れてはならない。この業界は借金をチャラにしてくれる魔法のカードではないのだ。時間をかけてこの業界の理解を深めなければならない。あなたは単なる「フレームワークを当てはめる」だけのディベロッパーなのではなく、問題解決者であるという事実を受け止めなければならない。新しいフレームワークや言語を学ばなければならない時が来るかもしれないということ、正式な資格をもたなければ職を得るために闘わなければならないことを覚悟しなければならない。

ソフトウェア・エンジニアリングは儲かる仕事だ。だが「コーダー」から「エンジニア」に進化するのは簡単な話ではない。

もし頑張って踏みとどまれば、それはあなたの人生を変えるだけでなく、ものごとに対する考え方も変えることになるだろう。

[原文]

(翻訳: 木村 拓哉 /website /Twitter /Facebook