学生のための最初のプログラミング言語として行く

Go言語を使用して小学生のグループにプログラミングを教える経験についてのストーリーの翻訳。 メーリングリストの元のテキストはこちら



元の写真



こんにちはゴーファー、



Goを若いプログラマーのグループの最初のプログラミング言語として使用した経験を説明したいと思います。 このテーマ( ここここ )にはすでに投稿がありますが、彼らは主に学生、または少なくとも大人の教育に関係していることを知っています。 また、オードリーリムのGopherConで 、彼女の最初のプログラミング体験とGoについてのプレゼンテーションがあります。



また最近、Martin Kupmans 息子にこのトピックに関するアドバイス求めました

そして、これは私が子どもの教育に直接関係することがわかった最初のそのような投稿です。



私の状況はマーティンのようなものでした。 私は12人の11歳の学生のグループでした。 7週間のコース全体(約12〜13時間)で、マンデルブロフラクタルジェネレーターを作成できるように十分にGoをトレーニングすることができました。 しかし、もっと重要なのは、彼らがコードを理解し、理解したことです。



この経験から理解したことは、Goは学習に適した言語であるだけでなく、子供を含むプログラミングの完全な初心者にとっても素晴らしいことです。 若いプログラマーを扱う際に本当に重要なGoの側面と、これらの結論に至った経緯について概説します。



最初に役立ったのは構文で、左から右に読みました。 11歳の場合、Goコードはテキストのように自然に読み取れるため、これは直感的に把握できます。 これは、特定のコード行について子供たちにどう思うかを尋ねると、非常に明白になります。



次に、Goにはキーワードがほとんどありません。 あなたが子供である場合、学習はそれほど重要ではないという感覚を作り出すので、これは重要になります。 当初、これにより、子どもたちはプログラミング教育の問題を「これらの言葉は何を意味し、どのように使用するか」に変えることができます。 その後、問題は解決したようです。



第三に、go fmtは一度に多くのポイントで不可欠なアシスタントであることが判明しました。 これは、適切な書式設定を心配せずにコードを書くことができ、go fmtの助けを借りてエディターがそれらのコードを編集することを知っている子どもたちにとって、自信を高める強力なブーストです。 しばらくすると、彼らはGoスタイルに慣れ、自然な形で自分自身を書き始めます。



Go fmtは、その性質上、すべてのコードを同じスタイルにしますが、興味深い副作用がありました。 子どもたちが自発的に助け合い始め、機能するプログラムと機能しないプログラムを比較したとき、彼らは書式設定を見ていないが、論理に焦点を合わせた。 彼らは実際に各プログラムのステップのシーケンスを比較して違いを見つけ、問題を修正しました。 Go fmtは、これに必要な精神的な労力を削減します。これがないと、フォーマットの違いを引き裂くために精神的な労力がかかるため、このプロセスに時間がかかります。 したがって、fmtは学習と理解の実際のアシスタントであることが判明しました。 子供たちがコードを理解するための障壁を減らしました。 これらすべてからの私の結論は、私たちもそれを必要とするのと同じ理由で、11歳の人がfmtに行く必要があるということです。



4番目はgoツールとワークスペースです。 Goツールは、若いプログラマーのプロセスを大幅に簡素化します。 実行する必要があるのは、実行に移るだけだということを知るとすぐに、別のプログラムの実行方法を二度と尋ねることはありません。 文字通り2、3回見せました。 Makefileやコマンドラインオプションでは想像できません。 とても簡単なので、子どもたちはすぐにそれをつかみました。



ワークスペースも役立ちました。 すべてが機能するようにコードを$ GOPATH / srcに入れるだけで十分であることがわかっているだけで、すべての人がそれを行うことを余儀なくされるため、非常に役立ちます。 子供は、プログラム(または依存関係)が間違った場所にあるため、プログラムが起動しないという状況に直面する必要はありませんでした。



私がこのプロジェクトを始めたとき、子供たちはすぐに囲learnを学ぶ良いチャンスがあると思っていました。 しかし、私の意見では、説明するのに問題があるかもしれないいくつかのトピックがまだありました。



ここで興味深いケースは、データ型です。 子供たちにとっては、非常に抽象化されているので、理解するのは本当に難しい概念だと思いました。 このため、プログラミング教育に最も一般的に使用されるのは「タイプレス」プログラミング言語です。 しかし、すべてが正反対でした。 子供たちは一度にそれをつかんだ。 コンパイラがこれを許可していないことを理解するために、文字列を数値変数に割り当てることで1回または2回ミスを犯すだけで十分でした。 コンパイラの静的型チェックはここで本当に役立ちました。子を停止させ、問題があると言ったからです。



しかし、もちろん、型も本当に役立ちました。 子は、変数を初めて宣言したときに、選択したタイプを正当化する必要がありました。 彼らは、特定の変数が必要な理由について話し、その後、必要なタイプを選択しました。 彼らにとってほとんど気付かないほど、これは彼らの論理的思考能力を拡大しました。



IDEの代わりに、Atomエディターとコマンドラインを使用して子供たちに教えました。 UIと[スタート]ボタンの欠如が子供たちにとって問題になるのではないかと心配しました。 しかし、彼らは私の反対を証明しました。 構文の強調表示、go fmtとの統合、およびプログラムのビルド/実行方法を知っているエディターがあれば、これはまったく問題ではありませんでした。 コマンドラインの使用も問題になりませんでした。 また、デバッガは必要ありませんでした。 彼らのプログラムが何か間違ったことをしたとき、彼らは単にエディターに戻り、コードを変更し、再アセンブルし、再試行した。 Goの修正/ビルド/実行ループは非常に高速であるため、デバッガーは不要です。 毎回デバッガを使用すると、非常に遅くなります。 ただし、これは、彼らが書いたプロジェクトのサイズが小さいためかもしれません。



ブロックをマークするための中括弧は、子供にとっても問題ではありませんでした。 子供たちはこれについて決して平凡ではなかった。 おそらくこれは、go fmtが常に括弧の位置合わせを修正したためです。 そして、おそらく彼らは以前にプログラムしたことがなかったため、中括弧の有無について偏った信念を持っていなかったためです。 現時点では、私自身がこれが子供の根本的な原因であることを完全には理解していませんでした。 彼らがブラケットを置くのを忘れたとき、彼らはこれを報告したコンパイラエラーを非常に素早く思い出し、ブラケットを逃した場所を探しました。



これからどのような結論を導き出すことができますか? Goの著者チームは、この言語をゼロから学習するのに適した言語として位置付けたことがないと思いますが、幸運なことに、プログラミング言語を教えるのに優れたシステム言語と優れた言語の両方があるようです。 もちろん珍しい偉業。 これを説明できる唯一の方法は、言語設計プロセスそのものです。 離れることよりも捨てること、そしてシンプルさと直交性を主な優先事項として-言語とチューニングの両方で-それは完全に支払われ、最初は想像すらしなかったような側面がありました。



ラスコックスとアンドリュージェランが今年のGopherConカンファレンスで述べたように、私たちコミュニティは、言語が進化してもこれらのオリジナルのGo原則を見失うことはありません。 それらを忘れると、将来のプログラマと私たち自身の生活を台無しにする危険があります。



最後に、他の誰かがGoを最初のプログラミング言語として、特に子供向けに試してみたなら、あなたの経験を聞いてとてもうれしいです。



また、今年の9月から大規模なグループをより長い期間トレーニングする計画もあります。



よろしく

オーウェン



All Articles