初心者プログラマーが最初のプログラミング言語としてPythonを選択することをお勧めします。
誤解しないでください。私はPythonが好きです。それは大好きです!しかし、その哲学は「私たちは皆、ここで大人に同意しています」を中心に展開します。
経験/知識の観点から、初心者プログラマーは大人ではありません。これは、少し傷ついても、足で自分を撃ち、悪い習慣を身につける方が簡単であることを意味します。
「より静的な」言語では、制限が厳しくなるので、自分の足で撃つことは困難になると思います。
私の質問に戻ります。 Pythonがエントリレベルのプログラミング言語として推奨されるのはなぜですか?
プログラミング言語を教えるのに良い点は何ですか。それとも...それはアドバイザーの個人的な好みですか?
IMO、Python=エントリーレベルの言語としての最も重要なポイントは次のとおりです。
PythonのHello World:
print "Hi there"
javaのhello world:
class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!"); // Display the string.
}
}
cのHello World:
#include<stdio.h>
int main(int argc, char** argv)
{
printf("Hello World");
}
他の2つのコンパイルについて話し合う必要があり、pythonの方がはるかに簡単です。私が見たいと思っている1つのアイデアと、問題はpythonで消えるだけです。モジュールについて話す準備ができるまで待つことができます。単純なプログラムのstdio.hを取得するためにそれをRushする必要はありません。クラスなどのトピックを準備するまで待つことができます。最初のプログラムです。REPLはコマンドラインをいじるのに使用します。Pythonは、概念的に最小限であることで非常に優れています。これは、初心者は目の前のタスクに焦点を合わせます。
それは珍しい視点です。
同意する大人のことはPythonの哲学のごく一部です。それは確かにその周りを「回転」しません。インタプリタでimport this
を実行した場合に得られる「Zen of Python」の一部でもありません。
「明示的なものは暗黙的なものよりも優れている」、「単純なものは複雑なものよりも優れている」、「可読性のカウント」はPythonのはるかに中心的な要素であり、Pythonが最初に優れている理由を示しています言語。
とにかく、「同意する大人」とは、実際にはPythonでのプライベートオブジェクトの欠如に関するものだけです。これは、私の意見では、初心者に適している理由のもう1つの目安です。最初の段階では、インターフェイスなどについて心配する必要はありません。
いくつかの異なる点があります。子供を育てるときは、安全なものだけが入っている泡の中に入れたり、つまずいたり落ちたりする可能性のある庭で遊ばせますか?
バブルの中にいることは非常に制限されています。コードを実行するには、非常に特殊な方法でコードを記述する必要があります。人々が最初に始めたとき、その人が望んでいることをするためにそこにないものはすべて無駄であると見なされます。これは、「なぜそれが存在するのかわからないが、誰かがそれが必要だと私に言った」ことにもつながります。
Pythonでは、それは存在しません。 「Hello World」と言いたい場合は、print "Hello World"
。 Pythonをエントリポイントとして使用すると、誰かが実際に実行し、必要なコードを記述して、必要なことを実行することができます。初めてプログラマは、理解する前にカプセル化の価値を理解できませんプログラミングの基本。
また、小さなプログラムでは、タイプセーフは大きな問題ではありません。初心者の開発者が作成するコードはすべて小さく、制限されます。型の安全性が示すように、抽象化レイヤーとして使用し、積極的に考えない多くのセクションを備えた、より大きなコードベースができるまでは、必要なことを確実に実行することの利点はありません。すべてのコードが同じファイルにある場合、関数を見て、何が間違っていたかを確認する方が簡単です。
他の利点:
Pythonは初心者にとって優れた言語です。単純なことを単純にする一方で、十分に複雑なことを可能にして、役に立たないおもちゃの言語と見なされないようにし、上級プログラマでさえ、一部の仕事に適したツールであることがわかります。具体的には、単純なものは次のとおりです。
単純なプログラムのボイラープレートコードの絶対最小値。
ガベージコレクション。
動的型付け。
クリーンでシンプルな構文。
それと比較してください。 JavaまたはC++であり、「Hello、world」プログラムに関連するすべての概念を説明することの難しさ。複雑なものは次のとおりです。
イントロスペクション(Pythonはリフレクションに相当)。
サルのパッチ。
巨大な標準ライブラリでできること。
つまり、Pythonだけを知っている人は、優れたプログラマーではありません。1つの言語または1つの言語スタイルだけを知っている人は、優れたプログラマーではないからです。プログラミングに真剣に取り組む人は、最終的には最終的に彼/彼女がまだフロー制御、再帰、およびその他の基本を理解しようとしている間ではなく、より低いレベルの何かを学びます。
Pythonは良い選択だと思います。通常、「エントリ」レベルのプログラミングでは、シンプルで生産的なものを望みます。迅速なフィードバックを受け取ることは、学習の動機とスピードの両方をサポートします。あえて言うのは、学習ではありません「正しい方法」ではなく、「生涯プログラミングに夢中になり、恋に落ちる」残りは、経験や中等教育などを通じて、後でうまくやっていきます。
very、veryが1つありますPython=について重要なことは、誰もが見落としていると思われる初心者プログラマにとって:有効なインデントを強制することです。
他のコメンテーターの一部と同様に、私は初心者に数年間教えました。このようなものを見るのはたまらなく一般的でした:
#include <stdio.h>
int main(char *args[])
{
int A = 1, B = 1, C;
for (int X = 0;X < 20;X++)
{
printf("%d\n", A);
C = B + A;
A = B; B = C;
}
}
約100行のコードにわたるこの恐ろしい矛盾を想像してみてください。一部の学生にとって、すべてのプロジェクトの全体はこのようになりました。
彼らがどうやってそれを成し遂げたのか私には手がかりがなく、決して彼らを悩ませることはなかった。私が尋ねるたびに、彼らの応答は「まあ、コンパイラーが理解するので問題ではない」のようなものでした。インデントを修正して明らかなバグを見せても、stillの手がかりはありません。
Pythonでは、このタイプのインデントは単純に無効です。彼らはそれが少し矛盾しているとしても、少なくとも読みやすいものを使用することを余儀なくされています。それは彼らが最終的に他の言語を学ぶとき、願わくば、続く習慣を彼らに与えます。
初心者プログラマーにとって、静的型の欠如はバグではなく機能です!
プログラミングを学ぶときに、最も明白なことでさえ理解するのが難しい場合があります。動的型システムは非常にシンプルであり、モジュール化、制御フローなどの入門コースのより緊急のトピックの邪魔をしません。
教育現場での動的型付けには、概念上の利点もいくつかあります。
タイプは変数ではなく値に関連付けられます。これは、プログラムが実際にクラッシュする理由を反映しているため、間違いなくより直感的です。
エラーメッセージは、より迅速かつ具体的です。 Pythonでは、素敵なスタックトレースと実際に何が問題だったかを示すメッセージが表示されます。静的に型付けされた言語では、何が問題かを示すコンパイラ警告が表示されますする失敗しました。
コンパイラで作業する学生は、完全に理解できるプログラムでのみ作業できます。解決できないコンパイルエラーに直面しないようにしてください。
ランタイムエラーチェックを使用すると、不完全なプログラムを実行できます。これにより、学生はプログラムの開始を正しくすることを最初に心配し、その後何が起こるかを確認することができるより多くの増分プログラムが可能になります。
パラメトリックポリモーフィズムやダックタイピングなどのいくつかの重要な概念は、動的言語では無料で提供されますが、静的言語ではより複雑な型システムが必要です。
最後に、同じ複雑さを処理する必要がありますが、プログラムを開始するときに静的型付けのすべての利点を得られません。
初心者向けプログラムは小さく、コードパスも多くありません(したがって、ほとんどアクセスされないコードのビットの型のバグについてそれほど心配する必要はありません)。
初心者プログラムは、高レベルのインターフェースと関数をあまり使用しないため、「型システムを使用してプログラムを設計する」部門で得るものはあまりありません。
私見、「安全な」言語でコードを書くように人々に教えることは非常に悪い考えです。人々はすべてが簡単であると想定し、レイヤーとコードのレイヤーの追加についてのみ考えます。また、問題が発生したときにデバッグ/修正できる可能性を失います。
優れたプログラマーは、C/C++またはアセンブリさえも完全に知っている必要があります。そして彼らの考え方もその側から来なければなりません。そして、そうではありません-「ああ、GC、私たちはクールなMagic(tm)を実行します。なぜC++にGCがないのか、それは愚かです。」姿勢。
上記のほとんどの理由から、Pythonは優れた第一言語です。特に、第1言語の要件の1つは、Pythonが持っている穏やかな学習曲線です。たとえば、開始するために、クラスについてすべてを知っている必要はありません。この点で、ベーシックのように、多くの人が始めました。
これまでが強調されていなかったことの1つは、多くの言語は穏やかな学習曲線を持っていますが、さらに多くのことをしようとするとすぐにレンガの壁にぶつかることです高度なもの。オールドスクールベーシックはこの良い例です。 Pythonを使用すると、他の言語がより良い選択であると感じる前に、いくつかの非常に高度なものに入ることができます。
その時までに、初心者は選択とトレードオフについてさらに理解することができ、C/C++、Java、アセンブラー、プロローグ、LISPなどの準備ができています。実際には、LISPも良い第一言語であるかもしれません!