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


16

P.SEについては、初心者プログラマがPythonを最初のプログラミング言語として選択することをお勧めします。

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

経験/知識の観点から見ると、初心者プログラマーは大人ではありません。それはちょっと傷を乗り越えても足で自分を撃ち、いくつかの悪い習慣を拾いやすくなることを意味します。

「より静的な」言語では、制限が厳しくなるため、自分自身を足で撃つことは難しくなると考えています。

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

プログラミング言語を教えるのに適している点は何ですか。または...アドバイザーの個人的な好みですか?


17
I'm thinking that in a "more static" language it would be harder to shoot yourself in the foot-まあ、CおよびC ++は静的型付けされ、あなたがひどくなり、ひどく...あなたがそれらを使用してから足を吹くことができますどのように多くの異なった方法を見て驚い
ペーテルTörök

@PéterTörök:はい、それはあなたの足全体を奪います(c ++:D)。「もっと静的」と言ったのは、...わからない... Java?!?!...のようなフレーム戦争を避けようとすることです。誰もが学校/大学で考えられており、人々は
それから怖い

1
C ++は他の言語のことをよりよく理解するのに役立ったので、C ++はより良い開始言語だと思います。
systemovich

1
Pythonを使用した最初の学期のプログラミングクラスをTAにした後、Pythonを開始言語として使用しました。学生は「タイプ」を理解していなかったため、空白の依存関係がそれらを殺しました。彼らはまた、オブジェクトを理解するのに苦労しました。その「自己」は、洗練されたオブジェクト指向ビジネスを参照しています。メリットはありますが、間違いなく批判者もいます。
リグ

2
@MahmoudHossam同意します。私は自分の経験からいくつかのこだわりのポイントを強調していました。Java、C#、Lispなどにはすべて問題があります。これらは、Pythonを初めてプログラマーに教える際に遭遇した大きな問題に過ぎませんでした。
リグ

回答:


30

IMO、Pythonをエントリレベル言語として話す最も顕著なポイントは次のとおりです。

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

言語の直観性を強調したいだけです。プログラミングの経験が0の人がPythonを素早く習得するのを見てきました。これは主に、構文/文法が英語に非常に近いためです。
スティーブングロス

12
最後の点で、人々は動的型付けと弱い型付けを混同することがよくあります。Pythonは動的に(代わりに、変数の値に関連したタイプの)入力されるが、(プログラムの代わりにサイレント嚥下変換エラーのクラッシュに)強く型付けされた
hugomg

@missingo 2番目-あなたが持っているイーグルの目;)
yati sagade

@missingno:私は違いを知っています。非透過型の例としては、PHPの配列キーがあります。整数キーの配列は、他の型の配列とは異なる動作をします。2つの十分に大きな整数を追加すると、フロートになる可能性があります。そして、これはほんの一例です。特にPHPとjavascript(Web開発で最も人気のある2つの動的言語)は、あいまいなタイピングエッジケースでいっぱいです。
tdammers

あなたのコメントから判断すると、「タイプは透過的」とは、タイプを支配するルールが理解しやすいということですか?正確に何を言おうとしたのですか?
phant0m

8

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のこんにちは世界:

  #include<stdio.h>
  int main(int argc, char** argv)
  {
    printf("Hello World");
   }

他の2つについては、コンパイルについて話す必要があり、Pythonははるかに簡単です。私が見たいと思っている単一のアイデアについて話すだけで、問題を複雑にするすべての機械がpythonで消えるだけです。モジュールについて話をする準備が整うまで待つことができます。単純なプログラムの場合はstdio.hを取得するために急ぐ必要はありません。クラスのようなトピックの準備が整うまで待つことができますが、最初のプログラムを急ぐ必要はありません。コマンドラインでだまされやすいREPLがあります。Pythonは概念的に最小限であることに非常に優れています。これは、初心者が目前のタスクに集中するのに役立つため、良いことです。


15
「戻り値0」を忘れました。C実装のステートメント:)コンパイラの警告!
スティーブングロス

2
これが、最初にBASICが存在した理由です。10プリント「Hello World!」20 END追加のクレジットとして、Pythonプログラムは「「Hello World!」と言ったのですか?」ユニットテスト:-)
ロスパターソン

3
F#でも同じ:printfn "Hello World!"。はい、F#は初心者に適しています!
デン

7

それは異常な視点です。

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

「明示的は暗黙的より優れている」、「単純は複雑より優れている」、「可読性カウント」はPythonの中心であり、Pythonが優れた第一言語である理由を示しています。

とにかく、「同意する大人」とは、Pythonにプライベートオブジェクトがないことだけです。私の意見では、それ自体が初心者にとってなぜ良いのかを示すもう一つの指標です。始めたばかりのとき、インターフェースのようなことを心配する必要はありません。


1
はい、しかし、それらの「プライベート」パーツについては、それらにアクセスできるので、それらの周りのいくつかの回避策/ショートカットをよく知らないでハックしたくなるかもしれません。
JohnDoDo

@JohnDoDo C#またはJavaで、privateフィールドを変換しpublicてハックすることにした場合、どのような違いがありますか?ところで、Pythonでは、プロパティにアンダースコアを付けてプライベートにすることができます(実際には非表示ではありませんが)
OnesimusUnbound

4

2つの異なる少数のポイントがあります。子供を育てるとき、安全なものしか入っていないバブルに子供を入れたり、つまずいたり落ちたりする可能性のある庭で遊んでもらうべきですか?

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

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

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

他の利点:

  • 多くのことを行う多くのライブラリ
  • オブジェクト指向プログラミングと関数型プログラミングの両方のテクニックを、一方が他方を実行するように設計された言語に合わせるように思わせることなく教える柔軟性。

3
反例:子供に火遊びをしないことを教える。1)あなたは彼と話し、火が何であり、火が何であるかを説明し、PowerPointスライドを何でも見せることができます。2番目の方法は、はるかに効率的です。私が興味を持っているのは、安全対策が講じられなかったために、彼が家に火をつけたり、好きになったり、放火魔になったりする可能性です。一種の極端な状況ですが、実際に言葉で表現することはできません。
JohnDoDo

1
@JohnDoDo-だから彼は火傷を負わせる...それは最高の学校であり、子供の試合で火傷を負わなかったのは誰ですか?それは...彼を殺すつもりはありません
ルーク

1
@JohnDoDo:言語が火で遊ぶことができるからといって、火が非常に危険であることを教師が指摘せず、それを回避する方法を説明しないわけではありません。もう1つ欠けているのは、誰かが言語に縛られていないことです。プログラミングの基本的な理解を得た後、彼ら別の言語を使用して、より大きな概念(建物を燃やさないなど)を学ぶことができます。
unholysampler

3

Pythonは初心者にとって素晴らしい言語です。Pythonは単純なものをシンプルにしながら、十分な複雑なものを作成できるため、役に立たない玩具言語とは見なされず、上級プログラマーでさえ、いくつかの仕事に適したツールであることがわかります。具体的には、次のものが含まれます。

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

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

  • 動的タイピング。

  • 簡潔でシンプルな構文。

これを、たとえばJavaやC ++と比較して、「Hello、world」プログラムに含まれるすべての概念を説明するのが難しいことを確認してください。複雑なことは次のとおりです。

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

  • モンキーパッチ。

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

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


2

Pythonは良い選択だと思います。通常、「エントリ」レベルのプログラミングでは、シンプルでありながら生産的なものが必要です。素早いフィードバックの受信は、学習の動機付けとスピードの両方をサポートします。「正しい方法」を学ぶことではなく、「生涯プログラミングに夢中になり、恋に落ちる」ということを敢えて言います。残りは、経験、中等教育、その他何でも後からうまくいきます。


1

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

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


1

初心者プログラマーにとって、静的型の欠如は機能であり、バグではありません!

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

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

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

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

    コンパイラで作業する学生は、完全に理解しているプログラムでしか作業できません。解決できないコンパイルエラーに直面することはありません。

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

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

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

  • 初心者プログラムは小さく、多くのコードパスがありません(したがって、アクセス頻度の低いコードのタイプバグについてそれほど心配する必要はありません)

  • Begginerプログラムは高レベルのインターフェースと機能をそれほど使用しないので、「型システムを使用してプログラムを設計する」部門で得ることはあまりありません。


1

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行のコードに関するこの恐ろしい矛盾を想像してください。一部の学生にとって、プロジェクト全体はこのように見えました。

彼らがどうやってそれを成し遂げたかわからない。私が尋ねるたびに、彼らの応答は「まあ、コンパイラがそれを理解するので問題ではない」のようなものでした。インデントを修正することで明らかなバグを見せても、まだ手がかりが得られません。

Pythonでは、このタイプのインデントは単なる無効です。多少矛盾していても、少なくとも読みやすいものを使用せざるを得ません。最終的に他の言語を習得したときに継続することを願っています。


0

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

これまで取り上げられていないことの1つは、多くの言語が緩やかな学習曲線を持っているが、より高度なことをしようとするとすぐにレンガの壁にぶつかることです。Old-school Basicはこの好例です。Pythonを使用すると、他の言語がより適切な選択肢であると感じる前に、いくつかの非常に高度な機能を使用できます。

その時までに、初心者は選択とトレードオフについてより深く理解でき、C / C ++、Java、アセンブラ、プロローグ、Lispなどの準備ができています。実際、Lispはかなり厳しい第一言語ですが、 !


-1

Pythonを第一言語として使用する際の重要な問題は、動的な型指定と変数宣言の欠如です。私見それらは言語の唯一の主要な問題です。

変数fooに文字列を格納するだけだという行を追加するだけで、プログラマ、開発環境、言語(および「プロフェッショナルコード」の場合、寒くて後でサポートする必要がある貧しい愚か者)が許可されます。一緒に仕事をする。通常の開発者と初心者にとって、特に複数の型に変数を使用することは意味がありません。まれに、動的な型指定を許可する明示的なvar / object型を使用するのが理にかなっている場合は、まったく問題ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.