魅力的な質問。客観的な基準に重点を置いていることが好きです。新入生に学習してもらいたい:
プログラミングの概念:最初のプログラミング言語は、関数呼び出し、反復、再帰をサポートする必要があります
基本的な考え方:最初のプログラミング言語は配列をサポートする必要があります(メモリが実際にどのように機能し、ポインタがどのように機能するかを丁寧に紹介する最初のステップ)
実用的なプログラミングスキル:デバッガーの使用方法、プロファイラーの使用方法、大規模な問題の解決方法(高レベル言語)、大規模システムの組み立て方法、問題の分解方法(問題の分解)、記述の回避方法複雑なコード、(しばしば不可解な)一連の実行可能ステートメントの背後にある意図を人間に伝える方法。
sort()のようなもののために事前に記述されたライブラリが存在するという事実、およびそれらを使用する方法-つまり、すべてを最初から記述する必要はないという事実。
第一言語の他の基準:
解釈されます(クイックフィードバックは学習プロセスに役立ちます)。
学習、テスト、デバッグを高速化するインタラクティブな環境。
学生はその言語で読むために高品質のソースコードを利用できます
「読みやすい」、「自然言語に近い構文」(SourceCodeを読みやすく、評価しやすくするため)
ポータブル(Mac OS、Windows、Unixで実行)。言語の少なくとも1つのフリーソフトウェア実装。
たとえば、「最初のOOPLとしてJavaを使用するよりも、最初にPythonを、次にJavaを教える方が速いかもしれません。」- 「オブジェクト指向プログラミング言語の比較」 とTelescopeRule
Matthias Felleisenは、初心者向けにエラーメッセージをカスタマイズしたプログラミング言語を開発しました。彼は、特定の言語の選択は、優れた設計方法論を教えるほど重要ではないことを強調しています。実際、彼は最初のCSコースをリベラルアーツクラスと見なし、批判的思考、問題解決、細部への注意を教えています。
第二プログラミング言語の基準
生徒に学習してほしいものですが、おそらくこれは第2プログラミング言語を待つことができます。
「難解すぎない」「関連する」言語。「業界で人気のある」もの
複雑性理論:現在の技術では不可能なタスクを認識する方法。
高レベルのもの:ジョブに適したツールの選び方、コンパイラーの使用方法、構造、オブジェクト指向プログラミング、関数型プログラミング、論理プログラミング、コンパイラー設計、関数の作成と操作(Lisp / MLの意味で)、並行および分散プログラミング、
低レベルのもの:ポインター演算、コンピューターアーキテクチャ。メモリ管理、スタックフレーム、アセンブリプログラミング、マシンアーキテクチャ、デバイスドライバ、およびオペレーティングシステムの設計(したがって、マシンは「侵入できない恐ろしいブラックボックスのように見えない」)
編集:私が書いた何かの要約を他の多くの人と協力して「合法的な投稿ではないかもしれない」と投稿するのは残念です。
そこで、以前の非公式リンクに、より正式な引用を追加し、フェアユースやその他のWiki著作権の問題に準拠しようとしています。
この回答は、Portland Pattern RepositoryにあるFreshmanの第一言語(2011年以外)の要約です。
(Anon 2011)多くの匿名およびその他のさまざまな著者。「フレッシュマンズ第一言語」。ポートランドパターンリポジトリ。9月27日、2011年http://c2.com/cgi/wiki?FreshmansFirstLanguage。