コンピュータサイエンスに興味を持ってもらうために、16〜17歳の子供たちと何をすればよいですか。


40

私は大学で数週間のうちに一種の「オープンデー」に参加するつもりです。この時間の一部として、私は(同僚と一緒に)高校レベルの生徒全員を2時間与え、全員を収容するのに十分な大きさのコンピューターラボを与えました。彼らとコンピューターサイエンスを行うことを奨励するための活動または一連の活動(私の大学で、理想的ですが、一般的にも)。ここで何をすべきかについて私は絶対に迷っていますし、ありとあらゆる提案を歓迎します。


私は教師でも専門家でもありませんが、レベル生成、ソリューションチェック、自動ソリューション発見などの側面をカバーする小さなパズルゲーム(一般化がNP完全であるものを選んでください)をプログラムする方法を教えることをお勧めします:- )
Vor

1
2008年の王立協会クリスマスレクチャーが好きでした。同様のアクティビティ/デモを試してみてください。
melhosseiny

回答:


21
  • 文脈自由文法を使用して、絵を描くことができます。コンテキストフリーアートこれは、以前にプログラミングしたことのない人にも有効であり、経験豊富なプログラマーに対応します。基本的な言語は30分で説明できるほど簡単です。
  • Turtleグラフィックスを使用してジオメトリについて何かを学ぶことも素晴らしいはずです。ロゴは子供向けに設計されているため、高校生は問題ありません。YouTubeでロゴ使用している子供についての素敵なビデオがあります
  • いくつかのMindStormsロボットを手に入れることができれば、それらのプログラミングはとても楽しいです。
  • ロボットを互いに戦わせるためにプログラミングするさまざまなプログラミングゲーム、または仮想マシンで互いに上書きしようとするアセンブリプログラムがあります。トピックに関するウィキペディア関連するstackoverflow質問
  • また、ある種のハードウェアプロジェクトについて考えることもできます。たとえば、受信トレイ内の未読の電子メールの数に応じて、マイクロコントローラーにLEDを点滅させます。
  • それらに異なる迷路生成アルゴリズムを実装させ、迷路を「人間にとって難しい」ものにする基準を考え出そうとします。時間が許せば、アルゴリズムを拡張して、廊下だけでなく部屋も含めるようにします。
  • ArduinoとLEDをいくつか購入します。彼らにblinkenlightsをプログラムさせてください。

1
Khan Academyのコンピュータープログラミングチュートリアルへのリンクをリストに追加することをお勧めします。これは、上記に加えて非常にクールでインタラクティブな追加です。例:khanacademy.org/cs/intro-to-animation/830742281
PhD

CFGの+1-同じ概念の別のバージョンで試して適用するのに適したものは、反復関数システムを使用してブッシュドローイングを試してみることです。それらを長方形で開始し、さらにいくつかの長方形を設定してから、最初の長方形の「コンテンツ」(すべてのサブ長方形を含む)を各サブ長方形に繰り返します。比較のためにデジタルバージョンをセットアップすることもできます。
スティーブンスタドニッキ

13

コンピューターサイエンスアンプラグドをご覧ください。彼らのサイトから:

CS Unpluggedは、カード、ストリング、クレヨン、走り回るたくさんのゲームやパズルを使ってコンピューターサイエンスを教える無料の学習アクティビティのコレクションです。

アクティビティでは、コンピュータで通常見られる注意散漫や技術的詳細とは別に、2進数アルゴリズムデータ圧縮などの基礎概念を学生に紹介します。

CS Unpluggedは、小学生からシニアまで、そして多くの国や背景のあらゆる年齢の人々に適しています。Unpluggedは15年以上にわたり、教室、科学センター、家庭、さらには公園でのホリデーイベントにも使用されています。


1
これはいい提案ですが、私はOPが実際に取っておかれたコンピューターラボを使用するものを望んでいると思います。
アンドラスサラモン

有効なポイント。プログラミングを知らない人のためのrobocodeプロジェクトがあるはずです。
PAL GD

11

私が知っているほとんどのコンピューターサイエンスの学部生は、プログラミングの学習が教育の中で最も痛みを伴い、士気を低下させる部分であると考えています。したがって、私はプログラミング自体に関係するものには一切近づかないでしょう。以下のようscphantmがすでに指摘し、あなたはおそらくも、このための時間を持っていません。

探しているのは、2つの目標を満たす2時間のエクササイズです。

  • 高校の卒業生に2時間興味を持たせるのは十分に刺激的で、
  • これにより、コンピュータサイエンスとは何かを垣間見ることができ、できれば興味を持たせることができます。

最初の目標は、あなたが実際に見せようとするものとはかなり独立しており、優れた教師/プレゼンターになるためにより多くのことがあります。良い教訓的実践、すなわち、観客をつま先に保ち、グループで小さなことを試してもらい、15分ごとに息抜きをするなど。

2番目の目標は少し難しいです。ここで最もうまくいくと思うのは、現在の知識で説明できる問題を取り、アルゴリズムを使用してソリューションを説明する方法を示し、次にそのソリューションを分析する方法を示すことです改善されました。

良い例は、グラフの最短経路問題です。GPSナビゲーションシステムとも呼ばれます。説明は不要です。エッジの重み/長さを描いた小さなマップと、説明したとおりにアルゴリズムを実際に実行するためのクレヨンを与えることができます。

その後、最短パスを見つける方法などについての議論を開始し、アルゴリズムなどとして定式化してみましょう。次に、ダイクストラのアルゴリズムについて説明し、ノードを訪問済み未訪問のセット。バム。アルゴリズムがあります!

まだ時間がある場合は、いくつかの詳細、つまり仮ノードのセットで最小値を見つけるなど、当たり前のことを説明します。これまでのところ、線形検索とヒープの違いを示すことができ、ボーナスとしてを導入することができますO

PNP


9

2時間しかない場合、多くのコーディングは完了しません。当時は構文を覚えるのは難しいでしょうが、代わりにできることがたくさんあります。

提案として、制御フローと具体的であることの重要性を教えてみてください。

  1. クラスを2つの「ロボット」と他の「プログラマー」に分けます。
  2. いくつかの単純なロジック、ループなどを必要とする適切な課題を考え出します-以下に例を示します。
  3. 「プログラマー」に、「ロボット」に与えられるリストの指示を書き出す
  4. 「ロボット」に指示を実行させますが、指示が混乱している場合、「プログラマ」が停止してデバッグするまで停止、エラー、または他の方法で行動することを「ロボット」に知らせます。保証されて、もし遊ぶ機会が与えられれば、高校生はそうするでしょう。

タスクの例として、異なる色のボールのいくつかのタブを、別の場所に対応する色の紙のストリップと、ロボット/プログラマーの各ペアに十分な小さなバケツで設定します。タスクはロボットにバケツをボールで満たすことですが、そうするためには、ロボットは特定の紙片と一致するボールのみを取ります。浴槽にその色のボールがもうない場合、ロボットは紙を返して新しいものを集める必要があります。

このタスクには、条件分岐、ループ、エラー処理、および先入観が必要です。言語やアクティビティに関係なく、プログラマーが得意とするすべてのもの。

「ロボット」と「プログラマー」が交換できるように、このようなものを2回実行します。その間に、上記の思考パターンに関する小さなレッスンを行います。2回目はパフォーマンスが向上し、最後にプログラミングの大きなイベント-ナチスを打ち負かし、月に行く、インターネット、潜在的で熱心なプログラマーの部屋があるでしょう!


1
なぜこれを+10にできないのですか?これは素晴らしいアイデアです。
Xynariz

@Xynarizありがとう!私は本当に小さなグループで数回それをやったことがありますが、一般的には同じ部分が楽しくてイライラする結果になります-しかし、フラストレーションは子供たちがまだ理解していないコンピューターではなく、不正な「ロボット」にあります。

時には人々は、コンピューターがあなたが言うことを正確に行うのが非常に得意であることを理解していないように見えます。それ以上でもそれ以下でもありません。これについてもCyber​​Chaseのエピソードがあります...(非表示)
-Xynariz

7

私は多くのプログラマーを訓練しました。2時間しかない場合は、コードの作成方法を教える必要はありません。コンピュータラボも不要です。ゼロからハローワールドに進むには、クラスの半分を失い、2時間のうち45時間をグリッチに対処し、何もしません。

プログラマーのように考えるのがどのようなものかを見せてくれるかもしれません。一人一人に紙とペンを渡し、デスクから携帯電話を取り上げて電話をかける方法に関するプログラムを母国語で書くように伝えます。彼らの答えを歩きましょう。あなたのコードがおかしなコードである場合、プログラムをステップスルーして、それらをより良くする方法と、必要な詳細を受け入れる方法を伝えることができます。それから、他のありふれた何かをするために自分の言葉でプログラムを書くように彼らに頼みます。ズボンをはいて、歯を磨き、ドアを開けるなど何でも。そのプログラムで同じことを行います。

プログラマーのように考えるのがどんな風なのか、彼らに試してみましょう。2時間以内にPythonを教えようとするよりも、彼らは確かに多くを活用します。


6

アリスを試してみてください。3Dアニメーション用のIDEおよびAPIです。以下のような:それはあなたが非常に高いレベルの方法で、最初のシーンで置くことができることをオブジェクトに建てられた(ウサギ、宇宙人、木、建物、...)のすべての種類を持っているwalk(north)(キャラクタが移動しながら、腕と脚をアニメーション化しています)そしてsay("my name is Winky")、漫画のバブルがキャラクターの口から出てくる可能性があります。

キーボードとマウスのイベントをフックできるため、インタラクティブなことができます。

基礎となるプログラミング言語はJavaですが、IDEでは、式の一部をエディターウィンドウにドラッグアンドドロップするグラフィカルなバリアントが提供されます。(構文エラーを作成することはできません。)

プログラミングの経験がない人でも、ほんの数時間で何か面白いことができるように、シーンですべてをプリセットできると思います。


1
このアプローチを使用することをためらうでしょう。それは若い学生には有効かもしれませんが、高校生はそれを幼稚なように見る可能性が高いです。とはいえ、これは2時間の制限時間内に何かを完了するための高速な方法です
...-Izkata

6

おもちゃやグラフィカルな言語であっても、コーディングは1時間で大げさに思えます。地獄、私は再びアリスを拾い、2時間以内に価値のあることを何ができるかわからない。たぶん週末ですが、2時間ではありません。

CSを、問題解決と分析という本質的な要素にまで煮詰めることをお勧めします。グループをチームに分けます。10分間かけて、いくつかの高レベルの計算問題を説明します。これらは、数学やCSのバックグラウンドがほとんどない人に簡単に説明できる簡単な問題でなければなりません。例は次のとおりです。

  1. リストの並べ替え
  2. 最小全域木を見つける
  3. 整数の(近似)根の計算

さらに議論し、タスクを説明するためにさらに10分かかります。各グループには1つの問題が割り当てられており、それらに対して解決策をブレインストーミングします。チームは、割り当てられた問題に対する1つまたは複数のソリューションを共同で把握するために30分かかります。その後、1時間かけてグループ全体の解決策を検討し、子供たちが働いているかどうか、問題をより速く/より良い方法で解決できるかどうかなどを考えさせます。

子どもたちが正しい/最適な解決策を見つけられなければ、それは問題ありません。ただし、答えをただ渡さないでください-これは絶対に重要です。子供たちがもうSTEMを行わない理由は、教育者が子供たちにすべてがすでにわかっているという印象を与えるためです。子供たちがこれらの問題を解決し、自分で成功または失敗することを試みるには、非常に成熟したカウンセラーが必要です。正しい答えを得ることはポイントではありません。ポイントは、子供たちに興味深い問題を与え、コンピュータサイエンスが何であるかを子供たちに示すことです。問題を解決し、正確性と効率性の解決策を評価することです。子供たちに自分の答えを考え出させることは、彼らに所有権の感覚を与え、彼らが熱心に感じるのを助けます。

もちろん、子供たちが正しい/良い/最もよく知られている答えを得たかどうか尋ねた場合、彼らに真実を話してください。しかし、生徒の解決策について話し合った結果として有機的に出てこない限り、単に答えを与えないでください。要約する:

  1. 理解しやすいが、豊富な問題を探求する子供を与えます。
  2. 子供たちが自分の解決策を考え出すようにし、子供たちが目の前の問題を確実に理解するのに十分な助けだけを提供します。
  3. グループ設定の正確性/効率性について話し合い、グループに解決策を説明する機会を与えます。カウンセラーとして、あなたはそれが利益を上げることができると思う限り、正確性/効率性の議論を自由に取ることができます。
  4. 学生が提供するものと基本的に同じでない限り、どのような状況でも、問題に対する独自の、またはよく知られている解決策を提示してはなりません。CSがすべての答えをすでに理解している分野のように思わないでください。
  5. 可能であれば、子供たちに何かを学んだように感じさせますが、それでも彼らにはまだ質問があります。彼らは最良の答えを見つけましたか?他の質問も同様の方法で解決できますか?後から取り組むために何かを与えるために、簡単なダイジェスト形式で未決定の問題を提供することもできます。

友好的な競争でチーム同士をピッチングすることも検討できます。チームのペアに同じ問題を与え、誰がより良い解決策を考え出すかを確認します。
Patrick87

1
この種の競争は内気な人を強く落胆させ、すでにそのことを知っている人のエゴを強化するだけです。これは、CSのイメージを「オタク専用」として強化するだけです。
adrianN

6

私は今17歳で、16歳になる頃にプログラミングを始めました。私の話をして、いくつかの提案をするつもりです。プログラミングとコマンドプロンプトをめちゃくちゃに呼び出したコンピューター技術者を見ていたときに、プログラミングに興味を持ち始めました。彼は私のBSODを修正するために500ドルを望んでいて、私は自分で支払いませんでしたが)私は「コマンドプロンプト言語」をグーグルで検索し、「ソースコード」と呼ばれるものがあることを発見しました。 。当時、私はc ++が何であるかわからなかったので、聞いたこともないと思います。だから私はcpp.comに行き(非常に悪いチュートリアル、あなたは悪い時代遅れの実践を学ぶでしょう)、基本を学び始めました。頭がおかしくなり、実際に問題の原因となったウイルスがc ++で書かれていることを知り、さらに興味を持ちました。私は後に読み始め、アセンブリや他の高レベル言語を学び始めました。最初にマルウェアとグラフィックスプログラミングについて学びたいと思い始めました。

  1. これは悪いように聞こえるかもしれませんが、私の年齢の多くの人々は実際にプログラミングの破壊的な側面に興味を持っています。友達にc ++でかなり良いと言ったときに最初に出てくる質問は、「ウイルスを作ったり、成績を変えたり、ゲームをハックしたりできますか」ということです。そこ。おそらく、マルウェアのラインに沿って、危険でも違法でもないが、それでも興味深いものを思いつくかもしれません。(学校のサーバーから生徒のログイン情報を取得する場合があります)ウイルスや悪意のあるソフトウェアがどのように機能するかについても話し合うことができます。
  2. ポケモンのラインに沿って小さなゲームを開発し、ゲームとゲームエンジンの仕組みを説明します。このような多くの2Dゲームでは、キャラクターは実際には動いておらず、背景は動いており、キャラクターはアニメーションを使用しているだけで、乱数について話すことを知っている人はおそらく驚くでしょう。いくつかの3Dデモンストレーションも考えてください。
  3. コードが何をするのかを説明せず、プログラムが何であるかを伝えようとするそれ自体は、コードについてあまり語ることなく行います。私の経験では、特に言語の基本を理解していない場合、人々の注意を引く簡単な方法です。実際、500行のコードを見て、それをまったく理解していない人はかなりがっかりする可能性があるため、ソースコードを実際に公開しないようにします。また、あなたに私のような人がいる場合は、好奇心が強いので、一連の質問をするでしょう。すなわち、あなたは乱数について話している、彼らは乱数が何のためにあるのか、どこから来たのかを尋ねる...あなたが彼らに電子ノイズとその乱数とすべてについて説明する必要があるよりも、あなたはおそらく「わからない」のように。
  4. レゴマインドストームは素晴らしいアイデアです。長い道のりを取り、主要言語を使用したくない場合は、使用できるブロックスタイルのプログラミング言語が付属しています。約30〜40分で言語を理解しました。考えてみるとすべてが揃っています

  5. アプリをすばやく開発して披露し、アプリの開発から生まれる$$について話をすることができます。


4

私のお気に入りのいくつか

  • フラクタルを生成します。深い数学とコンピューターグラフィックスへの強力なリンクがあり、当然、並列処理にも適しています。特に、任意の縮尺にズームしたときの複雑さと創発的な振る舞いを示し、科学と自然現象との強い結びつきを持っています。複数のマシンで実行される並列フラクタルコードを書くのは難しくありません。1つの実験は、各マシンが処理したランダムなラインを表示することです(たとえば、キュ​​ーからラインを処理する「スレーブ」マシン)。次に、中央マシンが結合結果を表示します。

  • レゴロボット(またはスタンプなどの他のロボットキット)。マインドストームはおもちゃですが、抽象的な概念の具体的なデモンストレーションとして機能する非常に高度なものです。それらで実行できるソフトウェアは非常に複雑になる可能性があり、複雑な感覚思考行動ループ/アルゴリズムを持つことができます。多くの優れた構造書があります。また、ルービックキューブソルバーも印象的で、最近世界記録を塗り替えました。

  • raspberry piは新しい安価なプラットフォームであり、多くの関心と使用が見られています。Linuxプログラミング、ロボティクスなどのデモンストレーションに使用でき、HD出力などがあります。たとえば、レゴラックを備えたSouthhampton raspberry piスーパーコンピューターを参照してください。

  • 他の答えで言及されたロゴは古い古典です。もう1つの新しい角度は、たとえばScratchMITで発明され)と呼ばれる新しい人気のある言語を使用したゲームプログラミングです。多くの自然/上級CSトピックを教えることができます。


2

別の角度があります。科学的理解のフロンティアには、好奇心/不思議、つまり近くのテラ・インコグニータの探索を引き起こす可能性のある、コンピュータサイエンスの興味深い未解決の問題や新興技術が数多くあります。問題を提起してから、ソリューションの影響についての議論にクラスを参加させると、大きな関心/インスピレーションを引き出すことができます。[コンピューターラボの利用可能性について言及しているため、これらの分野に関連するいくつかの実践的なコンピューター演習を創造的に考案することも可能です。]

これはSFの感覚を帯びることがありますが、CSでは他の分野とは異なり、かつてはSFだったものが短時間で現実のものになります。また、物議をかもし、タイムリーであり、今日の見出しとつながり、学生は広く解釈されたときに、CSが私たちの世界/社会にどのように存在し、どれほど重要であるかを把握し始めることができます。ここにいくつかの大きなものがあります:

  • DNAからタンパク質へのフォールディング問題。正確に計算するアルゴリズムはありますか?

  • 一般的な人工知能。出来ますか?倫理は関係していますか?

  • ロボット工学には、さまざまな重要な新興分野があります。例えば、自律的な自動車/運転。その近い将来に。これは社会にどのような影響を与えますか?少し前のDARPAコンテストのビデオは印象的です。Kurzweilの執筆には、入るべき多くのものがあります。ドローンは、公然と議論されることはめったにない複雑なトピックであり、ますます国内で使用されます。火星探査車は特別な技術であり、このようなシステムをデバッグする必要があったかのようにその背後にある驚くべき話があるの遠隔interplanetarily、彼らが失敗したときは。

  • 最近、犯罪/テロを検出するためのITベースの監視システムが非常に注目されています。

  • ヒッグス粒子は発見できなかったため、「ビッグデータ」を分析するための大規模なCSベースのシステムがなければ、スーパーコライダーはまったく機能しません。

  • ムーアの法則。どこまで続きますか?それはすでに社会/人類にどの程度影響を与えましたか?

  • 量子コンピューター。彼らは可能ですか?彼らは速くなりますか?それらは低コストであるか、常に扱いにくいでしょうか?Dwaveはカラフルなケーススタディです。アーロンソンによるSciAmの素晴らしい記事などがあります。

  • Google pagerankアルゴリズムは、現代のコンピューターサイエンスの数十億ドルの驚異の1つです。拡張されますか?スパムフィルタリングはどのように機能しますか?会社は画像などの分析に向かっているようです。

  • アルゴリズム/高頻度取引は、大量の取引量/価値を移動するようになりました。それは良い/悪いですか?増加/減少していますか?将来規制されるのでしょうか?どんな種類の計算上の軍拡競争が関係していますか?

  • スーパーコンピューターは巨大で、驚くべき問題を解決し、さらに大きくなっています。制限はありますか?彼らは何を計算し、将来何を計算しますか?やや関連のあるビッグデータデータマイニング

  • ソーシャルネットワーキングサイトは、10年未満の成長に大きな影響を与えてきました。彼らは、アラブの春占領地の壁など、一般的な蜂起に燃料を供給しています。彼らの未来は何ですか?


2

私はその命題があります

  • プログラミングや補助ではなく、コンピューターサイエンスに焦点を当て、
  • ほとんどの子供が知っている前提で始まり、
  • 実際に試されて動作します。

私たちは、マインスイーパについて高校生と小さなワークショップを開催しています。ワークショップは大体次のようになります。

  1. ゲームを少し遊んでみましょう(ほとんど知っています)。

  2. 今何をしましたか?解決しようとしている問題は何ですか?一般的なルールを策定できますか?

    通常、これにはしばらく時間がかかります。子供たちは、問題を解決するための一般的なルールを考慮して、入力と出力の観点から問題を定式化するために使用されていません。以前にプログラムを作成したことがある人は、その努力に感謝するでしょう。「スパゲッティコード」を参照すると役立ちます。それでも、ほとんどの場合、ルールは単純で、一度に1つのセルのみを考慮します。

  3. ルールに関する問題を示します。

    この時点で、掃海艇シミュレーターを導入します。バイエル、スナイダー、シュイエリーの作品は完璧ではありませんが、慎重に設計されたシナリオを展示することができます。

  4. ルールセットを改善して、より多くのシナリオをカバーします。

    これにより、通常、生徒はより多くの細胞を一緒に調査します。また、手元の情報を線形方程式システムとして表現するような「すべてを解決する」アプローチに向けて微調整することもできます。これは、利用可能な情報を数学用語で表現しようとすると起こります。学生はすでにそのようなシステムを解決する方法を知っています!

  5. 制限に注意してください。

    まず、(決定論的な)解決策がないシナリオがあります。さらに、ブルートフォースと開発された戦略を比較できます。速度と電力をトレードオフできますか?方程式-システムアプローチが判明した場合、実数上でのみ効率的にこれを解くことができますが、バイナリの答えが必要であることに注意してください。膨大なランタイムにつながるシナリオを構築するのはそれほど難しくありません(コンピューター代数を使用して説明します)。

グループによっては、このアプローチにより、コンピューターサイエンスの複数の原則を自然な方法でカバーできます。問題の定義、一般的なアルゴリズムの説明、反復的な問題解決、計算可能性と複雑さの問題にすべて触れることができます。

学生によるフィードバックは全体的に好意的です。彼らはコンセプトに興味を持ち、関心を表明します。重要なのは、先のとがった質問をすることで、希望する方向に注意深くそれらを微調整するだけで、ほとんどの作業を彼らに任せることです。


1

あなたにはやるべきことがたくさんあります...しかし、「お金」から抜け出すように思える一つのこと、それで「P≠NP」質問と7千年賞を提示してください。私が理解しているのは表記法しか知らなかった:大きな賞と質問がある!他のものは数学とコンピュータサイエンスの関係を提示するでしょう:方程式を解く、コンピュータを使って解をチェックする。

私が提案する他のことは、アランが「コンピューターサイエンスの父」を紹介し、彼の物語を語ることです。私が提案する最後のことは、ゼロの知識証明とゲーム「waldo is where?」です。不正行為や暗号化、サイバー攻撃なしでプレイする。


-2

Facebookで何でもできます。これは初心者にとっては難しいかもしれませんが、プロファイルが互いにどのように接続されているかを示すconnexionsグラフを描画させることができます。プログラミング言語としてJavascriptをお勧めします。

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