教師として:適切なプログラミング言語の選択


8

この質問に適切な場所かどうかはわかりません。少し話題から外れている場合は申し訳ありません。

最初のプログラミングコースに適した言語を選択することは、関連するすべての教師/講師が心に留めておくべき最も重要なことの1つです。特に、学生が若い場合や数学の知識が限られている場合に役立ちます。

私は現在、数学について中程度の知識を持つ非常に熱心な若者(約16〜17歳)のグループを教えています。彼らは今高校の10年生のクラスに通っています。次期のプログラミング言語を教え始めます。

彼らは、並外れたレベルの創造性と勤勉さを備えた、市内の厳選された学生のグループです。したがって、実際のプログラミング言語での作業は、彼らにとって難しい作業ではないでしょう。そのため、Turtle Art、Scratch、Tynkerなどの単純なグラフィカルおよびドラッグアンドドロップソリューションを選択することは、オプションとは見なされません。

選択する前に確認する必要があるいくつかの要因があります。

  • シンプルさ:それらのほとんどは、おそらく実際のコーディングアクションをこれまで経験したことがありません。
  • 単純さ、繰り返します。主要なアイデアの1つは、アルゴリズムの考え方を教えることです。洗練された、またはほとんど構文化されていない言語があると、それらは道から外れます。
  • 一般性:言語は、特別な開発ケース向けに設計されていない方がよい。PHPとMATLABを、Web開発と計算/モデリング用にそれぞれ設計された例として取り上げます。
  • 最小限の目的のもの:強制的なオブジェクト指向プログラミング(Javaなど)はありません。または、少なくともOOの概念への依存度は最小限です。
  • プラットフォーム:ほとんどすべてがWindows上にあるため、Windowsをサポートされる開発環境として持つことが重要です。
  • セットアップが簡単:開発環境をセットアップする簡単な方法を用意することをお勧めします。
  • 業界の好み:深刻な問題ではありません。ただし、少なくとも現在アクティブな言語で、学生がほぼ実際の開発者エクスペリエンスに到達できるようにする必要があります。
  • ハードウェアの移植性:言語がハードウェアプログラミングで使用できるほど柔軟であることは重要です(必須ではありません)。(私はVerilogやVHDLのようなハードウェア記述言語については話していません。)その目的は、AVRマイクロプロセッサーRaspberry Pi GPIOインターフェースのようなより単純なプロセッサーベースのハードウェアのプログラミングです。

知りたい

  1. 他に欠けている要素はありますか?
  2. また、選択肢としてどの言語を提案しますか?

2
見当たらないその他の基準については、この質問を参照してください。
David Richerby 16

1
@DavidRicherby質問を投稿する前に見たことがあります。もちろん、それは非常に役に立ちました。
zxcmehran

Luaを試してみてください。
Ankur

1
@zxcmehranプログラミングパラダイムのトピックについて、私は今日ウィキペディアでこれに遭遇し、それがあなたの質問に関連しているのではないかと思いました:マルチパラダイムプログラミング言語の比較
tehDorf

回答:


11

私の答え?Python。

あなたのすべてのポイントに取り組んで説明しましょう。

  1. シンプルさ。Pythonコードは英語のように読みます。真剣に、どれほど簡単ですか print("Hello World!")
  2. 一般性。Pythonは、ウェブ開発(Flask / Djangoを介して)、データ分析(NumPy / Pandas / SciPyを介して)、ゲーム(PyGameを介して)、およびライブラリの数が非常に多いため、他の多数のタスクに使用できます。あります。
  3. 最低限の目的のもの。PythonでOOPを実行できますが、必須ではありません。
  4. プラットフォーム。Python2.7はほとんどすべてのLinuxディストリビューションで使用されており、Windows / Macでの設定に関するYouTubeビデオはたくさんあります。どちらかと言えば、Repl.Itが提供するオンラインインタープリターを使用できます。
  5. 業界の好み。私が間違っている場合は訂正してください。ただし、Pythonは一貫して最も人気のある言語の1つとしてランク付けされています。

私の教育経験では、構文をできるだけ簡単に記述および理解できるようにすることが非常に重要です。新しいプログラマーにとって、エラーメッセージを表示するためだけにコードを作成する場合(特に、エラーメッセージを読んでデバッグするスキルがない場合)は、非常に落胆することがあります。

ちなみに、PythonTutorはいくつかの主要なコンピュータサイエンス/プログラミングの概念を説明するのに非常に役立ちます。


共有していただきありがとうございます。私はあなたに同意し、Pythonを最良の選択の1つと考えています。
zxcmehran

1
PythonTutorと言えば、JetBrains PyCharm EduもPythonから始めるのに適したツールです。
zxcmehran

私はプログラミング言語の研究に携わっており、優れた汎用プログラミング言語は静的に型付けする必要があると考えていますが、Pythonは特に若い学生にとって優れた学習言語だと思います。他の人が指摘した多くの要因がありますが、私もこれを言いましょう:私の経験では、初心者はプログラムのクラッシュを見て自分の目で燃やす必要があります。大きな悪いコンパイラーが「クラッシュして燃えるため、これを行うことはできません」と言い続けても、ほとんど役に立ちません。子供に「オーブンに触れないで、暑い」と言っているような感じです。
Andrej Bauer

1
また、Pythonではブロックのインデントによってプログラムの構造が自明になるという事実を決して過小評価しないでください。ただ入力すること{}beginendコードのブロックを区切るためには、初心者の学生に大きな認知負担となっています。そうでなければ、schemeに切り替えて、括弧についてどう思うか見てください。
Andrej Bauer

ラズベリーパイのpythonでプログラムすることもできます。
ヘザー

10

バックグラウンド

この質問は、私たちの部門で約5年ごとに醜い頭を引き上げます。私たちにはミランダとパスカルの時代があり、それからハスケルになりました。今はCになっています。EE部門は以前と同じように生徒を派遣することに決めたが、「Cのような実用的なもの」を要求し、私たちの背骨のないリーダーシップは従うよりも良いことは何もありませんでした。

上記で推奨されていないものは何ですか?

私はこれのいくつかを教えました、そして、学生が20年近くにわたってそれから出てくるのを見ました。際立った1つのことは、計算の基本的な概念を十分に簡単に表現できる限り、その言語はほとんど問題にならず、正しいことをしなかった場合は、できれば適切なエラーメッセージが表示されることです。コンパイラ。ここでpythonが失敗します。タイプは重要です!ここでCが失敗します。型が重要であり、ポリモーフィズムが重要です!(そして、いいえ、すべてがvoid型になるようにすることは解決策ではありません。Pythonランドに移動するだけです。)そこでJavaが失敗します。プログラムがスライドに適合しません-ボイラープレートと冗長性が多すぎます。

だから、個人的には、私は上記の答えのどれにも行きません。私はハスケルと一緒に行きます。数学と美しく調和しています。他のどれよりも簡潔です。計算の本質に集中できます。そして、ghcは、学生にCを使用させるたびに目にする最適化の微妙な試みに対して、Cコンパイラよりも優れた高速なコードを生成する傾向があります。

しかし、本当に。

そうは言っても、私の経験で最も重要なことは、教師が実際にはいくつかのオンラインチュートよりも言語をよく知っているということです。第一言語はまさに第一言語です。あなたの学生が真剣であるならば、彼らは道に沿ってさらに多くを拾うでしょう。構文よりも概念に焦点を当てます。


7

私の意見では、この質問は非常に意見が分かれています。「どの言語がXに最適か」のような聖なる戦争を引き起こすものは何もありません。それでも、私は噛みます。

  1. 他に欠けている要素はありますか?

まず、ダイクストラが教えることについて言ったことを読むことをお勧めします。古くはありますが、関連性があります。おそらく、今日よりもはるかに関連性があり、過去よりもはるかに関連性が高いです。

次に、同じトピックについてJoel Spolskyによるブログ投稿を読むことをお勧めします。

第三に、それほど重要ではありませんが、第一言語に対する私自身の基準は次のとおりです。

  1. 実行時エラーは、明確なエラーメッセージで報告する必要があります。
  2. 入力する必要があります。
  3. プログラミングのすべての側面を理解できる単一のプログラミング言語はありません。本物のプログラマになるには、多くの言語、特に根本的に異なる言語を学ぶ必要があります。

ポイント1は、初心者にとって非常に便利です。CとC ++を除いて、ほとんどの言語はこれを満たしています。Cはどのプログラマーにとっても知っておくべき言語だと思いますが(ポイント3を参照)、初心者にとっては不必要に厳しいと思います。ガベージコレクションは、ポイント1のほとんどの前提条件です。

ポイント2は最も物議を醸しています。型付けされていない言語で作業することも学ぶべきだと思いますが(ここでも、ポイント3)、型から始めるほうが有益だと思います。型指定されていない環境であっても、プログラマは、どの種類のデータをサブルーチンに渡すかについてよく考えます。さらに、ランタイムよりも早くエラーを検出することは素晴らしいことです。

ポイント2は多くの言語を除外します。ただし、Pythonは除外されないことに注意してください。Pythonは型指定されていませんが、型指定されたPythonを使用できる素晴らしいmypyプロジェクトがあります。さらに、Perl6にはオプションの(段階的)入力があります。そのため、それはそのままです。TypescriptはJavaScriptに型を追加します。LispとSchemeが除外されている場合でも、多くの型付き関数型プログラミング言語から選択できます(Ocaml、Haskell、F#など)。

ポイント3も重要です。優れたプログラマーになるには、多くのことを学ぶ必要があります。低レベルのもの(ポインタ、C)から最高レベル(再帰、閉包、パラメトリック多態性/ジェネリックなど)、さまざまなパラダイム(命令型、関数型、ロジックなど)まで。もちろん、これは単一のコースで教えることはできません。最初のコースとして、フルロードへの道を開く必要があります。


1

私はPythonの答えを使用しますが、代替案Cもお勧めします。

私の最初のプログラミング言語はCでしたが、それを習得したときは本当に楽しんでいました。教師(および一部の仲間の学生)は最初のプログラミング言語としてJavaを採用したはずですが、それはCを採用するように設定されていました。とにかく、トピックに戻る:

  • 単純性 Cの構文はかなり小さいですが、ときどき奇妙です。あなたはVodooアプローチを取ることを強制されませんが、あなたはそうするかもしれません。

  • 単純さ、繰り返します最初のポイントの結果として、アルゴリズムはかなりコンパクトで理解しやすいように実装できます。フィボナッチまたはより高度な騎士のツアーを考えてください。

  • 一般性Cを使用すると、必要なものを実装できます。スクリプト言語(Lua)などのサブシステムを使用することもできます。

  • 最小目標スタッフ Cは、ここで自明です。OOを実装するには、Cについてある程度の知識が必要です。

  • プラットフォームすべての主要なプラットフォームが言語をサポートし、お好みのコンパイラを使用してコーディングを開始します。

  • セットアップが簡単 Cには、たくさんのボタンと太いツールチェーンを備えたIDEは必要ありません。単にメイクファイル(またはスクリプト)を取得し、コードをいくつかのコマンドで微調整します。必要に応じて、IDE(コードブロックなど)を使用できます。

  • 業界の好み Linux、Windows、...

  • ハードウェアの移植性それはAVRマイクロコントローラーでうまく機能しているか、Arduinoを使用します。


代わりに、Arduinoのような手頃な価格のプラットフォームでの開発についてはどうでしょう(より良い代替案があるかもしれません)。単純なstdoutプリントを使用してすべてのアルゴリズムを表示するか、いくつかのハードウェアを動作させることができます。結果のコードが一部のテキスト(または画像、GUI、またはその他のもの)を印刷するだけでなく、LEDを点滅させるなどの利点がある場合があります。私の会社では、生徒がかなり基本的なArduinoボードに何かをコーディングするコースが時々あり、出席者から良いフィードバックを受けています。


私はあなたが正しい質問をしていると思います、そして私はあなたにあなたの学生を教えるために最善を尽くすことを望みます。


CおよびC ++の唯一の欠点は、実際のアクションのように見えるものを作成できるようにするには、コーダーがいくつかの高度な構文構造(ポインターなど)を理解する必要があることです。Cファミリでは、言語の難しい部分を理解しないと、豪華なGUIやネットワークの魔法の力に到達できません。学生として、学期のすべての取り組みの結果、奇妙な書体の黒いコンソールウィンドウ内でロジックが実行されるだけでは、退屈でしょう。したがって、より高いレベルの言語を使用することは、彼らにとってより興味深いものであり、コーディングの道を続けるよう奨励すると思います。
zxcmehran

1
@zxcmehranそうですね、そのため、代替アプローチとしてArduinoのようなものを提案しました。
maxik 2016

Cは単純です。「自分の記憶を自分で管理する」のは簡単です。未定義の動作がたくさんあることが問題です。
djechlin 16

1

Swift Playgroundを使ってSwiftに行きます。MacまたはiPadを持っている人の数を確認したい場合があります。学生の間で、それはいくつかの場所で90%です。また、http://iswift.org/playgroundからオンラインで入手できるので、ブラウザだけで十分です。コンピュータがない場合は、携帯電話で使用できます。

Swiftは現代の言語であり、安全な言語であり、習得すれば仕事ができる言語です。(Appleが作成する新しいコードはすべてSwiftで記述されています。)


0

編集:すみません、それについて-私はプラットフォームについてのあなたのポイントを誤って読みました。基本的にはWindowsで実行するだけでよいとおっしゃっていましたが、Windowsを使用しているユーザーの大多数だけであることがわかりました。

Microsoftは、LinuxとMac、VS Code、およびVisual Studio for Macのサポートを構築しています、および.NET Coreの。


C#、. NETフレームワーク、およびVisual Studio IDEを検討することをお勧めします。これらは、7〜8点のほとんどすべてをカバーしています。(最初の2つをどのように数えるかに応じて; D)

  • シンプルさ:構文はかなり簡単に入手でき、初心者向けのチュートリアルにはWebに大量の情報があります。
  • 単純さ、繰り返しますが、C#は厳密に型指定された言語であり、アプリケーションが実行される前にエラーを強調表示するのに役立ちます。間違いなく、Visual Studioは、優れた構文の強調表示、Intellisense、およびデバッグのサポートで取得できる最高のIDEの1つです。
  • 一般性:これは最良の選択ではないかもしれませんが、個人的には、Webサイトやデスクトップアプリケーションからロボット装置まで、さまざまなアプリケーションに使用しています。
  • 最小限の目的:オブジェクト指向プログラミングの編集は、カプセル化、抽象化、継承、およびポリモーフィズムに焦点を当てたプログラミングのスタイルです。C#にはOOコードの記述を容易にする機能がありますが、それらを使用する必要はありません。C#プログラムは手続き的に記述できます。
  • プラットフォーム編集 .NET Coreは、.NET Frameworkのクロスプラットフォームバージョンです。Mac、Linux、Windowsで動作します。
  • セットアップが簡単:Windowsでセットアップするための簡単な言語とIDEを見つけることができないと思います。編集 MacとLinuxについては、経験はありませんが、VS Code(Win / Mac / Linux)とVisual Studio for Mac(Macのみ)があります。これらも比較的簡単だと思います。
  • 業界の好み:C#は間違いなくプロの言語ですが、検討している言語に基づいて地域の求人を検索することで、自分自身を調べることができます。Diceを使用して、C#(6,548)とPython(6,639)でほぼすべての求人公募でほぼ同じ結果を得ましたが、Diceに何らかのバイアスがあるのか​​、それとも大きな地域差があるのか​​わかりません。
  • ハードウェアの移植性:たぶんここで半端-Netduinoのようないくつかの特殊な.NETボード以外に、C#でマイクロコントローラーをプログラミングするための多くのサポートはないと思いますが、Raspberry Piはサポートされています。

追加のボーナスとして、MicrosoftにはImagine(以前のDreamSpark)と呼ばれるプログラムがあり、高校や大学の教師や生徒に無料のソフトウェアをたくさん配布しています。また、学生向けのコンテストもあります。


Windowsの人のみ。また、完全にOOP
Eugene

@Eugene私の間違い、私はプラットフォームに関するポイントを誤って読んだので、私の答えは間違いなくWindowsにのみ関係していた。LinuxとMacに対応するように更新しました。「完全にOOP」については、「最小目標」の下の私の更新された回答でも対処しました。ご意見をお聞かせください。
tehDorf 16

C#は成熟した言語ですが、私のリストにはありませんでした。プラットフォームとハードウェアの範囲が限られていると想定していたためです。よろしくお願いします。またリストに戻ってきました。リンクをありがとう、私はそれらをチェックします。
zxcmehran

-1

ラザロを見てみましょう:

http://www.lazarus-ide.org

Lazarusは、Free Pascalコンパイラ(FPC)に基づくプログラミング環境です。Windows上で非常にスムーズに動作し、他の主要なプラットフォームでも使用できます。FPCは、Object Pascalと呼ばれるPascalの最新バージョンをサポートしています。

Object Pascalはマルチパラダイムプログラミング言語です。標準のPascalでコードを記述し、必要なときにOO機能の使用を開始できます。

Lazarus / FPCを使用して、実際のアプリケーションを開発できます。どちらもかなり成熟していますが、Delphiを商用の代替手段として使用することもできます。

FPCは、プログラムをRaspberry PiやAndroidなどのデバイスにクロスコンパイルできます。

しかもパスカルの未来は明るいです。Oberonプログラミング言語は、最終的にはソフトウェアを開発する最も生産的な方法として引き継がれるでしょう。

ht tp://www.projectoberon.com

うまくいけば、オベロンで開発するツールは時間とともに成熟するでしょう。Win64ターゲット用のクールなコンパイラがすでにあります:

https://github.com/congdm/AyaCompiler


質問は基準として次のように述べています。「業界の好み:深刻な問題ではありません。しかし、少なくとも現在アクティブな言語で、学生がほぼ真の開発経験に到達できるようにする必要があります。」Lazarus / Pascalはこれにうまく適合しないようです。Lazarusが得意とする基準と得ない基準を回答に文書化するとよいでしょう。
DW

en.wikipedia.org/wiki/… <br/> wiki.freepascal.org/Lazarus_Application_Gallery <br/> delphi.wikia.com/wiki/… <br/> jonlennartaasenden.wordpress.com/2014/11/06/… <br/> <br/>ラザロが1.0マイルストーンに達したとき、それは多くの関心を集めました。それ以来、人気は低下していません。<br/> Delphi / Lazarusは、デスクトップアプリケーションを開発するための最も人気のあるツールの1つです。サーバーおよびモバイルアプリケーションでFPCを使用するためのフレームワークも開発されています。
srcstorm 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.