アランケイ:コンピューターサイエンス101の教え方

「実際に大学に行く理由の1つは、単純な職業訓練を超えて、より深いアイデアに固執することです。」




画像



この問題について少し考えてみましょう。 数年前、コンピューターサイエンス部門が私をいくつかの大学での講義に招待しました。 ほぼ偶然、私は学部生、大学院生、教授で構成される私の最初の聴衆に、コンピューターサイエンスの定義について尋ねました。 すべては工学的定義のみを与えることができます。 私はすべての新しい場所でこれを行いましたが、どこでも同様の結果がありました。



別の質問は、「ダグラス・エンゲルバートとは誰ですか?」 「どういうわけか、コンピューターのマウスに接続されていなかったのですか?」(そして、私が本当に失望したのは、私の科学コミュニティがこの質問に答えるために多大な努力を注いだためです。エンゲルバートは本当に何らかの形でコンピューターのマウスに接続されていたということです)。



問題の一部は好奇心の欠如、一部は学習に関連しない個人的な目標の狭さ、一部はこの科学が何であるかという考えの欠如などでした。



私はカリフォルニア大学のコンピューター工学科で数年間パートタイムで働いています(実際、私は教授ですが、学科の会議に出席する必要はありません)。 定期的に、時には新入生と一緒に授業を行っています。 長年にわたって、コンピューターサイエンスに対する既に低いレベルの好奇心が大幅に低下しました(ただし、プログラミングが可能でトップ10の学校で認定を受けた場合、コンピューターテクノロジーは有給の仕事への道と見なされるため、人気のレベルも上昇しています)。 したがって、C ++がカリフォルニア大学の第一言語であると文句を言った生徒は一人もいません。



私は、「コンピューター」と「科学」の両方の意味が弱い大規模な概念によって破壊され、良い言葉に聞こえるが空っぽな新しい用語を作成する状況に直面しているように思えます。 同様に破壊された関連用語は「ソフトウェアエンジニアリング」であり、これもまた「プログラミング」と「エンジニアリング」という最も独創的なアイデアを使用せず、単に組み合わせたものです(これは発明された60年代に意図的に行われました)期間)。



実際に大学に行く理由の1つは、単純な職業訓練を超えて、より深いアイデアに固執することです。 専門分野の紹介を試して、可能であれば例を使用して、学生に実際の問題に対処させ、この分野で本当に興味深く、重要で中心的なことを理解させ始めることは非常に合理的です。



1年生は、別の定規の上にある定規がどのように流量計になり、小数部分を追加することで5年生の生徒を倒すことができるかを示すと喜びます。 そして、彼らは改良された流量計の開発に喜んで参加します。 彼らは実際のコンピューターに触れました-私たちが考えるのを助ける身体的および精神的なツールです。 彼らは数字を表現するための本当に効果的な方法を学びました-学校で教えるよりも効果的です!



「蓄積」としての「追加」という堅牢なアイデアと、新しい強力な特性に似たものを組み合わせることができました。 彼らは、さまざまな問題を解決できるようにプログラムしました。



彼らもそれを拡大しました。 などなど。 これはデジタルコンピューターではありません。 そして、これは記憶に残るプログラムを備えたコンピューターではありません。 しかし、これはコンピューターの本質です。 不正行為防止メカニズムと同じように、これは一般にコンピューターとコンピューティングの本質です。



画像



Antikytheraメカニズム



すべてが手に負えなくなり、抽象化で迷子になる前に、どこまで行けるのか、どれだけできるのか? 私は、1960年代に「コンピューターサイエンスはプロセスの科学である」と言われた「コンピューターサイエンス」という用語を発明したかもしれない最初のチューリング賞受賞者であるアランペルリスの性格付けに常に偏っていました。 すべてのプロセス。



Quoraのために、これをさらに推し進めたり、宗教的な教義に変えたりしないでください。 Al Perlisのアイデアを喜んで使って、私たちの地域についてよく考えてみましょう。 そして特にこれを教える方法について。 ここで、「科学」の現代的な意味を調べる必要があります。Perlisは、古い意味(「知識の収集」など)や用途(「図書館科学」や「社会科学」など)で希釈しないことを確信していました。 ")。 「科学」の下で、彼は現象を示し、「追跡」し、予測しようとするモデル/マップを作成することにより、現象を理解しようとしました。



画像



Maxwellの方程式などが適合するように、最高のカードとモデルをTシャツに使用する方法について、いくつかのインタビューを行いました。 類推は、「橋の科学」があるということですが、ほとんどの橋は人間によって作られています。 しかし、橋が建設されるとすぐに現象が表示され、科学者はそれらを研究し、橋から多くのタイプのモデルを作成し、包括的で有用な「橋の理論」を形成することができます。 楽しいのは、新しいブリッジを設計して構築できることです(大規模で重要な問題を解決するための科学者とエンジニアの共同作業以上に楽しいものはほとんどないことを既に述べました!)



画像








チューリング賞とノーベル賞の受賞者であるハーバートサイモンは、それをすべて「人工の科学」と呼びました(そして同じ名前の優れた本を書きました)。



画像








例を挙げましょう。 1950年代、企業や大学は記憶に残るプログラムを備えたコンピューターを構築し、プログラミングを開始しました。1956年にFortranが登場した特別な瞬間がありました。以前は機械語のみで作成されていたものを含め、さまざまな分野で使用されています。



これはすべて「現象」を引き起こしました。



画像



ジョン・マッカーシー



Lispの話はもっと複雑ですが、ジョン・マッカーシーは「計算の数学的理論」を見つけようとすることに興味を持ち、すべてを完全に機能させることに決めました。 Lispを解釈するeval関数は、Tシャツに簡単にフィットします! 「プログラミングシステム」と比較して-これはごくわずかです。 さらに重要なことに、この「コンピューティングの理論」には、Fortranよりも強力な概念がありました。 それが橋の最高のアイデアでした!



Lispの小型化により、プログラミングの全体のアイデアを、より深いレベルで数回タップするだけで把握し、巨大なアーティファクトを見ると不可能に思えるレベルで考え出すことができます(これが、数学が好きな科学者がコンパクトで、強力)。 ここで使用される数学は新しい数学です。「前」や「後」などの概念を許可し、これにより「変数値の論理」が導かれ、機能依存と思考の論理的列の両方を保存しながら、そして時間の経過。 (これは今日の状況プログラミングの残酷な世界ではまだ理解されていません)。



強力なプログラミング言語およびメタ言語として機能し、独自の理論を提示できるLispは、実際のコンピューターサイエンスの例です。 それと他の同様のことを学べば、Fortranまたはその同等のものでプログラミングすることを学んだ場合よりも深く考え、自分の運命により責任を持つことができます(...プログラマーに近づくことができます!)。



コンピューティングに必要な特別なタイプの設計についてさらに学ぶことができます(たとえば、コンピューティング環境がコンピューティング環境を超えることが多い場合、通常は評価されません:格納されたソフトウェアコンピューティングの特別な特徴の1つは、プログラムの素材ではなく、新しいコンピューター用のもの)。



Perlisの定義を選択するもう1つの理由は、全体として、アルゴリズム、「構造データ」、さらにはプログラミング自体よりも、計算が多くのタイプのシステムの作成に関連していることです。 たとえば、コンピューターはシステムであり、コンピューティングはシステムであり、ローカルエリアネットワークとインターネットはシステムであり、ほとんどのプログラムはそれよりも優れたシステムである必要があります(古いプログラミングスタイルは50年代からプログラミングはそのようでなければならないようです-真実からそれ以上のものはありません)。



インターネットは良い例です-最近のほとんどのプログラムとは異なり、インターネットは何かを修正または改善するために停止する必要はありません-私たちの意図では、ほとんどの人がコンピューターシステムと考えるものよりも生物学的システムのように見えます。 そして、今日存在するほとんどすべてのソフトウェアシステムよりもはるかにスケーラブルで信頼性があります。 これは、プログラミングの初心者にそれほど強力な概念を教える前に検討する価値があります!



したがって、コンピューターサイエンスの最初の年に行う必要があるのは、最初に生徒が特にできることを考慮し、「認知的負荷」の範囲内にとどまって、本当に重要なことに到達できるようにすることです。 。 「本物にとどまる」ことは非常に重要であり、知的に正直で、学習を始めたばかりの人に適した方法を見つけることが重要です。 (悪い考えを教えてはいけません。単に単純に見えるからです-多くの悪い考えは実際には簡単です!)。



生徒は、ここで説明した多くの重要な特性を備えたものを作成することから始める必要があります。 動的に相互作用する複数のパーツなどのシステムである必要があります。 使用するプログラミング言語を決定する良い方法は、何千もの相互作用する部分を持つ何かをすることです! そうでない場合は、見つける必要があります。 できる最悪のことは、流ofさの道に生徒を配置しすぎることです。これは、大規模なアイデアを大きく制限します。 それは彼らを殺すだけです-そして殺すのではなく、彼らを成長させたいのです。



GoTo Schoolについて



画像






All Articles