私は大学で数週間のうちに一種の「オープンデー」に参加するつもりです。この時間の一部として、私は(同僚と一緒に)高校レベルの生徒全員を2時間与え、全員を収容するのに十分な大きさのコンピューターラボを与えました。彼らとコンピューターサイエンスを行うことを奨励するための活動または一連の活動(私の大学で、理想的ですが、一般的にも)。ここで何をすべきかについて私は絶対に迷っていますし、ありとあらゆる提案を歓迎します。
私は大学で数週間のうちに一種の「オープンデー」に参加するつもりです。この時間の一部として、私は(同僚と一緒に)高校レベルの生徒全員を2時間与え、全員を収容するのに十分な大きさのコンピューターラボを与えました。彼らとコンピューターサイエンスを行うことを奨励するための活動または一連の活動(私の大学で、理想的ですが、一般的にも)。ここで何をすべきかについて私は絶対に迷っていますし、ありとあらゆる提案を歓迎します。
回答:
コンピューターサイエンスアンプラグドをご覧ください。彼らのサイトから:
CS Unpluggedは、カード、ストリング、クレヨン、走り回るたくさんのゲームやパズルを使ってコンピューターサイエンスを教える無料の学習アクティビティのコレクションです。
アクティビティでは、コンピュータで通常見られる注意散漫や技術的詳細とは別に、2進数、アルゴリズム、データ圧縮などの基礎概念を学生に紹介します。
CS Unpluggedは、小学生からシニアまで、そして多くの国や背景のあらゆる年齢の人々に適しています。Unpluggedは15年以上にわたり、教室、科学センター、家庭、さらには公園でのホリデーイベントにも使用されています。
私が知っているほとんどのコンピューターサイエンスの学部生は、プログラミングの学習が教育の中で最も痛みを伴い、士気を低下させる部分であると考えています。したがって、私はプログラミング自体に関係するものには一切近づかないでしょう。以下のようscphantmがすでに指摘し、あなたはおそらくも、このための時間を持っていません。
探しているのは、2つの目標を満たす2時間のエクササイズです。
最初の目標は、あなたが実際に見せようとするものとはかなり独立しており、優れた教師/プレゼンターになるためにより多くのことがあります。良い教訓的実践、すなわち、観客をつま先に保ち、グループで小さなことを試してもらい、15分ごとに息抜きをするなど。
2番目の目標は少し難しいです。ここで最もうまくいくと思うのは、現在の知識で説明できる問題を取り、アルゴリズムを使用してソリューションを説明する方法を示し、次にそのソリューションを分析する方法を示すことです改善されました。
良い例は、グラフの最短経路問題です。GPSナビゲーションシステムとも呼ばれます。説明は不要です。エッジの重み/長さを描いた小さなマップと、説明したとおりにアルゴリズムを実際に実行するためのクレヨンを与えることができます。
その後、最短パスを見つける方法などについての議論を開始し、アルゴリズムなどとして定式化してみましょう。次に、ダイクストラのアルゴリズムについて説明し、ノードを訪問済み、仮、未訪問のセット。バム。アルゴリズムがあります!
まだ時間がある場合は、いくつかの詳細、つまり仮ノードのセットで最小値を見つけるなど、当たり前のことを説明します。これまでのところ、線形検索とヒープの違いを示すことができ、ボーナスとしてを導入することができます
2時間しかない場合、多くのコーディングは完了しません。当時は構文を覚えるのは難しいでしょうが、代わりにできることがたくさんあります。
提案として、制御フローと具体的であることの重要性を教えてみてください。
タスクの例として、異なる色のボールのいくつかのタブを、別の場所に対応する色の紙のストリップと、ロボット/プログラマーの各ペアに十分な小さなバケツで設定します。タスクはロボットにバケツをボールで満たすことですが、そうするためには、ロボットは特定の紙片と一致するボールのみを取ります。浴槽にその色のボールがもうない場合、ロボットは紙を返して新しいものを集める必要があります。
このタスクには、条件分岐、ループ、エラー処理、および先入観が必要です。言語やアクティビティに関係なく、プログラマーが得意とするすべてのもの。
「ロボット」と「プログラマー」が交換できるように、このようなものを2回実行します。その間に、上記の思考パターンに関する小さなレッスンを行います。2回目はパフォーマンスが向上し、最後にプログラミングの大きなイベント-ナチスを打ち負かし、月に行く、インターネット、潜在的で熱心なプログラマーの部屋があるでしょう!
私は多くのプログラマーを訓練しました。2時間しかない場合は、コードの作成方法を教える必要はありません。コンピュータラボも不要です。ゼロからハローワールドに進むには、クラスの半分を失い、2時間のうち45時間をグリッチに対処し、何もしません。
プログラマーのように考えるのがどのようなものかを見せてくれるかもしれません。一人一人に紙とペンを渡し、デスクから携帯電話を取り上げて電話をかける方法に関するプログラムを母国語で書くように伝えます。彼らの答えを歩きましょう。あなたのコードがおかしなコードである場合、プログラムをステップスルーして、それらをより良くする方法と、必要な詳細を受け入れる方法を伝えることができます。それから、他のありふれた何かをするために自分の言葉でプログラムを書くように彼らに頼みます。ズボンをはいて、歯を磨き、ドアを開けるなど何でも。そのプログラムで同じことを行います。
プログラマーのように考えるのがどんな風なのか、彼らに試してみましょう。2時間以内にPythonを教えようとするよりも、彼らは確かに多くを活用します。
アリスを試してみてください。3Dアニメーション用のIDEおよびAPIです。以下のような:それはあなたが非常に高いレベルの方法で、最初のシーンで置くことができることをオブジェクトに建てられた(ウサギ、宇宙人、木、建物、...)のすべての種類を持っているwalk(north)
(キャラクタが移動しながら、腕と脚をアニメーション化しています)そしてsay("my name is Winky")
、漫画のバブルがキャラクターの口から出てくる可能性があります。
キーボードとマウスのイベントをフックできるため、インタラクティブなことができます。
基礎となるプログラミング言語はJavaですが、IDEでは、式の一部をエディターウィンドウにドラッグアンドドロップするグラフィカルなバリアントが提供されます。(構文エラーを作成することはできません。)
プログラミングの経験がない人でも、ほんの数時間で何か面白いことができるように、シーンですべてをプリセットできると思います。
おもちゃやグラフィカルな言語であっても、コーディングは1時間で大げさに思えます。地獄、私は再びアリスを拾い、2時間以内に価値のあることを何ができるかわからない。たぶん週末ですが、2時間ではありません。
CSを、問題解決と分析という本質的な要素にまで煮詰めることをお勧めします。グループをチームに分けます。10分間かけて、いくつかの高レベルの計算問題を説明します。これらは、数学やCSのバックグラウンドがほとんどない人に簡単に説明できる簡単な問題でなければなりません。例は次のとおりです。
さらに議論し、タスクを説明するためにさらに10分かかります。各グループには1つの問題が割り当てられており、それらに対して解決策をブレインストーミングします。チームは、割り当てられた問題に対する1つまたは複数のソリューションを共同で把握するために30分かかります。その後、1時間かけてグループ全体の解決策を検討し、子供たちが働いているかどうか、問題をより速く/より良い方法で解決できるかどうかなどを考えさせます。
子どもたちが正しい/最適な解決策を見つけられなければ、それは問題ありません。ただし、答えをただ渡さないでください-これは絶対に重要です。子供たちがもうSTEMを行わない理由は、教育者が子供たちにすべてがすでにわかっているという印象を与えるためです。子供たちがこれらの問題を解決し、自分で成功または失敗することを試みるには、非常に成熟したカウンセラーが必要です。正しい答えを得ることはポイントではありません。ポイントは、子供たちに興味深い問題を与え、コンピュータサイエンスが何であるかを子供たちに示すことです。問題を解決し、正確性と効率性の解決策を評価することです。子供たちに自分の答えを考え出させることは、彼らに所有権の感覚を与え、彼らが熱心に感じるのを助けます。
もちろん、子供たちが正しい/良い/最もよく知られている答えを得たかどうか尋ねた場合、彼らに真実を話してください。しかし、生徒の解決策について話し合った結果として有機的に出てこない限り、単に答えを与えないでください。要約する:
私は今17歳で、16歳になる頃にプログラミングを始めました。私の話をして、いくつかの提案をするつもりです。プログラミングとコマンドプロンプトをめちゃくちゃに呼び出したコンピューター技術者を見ていたときに、プログラミングに興味を持ち始めました。彼は私のBSODを修正するために500ドルを望んでいて、私は自分で支払いませんでしたが)私は「コマンドプロンプト言語」をグーグルで検索し、「ソースコード」と呼ばれるものがあることを発見しました。 。当時、私はc ++が何であるかわからなかったので、聞いたこともないと思います。だから私はcpp.comに行き(非常に悪いチュートリアル、あなたは悪い時代遅れの実践を学ぶでしょう)、基本を学び始めました。頭がおかしくなり、実際に問題の原因となったウイルスがc ++で書かれていることを知り、さらに興味を持ちました。私は後に読み始め、アセンブリや他の高レベル言語を学び始めました。最初にマルウェアとグラフィックスプログラミングについて学びたいと思い始めました。
レゴマインドストームは素晴らしいアイデアです。長い道のりを取り、主要言語を使用したくない場合は、使用できるブロックスタイルのプログラミング言語が付属しています。約30〜40分で言語を理解しました。考えてみるとすべてが揃っています
アプリをすばやく開発して披露し、アプリの開発から生まれる$$について話をすることができます。
私のお気に入りのいくつか
フラクタルを生成します。深い数学とコンピューターグラフィックスへの強力なリンクがあり、当然、並列処理にも適しています。特に、任意の縮尺にズームしたときの複雑さと創発的な振る舞いを示し、科学と自然現象との強い結びつきを持っています。複数のマシンで実行される並列フラクタルコードを書くのは難しくありません。1つの実験は、各マシンが処理したランダムなラインを表示することです(たとえば、キューからラインを処理する「スレーブ」マシン)。次に、中央マシンが結合結果を表示します。
レゴロボット(またはスタンプなどの他のロボットキット)。マインドストームはおもちゃですが、抽象的な概念の具体的なデモンストレーションとして機能する非常に高度なものです。それらで実行できるソフトウェアは非常に複雑になる可能性があり、複雑な感覚思考行動ループ/アルゴリズムを持つことができます。多くの優れた構造書があります。また、ルービックキューブソルバーも印象的で、最近世界記録を塗り替えました。
raspberry piは新しい安価なプラットフォームであり、多くの関心と使用が見られています。Linuxプログラミング、ロボティクスなどのデモンストレーションに使用でき、HD出力などがあります。たとえば、レゴラックを備えたSouthhampton raspberry piスーパーコンピューターを参照してください。
他の答えで言及されたロゴは古い古典です。もう1つの新しい角度は、たとえばScratch(MITで発明された)と呼ばれる新しい人気のある言語を使用したゲームプログラミングです。多くの自然/上級CSトピックを教えることができます。
別の角度があります。科学的理解のフロンティアには、好奇心/不思議、つまり近くのテラ・インコグニータの探索を引き起こす可能性のある、コンピュータサイエンスの興味深い未解決の問題や新興技術が数多くあります。問題を提起してから、ソリューションの影響についての議論にクラスを参加させると、大きな関心/インスピレーションを引き出すことができます。[コンピューターラボの利用可能性について言及しているため、これらの分野に関連するいくつかの実践的なコンピューター演習を創造的に考案することも可能です。]
これはSFの感覚を帯びることがありますが、CSでは他の分野とは異なり、かつてはSFだったものが短時間で現実のものになります。また、物議をかもし、タイムリーであり、今日の見出しとつながり、学生は広く解釈されたときに、CSが私たちの世界/社会にどのように存在し、どれほど重要であるかを把握し始めることができます。ここにいくつかの大きなものがあります:
DNAからタンパク質へのフォールディング問題。正確に計算するアルゴリズムはありますか?
一般的な人工知能。出来ますか?倫理は関係していますか?
ロボット工学には、さまざまな重要な新興分野があります。例えば、自律的な自動車/運転。その近い将来に。これは社会にどのような影響を与えますか?少し前のDARPAコンテストのビデオは印象的です。Kurzweilの執筆には、入るべき多くのものがあります。ドローンは、公然と議論されることはめったにない複雑なトピックであり、ますます国内で使用されます。火星探査車は特別な技術であり、このようなシステムをデバッグする必要があったかのようにその背後にある驚くべき話があるの遠隔interplanetarily、彼らが失敗したときは。
最近、犯罪/テロを検出するためのITベースの監視システムが非常に注目されています。
ヒッグス粒子は発見できなかったため、「ビッグデータ」を分析するための大規模なCSベースのシステムがなければ、スーパーコライダーはまったく機能しません。
ムーアの法則。どこまで続きますか?それはすでに社会/人類にどの程度影響を与えましたか?
量子コンピューター。彼らは可能ですか?彼らは速くなりますか?それらは低コストであるか、常に扱いにくいでしょうか?Dwaveはカラフルなケーススタディです。アーロンソンによるSciAmの素晴らしい記事などがあります。
Google pagerankアルゴリズムは、現代のコンピューターサイエンスの数十億ドルの驚異の1つです。拡張されますか?スパムフィルタリングはどのように機能しますか?会社は画像などの分析に向かっているようです。
アルゴリズム/高頻度取引は、大量の取引量/価値を移動するようになりました。それは良い/悪いですか?増加/減少していますか?将来規制されるのでしょうか?どんな種類の計算上の軍拡競争が関係していますか?
スーパーコンピューターは巨大で、驚くべき問題を解決し、さらに大きくなっています。制限はありますか?彼らは何を計算し、将来何を計算しますか?やや関連のあるビッグデータとデータマイニング。
ソーシャルネットワーキングサイトは、10年未満の成長に大きな影響を与えてきました。彼らは、アラブの春や占領地の壁など、一般的な蜂起に燃料を供給しています。彼らの未来は何ですか?
私はその命題があります
私たちは、マインスイーパについて高校生と小さなワークショップを開催しています。ワークショップは大体次のようになります。
ゲームを少し遊んでみましょう(ほとんど知っています)。
今何をしましたか?解決しようとしている問題は何ですか?一般的なルールを策定できますか?
通常、これにはしばらく時間がかかります。子供たちは、問題を解決するための一般的なルールを考慮して、入力と出力の観点から問題を定式化するために使用されていません。以前にプログラムを作成したことがある人は、その努力に感謝するでしょう。「スパゲッティコード」を参照すると役立ちます。それでも、ほとんどの場合、ルールは単純で、一度に1つのセルのみを考慮します。
ルールに関する問題を示します。
この時点で、掃海艇シミュレーターを導入します。バイエル、スナイダー、シュイエリーの作品は完璧ではありませんが、慎重に設計されたシナリオを展示することができます。
ルールセットを改善して、より多くのシナリオをカバーします。
これにより、通常、生徒はより多くの細胞を一緒に調査します。また、手元の情報を線形方程式システムとして表現するような「すべてを解決する」アプローチに向けて微調整することもできます。これは、利用可能な情報を数学用語で表現しようとすると起こります。学生はすでにそのようなシステムを解決する方法を知っています!
制限に注意してください。
まず、(決定論的な)解決策がないシナリオがあります。さらに、ブルートフォースと開発された戦略を比較できます。速度と電力をトレードオフできますか?方程式-システムアプローチが判明した場合、実数上でのみ効率的にこれを解くことができますが、バイナリの答えが必要であることに注意してください。膨大なランタイムにつながるシナリオを構築するのはそれほど難しくありません(コンピューター代数を使用して説明します)。
グループによっては、このアプローチにより、コンピューターサイエンスの複数の原則を自然な方法でカバーできます。問題の定義、一般的なアルゴリズムの説明、反復的な問題解決、計算可能性と複雑さの問題にすべて触れることができます。
学生によるフィードバックは全体的に好意的です。彼らはコンセプトに興味を持ち、関心を表明します。重要なのは、先のとがった質問をすることで、希望する方向に注意深くそれらを微調整するだけで、ほとんどの作業を彼らに任せることです。
あなたにはやるべきことがたくさんあります...しかし、「お金」から抜け出すように思える一つのこと、それで「P≠NP」質問と7千年賞を提示してください。私が理解しているのは表記法しか知らなかった:大きな賞と質問がある!他のものは数学とコンピュータサイエンスの関係を提示するでしょう:方程式を解く、コンピュータを使って解をチェックする。
私が提案する他のことは、アランが「コンピューターサイエンスの父」を紹介し、彼の物語を語ることです。私が提案する最後のことは、ゼロの知識証明とゲーム「waldo is where?」です。不正行為や暗号化、サイバー攻撃なしでプレイする。