今日の学生にリーチするための入門コースの良い課題は何ですか?[閉まっている]


25

Javaを使用したプログラミングコースの紹介を定期的に教えています。生徒たちに興味を持たせたり、面白く見つけたりできる刺激的な課題を与えたいです。少なくとも、理にかなっていて、内部にまとまりのある割り当てが必要です(たとえば、一部の非常に悪いプログラミング演習は、最新のプログラミング構成を使用する必要があるために不自然に思えます)。

あなたのスコープのアイデアを与えるために、ここで覆われているものです

  • 割り当てはJavaで行う必要があり、外部ライブラリを使用して実行できますが、完全なフレームワークではなく、単純なAPIである必要があります
  • 変数、プリミティブ、および文字列
  • コンソール入出力
  • ifforwhile
  • 算術演算子と論理演算子
  • 線と形状の描画を備えたシンプルなグラフィック
  • 静的メソッド
  • 一次元配列

生徒は高度なトピックに進みません(たとえば、再帰なし、継承に重点を置きません)。したがって、私は複雑なプロジェクトを探しているわけではありません。「それらにCコンパイラを作成してもらいます。5歳のときにやったので、それが唯一の学習方法でした!」

スコープよりも高度なアイデアがある場合は、これではなく、以下にリンクされている「挑戦的な」質問に投稿してください。

代わりに、私が探しているのは、短いプログラムで達成できる興味深いアイデアです。例えば:

  • 学生は「スターウォーズ名」ジェネレーターのコンソール版を書くことができます。これは文字列を効果的に読み取り、を使用substringしていますが、楽しいと思います。同様のバリエーションは、「Mad Libs」プログラムです。私はこれを5年前に使用しましたが、おそらくすでに「古い」ものです。

  • 提供されたいくつかのトリガーを使用して、生徒は通常のポリゴンを描画し、興味深いスパイラル形状を作成できます。

  • また、ほとんどのコードが提供されている単純なアニメーションクラスを使用することも問題ではありません。また、単純なAPIでアクセスできるTwitterまたはFacebookサービスを知っているなら、知りたいと思います。

この質問は、「初心者向けの挑戦的なJavaの質問」の質問とは異なることに注意してください。私はそれ自体がやりがいのあるものを探しているのではなく、ただ面白いものです。学生が「なぜそれをプログラムしたいのか」と簡単に答えることができる何かに取り組むと思います。その後、彼らはより良く学びます。

1ガロンあたりのマイル数を計算するような単純な問題でも良い場合があります。ただし、関連性を高めるために更新する方法があれば、それでもなお良いでしょう。他の場所(本またはWebサイト)からのエクササイズがある場合は、ソースを引用してください。

今日の典型的な新入生について考えるのを助けるために、Beloit Mindsetリストをチェックしください。


好奇心から、再帰やオブジェクト指向設計などのトピックが高度すぎると思うと、どのレベルの学生に教えていますか?これらのトピックは、私の最初の学期、入門プログラミングクラスで詳細に説明しました。授業をあまりにも単純にしようとすると、生徒たちに迷惑をかけていると思います。
マイラ

@Mayra:これは、CSメジャーの最初のコースであるプログラミングコースの紹介です。学生だけでなく、最初の5週間(または最初の日)に使用するエキサイティングな問題を探しています。これらの要件で作業することは本当に難しいことです(そして、いくつかの問題は私の制御が及ばないことを信じています)。
マクニール

回答:


9

制約を考えると、ハングマンのバージョンを実装することをお勧めします。学生は、過度に複雑になることなく、紹介しているすべてのテクニックを実演できます。

また、コースが進むにつれて、開発プロジェクトとして使用することもできます。たとえば、文字列と変数をカバーしたら、テキストバージョンとして開始します

例えば

You have 10 guesses left.      * * * E * * T
What is your next guess?

次に、ループを導入して、10個の推測がカウントダウンするときにコードからカットアンドペースト要素を削除します。5週間のコースの終わりに、ライングラフィックスとスティックの人がハング/保存されるまでになります。

プログラマーの採用と面接の経験がある他のほとんどの人と同様に、大学でこのレベルの授業料が必要であることは本当にうんざりしますが、悲しいかな、学校がプログラミングと同等の深刻な主題として扱うまで必要になるでしょう数学または科学


いい案!私はこれを使うと思います。:-)ところで、「授業のレベル」とはどういう意味ですか?コストのように?
マクニール

大学の前にプログラミングの授業料が不足していることに不満を抱いています。化学を行うために大学に到着し、原子、分子、電子について語られる最初の用語を費やすことを想像してください。3年は、コンピューターサイエンスを理解するには短すぎます。
マイケルショー

私はこのアイデアが本当に好きで、複雑なグラフィックスを必要とせず、コマンドラインで合理的に行うことができます。それは楽しいし、まだ別の数学問題ソルバーではありません。
ジョッペ

7

テキストアドベンチャーゲームのように聞こえるかもしれませんが、学期中期のどこかで素晴らしい仕事になるかもしれません。Colossal Cave Adventureをプレイしてから、独自のゲームを作成するクラスがありました。早い段階で多くの基本的な構成要素を教えてくれたので、みんながそれに参加するのはとても楽しかったです。


2
楽しそうですが、小さくしてください。

7

http://projecteuler.net/の問題を1つまたは2つ使用してみて ください。これらのいくつかは非常に興味深いものであり、それらを解決するプログラムを作成することの利点を理解できます。それらは十分に小さいため、いくつかを割り当てとして実行できます。もう1つ使用したいのは、$ 1.00の単語を見つけることです。alaphabetの各文字は、ペニーでの位置に相当します。つまり、a = 1、b = 2です。1.00ドルの単語をいくつ見つけることができますか?これには、ファイルI / O(辞書での読み取り)、配列、ループなどが含まれます。


1
Project Eulerの場合は+1。とてもかっこいい。一部の問題は少し高度すぎますが、多くの問題はそうではありません。
マクニール

私はプロジェクトオイラーが大好きですが、大学でエクササイズをしなければ楽しかったかどうかはわかりません。
オリバーワイラー

それらのすべてが楽しいわけではありませんが、いくつかは私たちが良い選択だと思う
-Gratzy

6
  • モノポリーゲームを実装します。独占には明らかな順序があり、ファンクティノンへの分割に非常に簡単です。また、1次元配列といくつかの基本クラスのみが必要です。論理は非常に単純なので、学生は「何」よりも「方法」についてより多く考えるようになり、他の人に示すことができるものになります。

  • 何らかの可逆ルールで暗号化された暗号化ファイルを提供し、デコーダーを作成するように依頼します(ただし、十分に単純化してください)。これは、メッセージの内容に関する謎のため、それを解決するための特別なインセンティブを与えます。

  • マトリックスではなく1次元の配列のみをカバーする理由はわかりません(実際にはそれほど違いはありません)楽しい。

  • チェスのようなゲームにはある程度の思考が必要ですが、初心者が最小限の継承(特定のピースは一般クラスのピースから継承し、ボードはピース型のオブジェクトを保持します)、および2D配列(選択できます)の範囲内にあります敵の破片がキャスティングパスを脅かしている場合、ステルメイトの検出やキャッスル不能などのハードなものを実装する必要がないため、簡素化できます。


モノポリーゲームの提案に対して+1。2Dアレイに関しては、非常に興味深い割り当てにつながる可能性があることに絶対に同意します。ただし、2Dアレイを実行できないようにする制約があります(たとえば、教科書は既に修正されており、他にも数十億の学部政治問題があります。私の制御外の問題)。
マクニール

ああ、学校で独占ゲームを作成しなければなりませんでした。暗号化ブレーカー。
カーラ

モノポリーの場合は+1。生徒がコードを作成したら、さまざまな施設に着陸する確率を生成するように依頼します。その知識は本当に戦略的に役立ちます。
ジョシュディック

4

学校では、I / O、関数、および条件演算子のみを使用したかなり多くのプロジェクトを作成しました。オブジェクト指向プログラミングについて学習する前にすべて完了しました。これらのプロジェクトはゆっくりと進み、ますます困難になりました。言うまでもありませんが、私たちが毎週過ごした4時間は、年末に向けて十分ではありませんでした。

これらのプロジェクトはすべて、機能とI / Oだけで行われました。

  • 学ぶゲーム。あなたは多くのスティックを取り、PCは多くのスティックを取ります。繰り返す。スティックを保持している最後の人が緩みます。各ゲームの後に良くなった簡単な自己学習プログラムを作成する必要がありました。2D配列を学習する良い例です。

  • コードブレーカー。Caesar暗号化を知っていて、文字を選択し、文字の値を単語の各文字に追加します。たとえば、key = 'a'およびword = "secret"。これは「tfdsfq」になります。ファイルを読み込んで、各文字の度数分布表を作成することで実行できます。また、英語の聖書を読みます。次に、英語のアルファベットで最も使用される文字が「e」であることがわかり、それを解決できます。追加の課題:私たちの割り当てである「ab」のようなキーを使用します。I / Oを理解するための良い練習。

  • バーコードメーカー。このプログラムは、外部ライブラリを呼び出す演習でした。コードを取得し、バーコード付きの画像を生成する必要がありました。外部ライブラリを使用して画像を生成しました。

  • 巡回セールスマンの問題を解決する遺伝的アルゴリズム。これは、2〜3人のより高度なプロジェクトでした。ランダムなルートから始め、このルートは「良いルート」になるまで常に改善されます。ボーナス:ルートを使用してマップを作成します。

  • 動作するlzw圧縮プログラム。これが最後の4人プロジェクトでした。パラメータは非常に簡単でした。「Zip file.txt file.zip」など。楽しいプロジェクトですが、lzwアルゴリズムを理解するにはしばらく時間がかかりました。


とても興味深い...どの学校に行きましたか?これは最初の1年でしたか?
マクニール

情報工学の専門に向けて人々を温めるコースでした。その年以降も専門分野を変更できます。学生は基本的なループ、画面/ファイルおよび機能の一部の入出力を知っていました。
カーラ

3

計算機は、算術演算を学習するのに適したプロジェクトです。シンプルなメニューベースのコンソールアプリ、またはGUIにすることができます。開始する4つの関数(+、-、*、/)、平方根などのより複雑なもののための追加ポイント

文字列の処理については、検証の問題をいくつかお勧めします。電子メールアドレスが思い浮かぶ-それらをチェックしないままにしておくと、SQLインジェクションホールなどにつながる可能性があり、検証は比較的簡単です。追加する場合は、姓、ミドル、および姓を取得し、それらをスペースでつなぎ合わせ、またフルネームを取得して各コンポーネントに解析できるプログラムを用意します。最初は実際の生活で2番目よりも多く使用されますが、十分に単純な別の解析シナリオを考えることができませんでした。

静的な方法を示すために、電子メール検索の問題を割り当てることができます。名前と電子メールのファイルがあり、静的コンストラクターは、指定された名前の電子メールを見つける静的メソッドを使用して、名前/電子メールをリストに入れることができます。

これらがあなたにいくつかのアイデアを与えることを願っています!クラスで頑張ってください。


1
+1ありがとう!これはまさに私が探している答えです。
マクニール

ゲームは電卓よりも楽しいです。

3

課題にとって非常に興味深いクールなことの1つは、ConwayのGame of Lifeの実装を2D 記述することです。基本的な配列データ構造に非常によくマッピングされ、楽しくて非常に簡単ですが、まだいくつかの思考が必要です。好奇心と実験も開かれる可能性があります(AI)。

上級生は、追加のポイントのために3Dでバージョンを書くことができます。


3

素数ジェネレーターで繰り返します。

課題

  1. 1から100までの素数を印刷します。
  2. input1からinput2に素数を出力します。
  3. 素数世代のパフォーマンスデータを記録および印刷します。
  4. 素数世代のパフォーマンスデータをグラフ化します。
  5. 素数ジェネレーターのアルゴリズム最適化を繰り返します。

2

ACMライブラリを使用して、イントロの学生が簡単なグラフィックスとゲームを作成できるようにします。基本的な2人用のクリックベースのゲームを、あなたが概説したスキル以上のことはできませんでした。今週、彼らはFox and Houndsゲームをやっています。

できるだけ長くコンソールI / Oから離れようとしています。彼らはすべてGUIで成長しているため、最近では多くの学生にとってこれは外国の概念です。そこで、MVCに焦点を当て、モデルを正しく取得し、モデルをテストした後にのみGUIを追加します。テストは、自動化された単体テストとBlueJのコードパッドを介して行われます。いいえpublic static void main()、必要ありません。


面白い。おそらく、あなたの経験を記事やブログのエントリに書くでしょうか?

2

私は前世紀にイントロの方法を教えましたが、それはBASICでしたが、あなたのように、生徒たちが自分で考案した楽しいプロジェクトを進めたかったのです。だから私はたくさんの可能性を提案しました:

  • Wumpusのようなシンプルなアドベンチャーゲーム
  • 野球などのスポーツシミュレーション(テキストのみ、野心的なグラフィックス)
  • 遺伝的進化のシミュレーションのような科学
  • ヨットレースのようなスポーツ/科学
  • 家計の人々のためにあなた自身の銀行を持っているような投資、または投資
  • 音楽またはシンプルなグラフィカルゲーム

...または学生が考えたことは何でも。彼らは私のところに来て、「XYZを行うプログラムはどうですか」と言うでしょう。そして、私はいつも「素晴らしい」と言い、多分それをあまりにも複雑にしないように少しガイドするでしょう。

通常、彼らのプロジェクトは数百行のコードになってしまい、常に楽しんでいました。

PS学生が基本的な制御構造、I / O、配列、シーケンシャルファイルに精通した後に、この課題を与えました。それは学期のプロジェクトであり、彼らの成績の大部分であり、途中でアウトラインのような中間のマイルストーンの割り当てがあったので、彼らは最後にそれをすべてやろうとして壁にぶつかることはしませんでした。学期のできるだけ早い時期に、彼らが始めるのに十分なスキルを持っていたときに、通常は6週目か8週目までに、彼らをこれに入れたかったのです。


1

モジュールを書いたプログラムを先生に書いてもらいました。基本的に、それはゲームであり、それを解決するためにアルゴを書かなければなりませんでした、すべてがグラフィカルできれいになり、うまく動作するためにそこにありました。おそらく、独自のゲームフレームワークを作成し、それらを入れた箱の外で後で実行できるクールなことの馬鹿げたバージョンである基本的なツールを与える必要があります。


1

私のイントロコースでは、3つのプロジェクトが突き出ました

ランダムなモンドリアン絵画を表示するプログラムを作成する
BrickBreakerゲームの最初の部分を
作成し、設定された領域内でボールが跳ね返るテキストベースのアドベンチャーゲームを作成する

アルゴリズムクラスから
Serpinski三角形を実装する

これらの4つのプロジェクトは、文字列処理、ランダム化、グラフィックス、再帰、およびアニメーションの理解を深めました。


1

クラスのすべての学生はCS専攻ですか?私の推測は違います。クラスの専攻に合わせた課題を思いつきます。

例:

  • 美術の学生は、キャンバスのサイズを計算し、キャンバスの量を計算するフレームを描画するプログラムを書くことができます(キャンバスをフレームの周りにラップしてホチキスで留めるため)。

  • Econの学生は、アイテムの複利を計算できます。

  • 数学の学生は、プロジェクトオイラーから問題を選択できます。


1
このクラスは、メジャーと非メジャーを対象としています。多くは生物学です。
マクニール

面白い。アイデア:水の中を泳いでいる単細胞生物の写真を見つけてください。画像を白黒に変換します。水中の生物の数を数えるプログラムを書きます。等の水と非水、ほこり除去、間のエッジ検出、差別化:これは興味深いディスカッショントピックのすべての種類が現れます
バリー・ブラウン

バイオにとっては、頭に浮かぶ明らかなことはセルオートマトンです。bioquest.orgで略奪品を入手して、いくつかのアイデアを得ることができます。
カベットケレック10年

1

高校では、プログラミングの入門クラスを受講し、Karel J. Robotを使用しました。ロボットを表示するためのGUIを提供し、非常に基本的なセンサーと移動方法のセットを備えており、それらを拡張して面白いことをさせる必要があります。ソフトウェアの違いをまだ理解していない人にとってロボットは理解しやすいので、私は良いと思います。

また、最初にプログラミングを教えるために設計されたProcessingと、Java でもあるProcessingがあります。


0

私はここで反対者になるつもりです。プレイトイではなく、有効なビジネスタイプの問題を解決する必要があると思います。彼らがプロとして実際にやろうとしている仕事に興味を持ち、やる気を起こさせるほど真剣でなければ、イントロコースでそれらを捨てたほうがいいでしょう。本当の仕事とは、クールなものを作ることではなく、クライアントのニーズを満たすことです。また、ゲームで学んでいることと、ビジネスプログラミングで同じテクニックを使用することとを飛躍させることができない多くの人々を見てきました。

私が知っているすべての上級開発者および採用マネージャーは、最近の卒業生の質にうんざりしています。現実の世界で働くことを学ぶために必要なものに集中してみて、楽しくすることを忘れてください。


多くの学生がビジネス上の問題に興味を持っていると思います。具体的な何かを提案し、役立つ答えを改善できる場合。詳細を探しています。
マクニール

1
TI-83計算機では(簡単に)実行できない問題です。さらに別のTax Calculatorはそれを削減しません。
バリーブラウン

1
これらの学生はプログラミングに不慣れであり、このコースで赤ちゃんの一歩を踏み出す必要があります。おそらくそれを退屈にすることは、プログラミング方法を教えるための最も効率的な方法ではなく、Java仕様を端から端まで暗唱するのではなく、最高の教師を検討する必要があります。

1
いいえ。これらのプロジェクトは何よりも楽しいはずです。楽しいプロジェクトは難しい場合があります。実際、私のペットプロジェクトのほとんどは、私が仕事で行う日常的なプログラミングよりも困難です。
カーラ

2
私はあなたの意見を知っていますが、少なくとも部分的には、少なくとも入門コースについては敬意を持って同意しません。プログラミングには多くの方法がありますが、このようなコースはプログラムが実行できるさまざまなことをカバーすべきだと思います。コンピューターが「ビジネスに必要」と考える問題にのみ適していることを生徒に示すことは、創造的なプログラマーが考えることではありません。私はよく設計されたコースは、ゲームをプログラミングするように、コンピュータが行うことができます楽しいことを示すことに加えて、実世界の問題を解決するために、学生に挑戦だと思う
ニック・ドノヒュー

0

携帯電話で愚かなウィジェットを構築するための割り当て。友達に見せることができるもの。私は超安価なAT&T電話を持っていますが、それはある種のjarファイルを取ります。


0

私が見た中で最も重要な課題は、他の方法では考えられなかった何かについて人々に考えさせることです。単純なコース教材の完全に外側にあるもの、不可能と思われるもの。複数の有効なソリューションがあるもの。

私に感銘を与えたいくつか:

  1. Roshambo AI(UOAのAIコースで使用)。岩、紙、はさみに対して-1、0、1を返す単純な関数。AIは相互に競合し、統計は集約ユーティリティプログラムによって収集されます。この課題は、実行可能なアプローチの数(およびパフォーマンスの低さ)に常に人々を驚かせます。

  2. 不可能な特性を持つ単純なソート問題。有限のメモリで無限の長さのファイルをソートします。この問題は、アルゴリズムの考え方の基礎を揺るがしました。多くの関連する問題があります:無限長データなどのウィンドウ平均は、それぞれ明らかに明らかに不可能なものに対するソリューションを強制します。

  3. 些細に見えるシミュレーションの問題。交通シミュレーション(車両、ネットワーク)、レースカーシミュレーション(左、右、高速、低速)、食料品店のシミュレーション。

  4. ネットワークの問題(ここ数年で一緒に働いた卒業生の大きな弱点)。ハンドヘルドのピアネットワーキングの問題。たとえば、n-syncの問題、ピアの更新、ピアの信頼などの複雑さを証明します。

  5. 小さな言語(最近の卒業生のもう1つの弱点)。シンプルなゲームAI向けの小さな言語(チェッカー、ロシャンボ、戦車、CSSモジョ、Twitterボット)を開発します。言語の設計、解釈、およびアクションの概念を考えることは基本です。


紙、岩、はさみのAIは結果を知ることができますか?
マクニール

はい、履歴はCの例の配列を介して利用できます(ただし、Java、Rubyなどにも同様に適用されます)。オリジナルのコンテストページをご覧ください:webdocs.cs.ualberta.ca/~darse/rsbpc.html
ブルースアルダーソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.