web-dev-qa-db-ja.com

Pythonがエントリレベルのプログラミング言語として推奨されるのはなぜですか?

初心者プログラマーが最初のプログラミング言語としてPythonを選択することをお勧めします。

誤解しないでください。私はPythonが好きです。それは大好きです!しかし、その哲学は「私たちは皆、ここで大人に同意しています」を中心に展開します。

経験/知識の観点から、初心者プログラマーは大人ではありません。これは、少し傷ついても、足で自分を撃ち、悪い習慣を身につける方が簡単であることを意味します。

「より静的な」言語では、制限が厳しくなるので、自分の足で撃つことは困難になると思います。

私の質問に戻ります。 Pythonがエントリレベルのプログラミング言語として推奨されるのはなぜですか?

プログラミング言語を教えるのに良い点は何ですか。それとも...それはアドバイザーの個人的な好みですか?

16
JohnDoDo

IMO、Python=エントリーレベルの言語としての最も重要なポイントは次のとおりです。

  • 浅い学習曲線-何もないところから「Hello world」への移行は、他のほとんどの言語よりもはるかに高速です
  • それは直感的-構文は最小の驚きの原則に従うように設計されており、全体的に非常に一貫しています(残念ながら、標準ライブラリは常にこの一貫性に従うわけではありません)
  • 非常に小さな定型文が必要です:典型的な "Hello world"は1行のコードであり、説明が必要な追加のバックグラウンドノイズ(関数宣言キーワード、インポートステートメントなど)なしで簡単なプログラムを書くことができます、クラス構成、プリプロセッサディレクティブなど)
  • pythonコード、特にインタラクティブインタープリターを操作するための優れた、簡単なtoolsコードがあります。ビルドシステム、IDE、特別なテキストエディターを学ぶ必要はありません。 python-コマンドプロンプト、インタラクティブエディター、シンプルなテキストエディターなど)
  • 動的型付けを使用しますが、他の多くの動的型付け言語とは異なり、型は透過的であり、型に関連する落とし穴はまれです
30
tdammers

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は、概念的に最小限であることで非常に優れています。これは、初心者は目の前のタスクに焦点を合わせます。

8
stonemetal

それは珍しい視点です。

同意する大人のことはPythonの哲学のごく一部です。それは確かにその周りを「回転」しません。インタプリタでimport thisを実行した場合に得られる「Zen of Python」の一部でもありません。

「明示的なものは暗黙的なものよりも優れている」、「単純なものは複雑なものよりも優れている」、「可読性のカウント」はPythonのはるかに中心的な要素であり、Pythonが最初に優れている理由を示しています言語。

とにかく、「同意する大人」とは、実際にはPythonでのプライベートオブジェクトの欠如に関するものだけです。これは、私の意見では、初心者に適している理由のもう1つの目安です。最初の段階では、インターフェイスなどについて心配する必要はありません。

7
Daniel Roseman

いくつかの異なる点があります。子供を育てるときは、安全なものだけが入っている泡の中に入れたり、つまずいたり落ちたりする可能性のある庭で遊ばせますか?

バブルの中にいることは非常に制限されています。コードを実行するには、非常に特殊な方法でコードを記述する必要があります。人々が最初に始めたとき、その人が望んでいることをするためにそこにないものはすべて無駄であると見なされます。これは、「なぜそれが存在するのかわからないが、誰かがそれが必要だと私に言った」ことにもつながります。

Pythonでは、それは存在しません。 「Hello World」と言いたい場合は、print "Hello World"。 Pythonをエントリポイントとして使用すると、誰かが実際に実行し、必要なコードを記述して、必要なことを実行することができます。初めてプログラマは、理解する前にカプセル化の価値を理解できませんプログラミングの基本。

また、小さなプログラムでは、タイプセーフは大きな問題ではありません。初心者の開発者が作成するコードはすべて小さく、制限されます。型の安全性が示すように、抽象化レイヤーとして使用し、積極的に考えない多くのセクションを備えた、より大きなコードベースができるまでは、必要なことを確実に実行することの利点はありません。すべてのコードが同じファイルにある場合、関数を見て、何が間違っていたかを確認する方が簡単です。

他の利点:

  • たくさんのことをするたくさんのライブラリ
  • オブジェクト指向プログラミングと関数型プログラミングの両方の技法を、一方が他方を実行するように設計された言語に適合させることを余儀なくされているように見せることなく教える柔軟性。
4
unholysampler

Pythonは初心者にとって優れた言語です。単純なことを単純にする一方で、十分に複雑なことを可能にして、役に立たないおもちゃの言語と見なされないようにし、上級プログラマでさえ、一部の仕事に適したツールであることがわかります。具体的には、単純なものは次のとおりです。

  • 単純なプログラムのボイラープレートコードの絶対最小値。

  • ガベージコレクション。

  • 動的型付け。

  • クリーンでシンプルな構文。

それと比較してください。 JavaまたはC++であり、「Hello、world」プログラムに関連するすべての概念を説明することの難しさ。複雑なものは次のとおりです。

  • イントロスペクション(Pythonはリフレクションに相当)。

  • サルのパッチ。

  • 巨大な標準ライブラリでできること。

つまり、Pythonだけを知っている人は、優れたプログラマーではありません。1つの言語または1つの言語スタイルだけを知っている人は、優れたプログラマーではないからです。プログラミングに真剣に取り組む人は、最終的には最終的に彼/彼女がまだフロー制御、再帰、およびその他の基本を理解しようとしている間ではなく、より低いレベルの何かを学びます。

3
dsimcha

Pythonは良い選択だと思います。通常、「エントリ」レベルのプログラミングでは、シンプルで生産的なものを望みます。迅速なフィードバックを受け取ることは、学習の動機とスピードの両方をサポートします。あえて言うのは、学習ではありません「正しい方法」ではなく、「生涯プログラミングに夢中になり、恋に落ちる」残りは、経験や中等教育などを通じて、後でうまくやっていきます。

2
MaR

veryveryが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では、このタイプのインデントは単純に無効です。彼らはそれが少し矛盾しているとしても、少なくとも読みやすいものを使用することを余儀なくされています。それは彼らが最終的に他の言語を学ぶとき、願わくば、続く習慣を彼らに与えます。

1
Izkata

初心者プログラマーにとって、静的型の欠如はバグではなく機能です!

プログラミングを学ぶときに、最も明白なことでさえ理解するのが難しい場合があります。動的型システムは非常にシンプルであり、モジュール化、制御フローなどの入門コースのより緊急のトピックの邪魔をしません。

教育現場での動的型付けには、概念上の利点もいくつかあります。

  1. タイプは変数ではなく値に関連付けられます。これは、プログラムが実際にクラッシュする理由を反映しているため、間違いなくより直感的です。

  2. エラーメッセージは、より迅速かつ具体的です。 Pythonでは、素敵なスタックトレースと実際に何が問題だったかを示すメッセージが表示されます。静的に型付けされた言語では、何が問題かを示すコンパイラ警告が表示されますする失敗しました。

    コンパイラで作業する学生は、完全に理解できるプログラムでのみ作業できます。解決できないコンパイルエラーに直面しないようにしてください。

  3. ランタイムエラーチェックを使用すると、不完全なプログラムを実行できます。これにより、学生はプログラムの開始を正しくすることを最初に心配し、その後何が起こるかを確認することができるより多くの増分プログラムが可能になります。

  4. パラメトリックポリモーフィズムやダックタイピングなどのいくつかの重要な概念は、動的言語では無料で提供されますが、静的言語ではより複雑な型システムが必要です。

最後に、同じ複雑さを処理する必要がありますが、プログラムを開始するときに静的型付けのすべての利点を得られません。

  • 初心者向けプログラムは小さく、コードパスも多くありません(したがって、ほとんどアクセスされないコードのビットの型のバグについてそれほど心配する必要はありません)。

  • 初心者プログラムは、高レベルのインターフェースと関数をあまり使用しないため、「型システムを使用してプログラムを設計する」部門で得るものはあまりありません。

1
hugomg

私見、「安全な」言語でコードを書くように人々に教えることは非常に悪い考えです。人々はすべてが簡単であると想定し、レイヤーとコードのレイヤーの追加についてのみ考えます。また、問題が発生したときにデバッグ/修正できる可能性を失います。

優れたプログラマーは、C/C++またはアセンブリさえも完全に知っている必要があります。そして彼らの考え方もその側から来なければなりません。そして、そうではありません-「ああ、GC、私たちはクールなMagic(tm)を実行します。なぜC++にGCがないのか、それは愚かです。」姿勢。

1
Coder

上記のほとんどの理由から、Pythonは優れた第一言語です。特に、第1言語の要件の1つは、Pythonが持っている穏やかな学習曲線です。たとえば、開始するために、クラスについてすべてを知っている必要はありません。この点で、ベーシックのように、多くの人が始めました。

これまでが強調されていなかったことの1つは、多くの言語は穏やかな学習曲線を持っていますが、さらに多くのことをしようとするとすぐにレンガの壁にぶつかることです高度なもの。オールドスクールベーシックはこの良い例です。 Pythonを使用すると、他の言語がより良い選択であると感じる前に、いくつかの非常に高度なものに入ることができます。

その時までに、初心者は選択とトレードオフについてさらに理解することができ、C/C++、Java、アセンブラー、プロローグ、LISPなどの準備ができています。実際には、LISPも良い第一言語であるかもしれません!

0
rzzzwilson