この質問は私に尋ねさせます - 改良された近代的な言語が無料で利用できるのに、なぜ大学はまだ Modula2 のような言語で教えているのでしょうか?
たとえば、まだパスカルを教えている大学はありますか? というか、30年前は良かったけど…今は?なんで?
Java、C#、Haskell ではないのはなぜですか?
関連: 今でも LISP を教えることは逆行ですか?
これは重複した質問ですか? そうでない場合は、コミュニティ wiki のトピックにする必要があると思います。
この質問は私に尋ねさせます - 改良された近代的な言語が無料で利用できるのに、なぜ大学はまだ Modula2 のような言語で教えているのでしょうか?
たとえば、まだパスカルを教えている大学はありますか? というか、30年前は良かったけど…今は?なんで?
Java、C#、Haskell ではないのはなぜですか?
関連: 今でも LISP を教えることは逆行ですか?
これは重複した質問ですか? そうでない場合は、コミュニティ wiki のトピックにする必要があると思います。
The university's job is not to teach you a programming language, it's to teach you programming concepts. The language they use is only relevant in terms of the teaching material they have already generated or use from other sources.
I imagine that redoing a curriculum is something like rewriting a large application - something you do only if you have a compelling reason, and even then you think twice about it.
改良された最新の言語 (Java、C#、Haskell) は無料で利用できますか?
「改善された」とは、強力で、外部ライブラリとフレームワークを搭載し、非常に複雑であることを意味しますか? 初心者の学生が簡単に迷子になるような、曲がりくねった小さな機能の迷路がありますか? そして、それらが失われると、初心者にはおそらく理解できないエラーメッセージが表示されますか?
優れた大学は、時代を超越した真実と 50 年後も通用するスキルを教えることが私たちの仕事であるため、その時代の一般的な言語を教えなければならないというプレッシャーに抵抗しています。(今日の大学生は、少なくとも 70 歳まで働くことを期待できます。) そのための私たちの最良のツールは、シンプルさ、シンプルさ、そしてシンプルさです。Modula-2 はかなり良い選択です。( PLT スキームの初心者向け言語も同様です。
私は Haskell が大好きで、研究で多用し、上級クラスで教えてきました。入門コースでそれを教えるのに十分な金額を私に支払うことはできません。
なぜJava、C#、...
既存のコード ベースと相互運用する必要がない場合、Java や C# は、たとえば Smalltalk に対してどのような利点があるでしょうか? 私は日常的に C# プログラマー (および元 Java プログラマー) であり、良い点と悪い点がいくつかありますが、特に際立っている点の 1 つは、C# がいかに信じられないほど複雑であるかということです。C# の構文とセマンティクスの細かい点について、ここにいくつの質問があるか見てください。トリビアを教えることで、学期全体または 1 年間を無駄にすることになります。Modula-2 ははるかに単純で、多くの問題に完全に適しています。
アセンブリも学習する必要があります。Modula-2 からアセンブリへの移行は、C# からアセンブリへの移行よりもはるかに簡単な手順です。Microsoft の専門的なツールしか知らない大勢の学生にアセンブリを教えたいとは思いません。
関連: 今でも LISP を教えることは逆行ですか?
(これには約50の異なる解釈があります...)
{before,after}低レベル言語を教えているのを見て、代わりに{after,before}を教えるべきだと思わない限り、それについて「後方」とは何かわかりません。
それが行うことを行う別の言語を提案できますか? (Smalltalk? Forth? Icon? Factor?) たとえば、実際のオブジェクト指向システム (そしておそらく Java や C# よりも強力なシステム) の設計を見たい場合は、AMOPを取り上げて全体を完全なソースコードを含む短い本。(Common Lisp は最も単純な Lisp 方言ではありませんが、C# や Java よりもはるかに単純であり、とにかく AMOP はその比較的小さなサブセットを使用します。) Java を使用してメタプログラミング、または複数のディスパッチをどのように教えますか?
または: Lisp の本来の目的は、アルゴリズムを構築するための構造として、チューリング マシンを置き換えることでした。(たまたま、実際のプログラムを書くのに非常に便利です!) アルゴリズムを教えるためにチューリング マシンを使用することをお勧めしますか? それともモデリング計算用の C# ですか? チューリング マシンは 7 タプルです。C# 計算モデルに含まれるコンポーネントの数は想像できません。Lisp はこのギャップを完全に埋めており、この分野で他に見た言語は 1 つか 2 つだけです。For が思い浮かびますが、何らかの理由で学界では普及していません。
…ハスケル?
素晴らしいアイデアだと思います。学校で習いました。繰り返しになりますが、その言語ファミリーのメンバーなら誰でもうまくいくと思います。代わりに学校で ML を学べば、これ以上悪くなることはないと思います。コンセプトは同じです。
ベルリンとシカゴで機械工学を学ぶようなものです。言語は異なるかもしれませんが、概念は同じです。しかし、言語さえも何も知らない場合は、可能な限り簡単な言語から始めるのが理にかなっています。ベルリンでエンジニアになりたいがドイツ語を話せない場合は、エンジニアリングを学び、さらにドイツ語も学ぶことは理にかなっていますが、従来の考え方では、ドイツ語のみのエンジニアリング クラスから始めるのは効果的ではありません。
考えられる理由は 2 つあります。1 つは良い、もう 1 つはそうではありません。(そして私は教授でした。)
もっともな理由は、教えを簡素化するためです。イントロの生徒を教えることは、飛び込み台でひよこの番をするようなものです。彼らが脱落する方法があれば、彼らはそうするでしょう。もし私が C を教えなければならないとしたらchar
、私は髪をかきむしるだろ う。2 番目または 3 番目のコースの場合は、別の話です。unsigned char
char*
char**
char*[]
char[10]*
悪い理由:学問の自由。彼はそれが好きだったので、私たちはある人に遠く離れた通訳言語を教えてもらいました。別の人は、スプレッドシート プログラミングを教えることを主張しました。それが「未来の波」だったからです。
この質問は少し前に処理されたようですが、何かを追加したいと思いました(私は前述の質問の質問者なので:))最初の年にModula2を学ぶ理由:すでに述べたすべての理由は別として、それは取得するためですJavaのようなものに関わる前に、基本的なもの(ポインターなど)がどのように機能するかを把握します。Javaのようなものはすべてプログラマーにはほとんど見えません:)
この質問はかなり古く、多くの良い答えがあることに気づきました。それにもかかわらず、私はチャイムを鳴らしたいと思います。
答えのほとんどは、「Modula-2 はよりシンプルであり、したがって教えたり、学習したりしやすい」というテーマのバリエーションです。これは正しいのですが、大学が Modula-2 を教えることを選択すべき理由は、これだけでは不十分です。
Modula-2 を学部のコンピューター サイエンスの学生に教えることの最も重要な利点は、それが良い習慣を形成し、規律を浸透させることです。
「Modula-2 の最も重要な利点は何ですか?」も参照してください。で:
http://modula-2.info/m2info/pmwiki.php/General/FAQ
厳密なプログラミング規律、エンジニアリングの原則の順守、および良い習慣を教えている言語はほとんどありません。現代の言語、特に人気のある言語のほとんどは、実際には逆のことを行い、悪い習慣を教えています。
Modula-2 は厳格な言語の中で最小のものであり、Modula-2 はスモール言語の中で最も厳格なものです。
この組み合わせにより、Modula-2 は、単にソフトウェア メカニックの専門学校になりたくない大学にとって最適な選択肢となります。
これは厳しいように聞こえるかもしれませんが、ソフトウェア開発者がソフトウェア エンジニアと呼ばれることを熱望しているのであれば、彼らはエンジニアのように訓練され、エンジニアのように考え、最も重要なこととして、仕事に就いたときにエンジニアのように振る舞う必要があります。
電気、機械、土木エンジニアは、何よりも安全で信頼できるものを構築する義務があります。いくつかの例外を除いて、ソフトウェアはその標準に完全には対応しておらず、古典的なエンジニアリングの考え方の欠如が主な要因です。たとえば、「早期にリリースし、後で修正する」という一般的な概念は、エンジニアリングの原則とは正反対です。
Lisp/ADA と C/Java の問題は、情報学とプログラミングの問題と同じです。1つは科学であり、もう1つは工芸です。