コンピュータとサイエンスという2つの言葉について考えてみましょう。 前者は、電子カルテの普及による救命効果から、Twitterでいつでもバーチャルな酒場の喧嘩ができるようになったことまで、世界に多大な恩恵をもたらしました。 2つ目の言葉、Scienceは、ポリオワクチンや月への旅行など、挙げればきりがないほどの大きな進歩をもたらした知的運動を表しています。
この分野が成果を上げていないわけではありません。 新しいプログラミング言語、賢い検索アルゴリズム、マシン ビジョン アルゴリズムなどの素晴らしいアイデアが詰まった、ペタバイト級の LaTeX ファイルが存在します。
問題は、私たちの中で本当に必要としている人はほとんどいないということです。 ある友人は、CSを卒業した人を採用せず、物理学者や会計士などの数学に精通した人だけを採用して、開発チームが成功するのを見たと告白しました。
CSの学位が悪いというわけではありませんが、私たちの多くが解決しなければならない問題には役立たないということです。
理論は気を散らし、混乱させる
コンピューター サイエンティストの多くは元々数学者であり、定理にとらわれた考え方がこの分野に浸透しています。 ある理論家によると、数学的な証明はすべてプログラムに過ぎず、少なくとも彼の頭の中ではその逆になっているそうです。 彼は、仕事をするコードを提供することにはあまり興味がなく、自分のコードが正しいことを証明することに興味があるのです。
CS専攻の学生が、NP完全性やチューリングマシンの知識を得ずに卒業するのは珍しいことです。 ある生物学者が私にDNA配列照合の問題を解いてくれと頼んできたので、私はそれがNP完全、つまり解くのに非常に長い時間がかかる問題のクラスであると主張して彼に返しました。 彼は気にしませんでした。 とにかくこの問題を解く必要があったのです。 そして、ほとんどのNP完全問題は、ほとんどの場合、とても簡単に解けることがわかりました。 アルゴリズムを台無しにしてしまうような病的な事例がいくつかあるだけだ。
同じ問題がチューリングマシンでも起こります。 従順なCSの学生は、Riceの定理のような虚無的な結果を学びます。これは、コンピュータのアルゴリズムを分析することは、実際にはまったくできないことを示しています。 しかし、チューリング・マシンは、通常のマシンがどのように動作するかを示すモデルとしてはかなり悪く、コードを使って賢いことをするソフトウェアを作るのは非常に簡単です。
学術的な言語はほとんど使われていない
学術界が俗物根性と難解な解決策への愛を育むことに驚くべきではありません。 どの分野でも同じことが言えます。 あるMITの卒業生に好きな言語を尋ねたところ、彼は誇らしげに「きっと私には何もわからないだろう」と言いました。 しかし、少し追い込んでから、彼は「CLU」だと言いました。
言語に夢中になっている人たちの中には、素晴らしいアイデアがたくさんありますが、時には、そのようなアイデアが混乱や混乱を引き起こしてしまうことがあります。 あるチームメンバーが奇妙な機能を気に入り、それをコードベースに含め始めたら、他の全員がそれを学ばなければなりません。
これが、Google が Go を構築したときに低い道を選んだ理由です。 制作者は、言語は構成要素が少なく、できるだけ短時間で学べるシンプルなものであるべきだと主張しました。
多くの CS 教授はプログラマーではなく数学者です
ほとんどのコンピュータ サイエンス学科の汚い秘密の 1 つは、教授のほとんどがコンピュータをプログラミングできないことです。 彼らの本当の仕事は、講義をしたり、助成金を獲得したりすることです。 彼らはスプレッドシートや助成金の提案書を理解しているだけで、実際に研究をしているわけではありません。 だからこそ、神は彼らに大学院生を与えたのです。 彼らの多くが実際にコンピュータをプログラムしたのは、彼ら自身が大学院にいたときだった。
多くの必須科目はほとんど使われていません
データ構造は、学生がコンピュータ サイエンスで2番目に取るコースのメイン トピックであることがよくあります。 しかし、残念なことに、私たちはほとんどデータ構造を使用していません。 私たちは、オブジェクトのハッシュ テーブルに物事を置くか、思考を代行してくれるデータベースにそれらをプッシュします。 アルゴリズムの複雑さについて少し考えることは誰にとっても有益ですが、B-treeやリンクリストを気にする必要がある人はほとんどいません。 それだけでなく、多くの人が、自分でデータ構造をいじるよりも、標準ライブラリを信頼したほうがいいと気づいています。 誤りを犯すのがあまりにも簡単だからです。
古典的なカリキュラムでは、もうそれほど重要ではない科目の例は他にもたくさんあります。 コンパイラは複雑で不可欠ですが、それを書いているのは、1 学期のコースでおもちゃのバージョンを作ることを強いられている学生だけです。
数学モデルは私たちを間違った道に連れて行きます
データベース理論を学んだことのある人なら誰でも、Boyce-Codd Normal Formの巧妙さを知っているでしょう。
ほとんどの開発チームは、パフォーマンスを向上させるためにデータベースを「非正規化」することをすぐに学びます。 言い換えれば、賢さをすべて取り除いて、データを 1 つの巨大なテーブルに固めるのです。 醜くて無駄が多いですが、驚くほど高速になることがよくあります。
教育を実践し始めると、多くの開発者は、CSコースで学んだ数学的な巧妙さのすべてを学び直すのに数年を費やします。
Institution Breeding Arrogance
私たちは皆、自分が正しいと思っていますが、学歴の本質は、権威を持って自分の優位性を主張する能力を卒業生に与えるように設計されています。
私が一緒に働いていたある人は、部署に持ち込んだ「コーディング標準」を気に入っていて、コード レビューの際にその標準を引用する機会を何度も設けていました。 これらの標準は、どこに空白を置くかについてのうるさい意見に過ぎませんでしたが、彼が学術的な正確さでそれを語り始めると、コード レビューで棍棒のように振り回し始めました。 空白が違うコードには、「このコードは基準を満たしていない」と不吉なことを言うのです。
多くの現代的なスキルが無視されている
現代的なスキルの多くは、多くの学科でカバーされていません。 Node.js、React、ゲーム デザイン、クラウド コンピューテーションを理解したいと思っても、平均的なカリキュラムにはほとんど含まれていません。 つまり、Node.jsやReactといった言葉が忘れ去られた後もコンピューティングの一部となるような、レースコンディションのような深い概念が含まれています。
コンピュータ サイエンス学科では、平均的な従業員の1日を支配する詳細について浅い知識を持たずに、基本的な課題のいくつかを理解している深い思考の持ち主を輩出することがよくあります。 だからこそ、企業は物理学研究室でPythonを使って機器からのデータストリームをマッサージしただけの人を雇うことにも価値を見出しているのです。
学術的な最先端はずっと先
機械学習や人工知能は大流行しており、多くの人が競って実験しています。 しかし、CS部門では何十年も前から研究されています。
終身雇用は自己満足を生む
終身雇用制度の背景には多くの素晴らしい理由があり、その保護を受けているほとんどの教授は、昔の自分の貢献に対してすべての利益を享受しています。 問題は、変化の激しい分野では、今日の学生は10年ほど前の洞察力を必要としないということです。
さらに、教授たちを遠ざける気晴らしもあります。 ある在職中の天才教授は、様々なポーカートーナメントと、彼を帰らせたバッドビートについて、延々とブログを書いているようです。
インテリ主義は結果を出さない
ある在職教員に、私の学生が Angular と React の講義を数回受けたおかげで就職できたと話すと、彼は微笑んでこう言いました。”
それは結構なことですが、多項式天使と指数天使のどちらがピンの頭の上で踊れるかを考えることに50万ドル近くを費やすことを正当化できる人はそれほど多くありません。 リベラルアーツの伝統は素晴らしいものですが、実用的な知識を蔑ろにすることを助長します。 深くて永遠の真理を追求しているのです。 しかし、あなたの会社が来週の締め切りまでに何かを出荷しなければならないとき、誰も永遠の真理についてへそ曲がりになって考えている暇はありません。