パスワードを忘れた? アカウント作成
102941 story
プログラミング

新人教育向けの秀逸な課題プログラムって? 201

ストーリー by hylom
言語にもよりますが 部門より

あるAnonymous Coward 曰く、

新人教育にて講師をやる事になりました。そこで新人に与える課題を考えているのですが、何か良い課題はないでしょうか?

講義は課題プログラムを与えてプログラミング、後でプログラムのアルゴリズムの説明を各人に行わせる。という形なので、各自が異なるアルゴリズムになってくれるのが理想です(閏年を求める等、パターンがある物はパス)。

このアルゴリズムにプログラミングテクニックの小技(f = -f)とかがでてくると面白いかなぁ。とか考えています。この手の課題で悩んでいる方、アドバイスをお願いします。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 時事ネタ (スコア:4, おもしろおかしい)

    by gonzo (38147) on 2009年06月02日 16時49分 (#1578337)

    コレがいいと思います。

    http://japan.cnet.com/marketing/story/0,3800080523,20393400,00.htm?ref=rss [cnet.com]
    (辞めそうな社員を見分けるアルゴリズム)

    • by phenix (31258) on 2009年06月02日 18時28分 (#1578430)

      優秀な人材を育てるはずなのに、作った本人がヒットして、
      辞めたならその人は優秀な人材で、
      辞めなかったらそうでないという
      矛盾が生じるわけですね。

      親コメント
  • 内容は何でもいいのでとにかくある程度以上の規模があり実用性のあるシステム。
    独学で学んでいない人は、単独のアプリケーションとして動作するものを作り上げたことがないことが多いと思う。
    関数レベルの制作とかアルゴリズムの制作みたいなことは学校で結構やらされるので繰り返さなくてもいいと思う。
    とにかく1個のアプリケーションを1から作り上げる経験をしないと。

    で、何を作るかだが、その会社の作っているシステムのミニ版でいいと思う。
    Web会社ならWebサイトの構築。掲示板の構築でいいと思う。UIや機能はダサくてもいいので完動し使えるものを作らせる。
    同様にしてSIなら在庫管理とかの簡単なシステム作ってみる。ゲーム会社ならミニゲームを作ってみる。

    ポイントは会社の制作するシステムのミニ版を作ることで会社のシステムに対する興味がわくこと。
    おそらく、制作の過程でいろんなことに困るはずで、「先輩達はどうやって解決しているんだろう」と思わせればしめたもの。

  • by Anonymous Coward on 2009年06月02日 17時00分 (#1578347)

    ソースコードからコメントを削除するプログラムがいいのでは。
    特にC系とかに見られるOpen/Closeのあるコメントはネストするのかとか、
    その記号が文字列の中にあるのか外にあるのかとか気にしないといけないので、
    数行というわけにも行かないですし、そこそこ楽しいと思います。
    CでCのコメント削除とかするとその言語のコメントの文法も覚えられますし(笑)

    因みに、新人研修のときに同期の書いた、コメント8割空行1割コード1割なソースを見せられて思いつきました。

  • パズル (スコア:3, 興味深い)

    by Anonymous Coward on 2009年06月02日 17時39分 (#1578380)
    新人さんに基本的なアルゴリズムの知識があるのなら、簡単なパズルを解かせるのがいいと思う。
    ネタについてはまた探しとく。
    • Re:パズル (スコア:1, 参考になる)

      by Anonymous Coward on 2009年06月02日 17時49分 (#1578390)
      ここに一票。ナンクロはいかがですか?
      アルゴリズムによって速度に差が出るので
      競い合わせると盛り上がると思います。
      親コメント
  • grep クローン (スコア:3, 参考になる)

    by strict_ansi (2886) on 2009年06月02日 20時08分 (#1578514)

    Windows 環境では(よく知りませんが)適切ではないかもしれませんが、
    grep のクローンなんていかがでしょうか。

    実際に動く grep があるので仕様の説明も楽ですし、
    ファイル入出力や文字列操作など基本的な要素が詰まっています。
    簡単にできてしまった人にも、ファイル名表示や行番号表示など
    追加課題も容易に出せます。

    もう少し簡単にして tail も良いかもしれません。
    過去に tail クローンの課題を出した時、
    ファイル全体をメモリ上に入れてしまう実装が多く提出されました。
    読んで捨てる実装にしなければならない理由や
    その方法を説明できる良い機会となりました。

    • grepの実装は面白そうですね。
      文字列からステートマシンを生成するなんてのは学校で習った知識をフルに生かせる貴重な瞬間だと思います。
      DFAにすれば展開は速いけどメモリはいりそう。
      NFAでバックトラックで解けば表現力はあがるけど時間はかかりそうだな。とか。
      時間があったらマルチバイトgrepで。
      文字クラスが複雑になりstate explosionするところなどを想像すると萌えませんか。
      親コメント
  • by yujnishi (37918) on 2009年06月02日 23時26分 (#1578690)
    printf("55\n");

    こんな人もいました。。。
    案外いろいろ出てくるかも
  • by Anonymous Coward on 2009年06月02日 20時09分 (#1578515)

    1:「1万円分、これはと思う入門書を買ってこい」
    2:「付録のCDを全部破棄して、サンプルの載ってるURLは黒塗りせよ」
    3:「本のサンプルコードを全て手打ちで打ち込み、動作を確認せよ」

     新人には嫌われたけど、送り出した先では最低限コードが読めるので助かると言われました

  • Cだけど (スコア:2, 参考になる)

    by Anonymous Coward on 2009年06月02日 20時42分 (#1578543)
    bc のクローンを作らせました。
    たとえば、icalc ((1+3)*4) とかすると 16と返してくるようなやつです。

    ただ作らせても、おもしろくないので
    詳細設計の単純なものをつくってそこに肉付けさせるところから
    やりました。

    実装では、
    コメントの付け方とか、コーディングスタイルの話とかしつつ。
    単体の機能テストまでやらせて、できあがったらはい。乙という感じでしたね。
    余裕のあるやつには、拡張して進数変換なんかもやらせました。

    この課題で教えたかったのは、
    ・設計の大切さ
    ・コメントの書き方
    ・テストの大切さ
    ・スタック操作
    ・ポインタ
    ・CVSの使い方
    でした。

    時間はかかかったけど、意味はあったと思います。

    # C++に変換させて、デザインパターンを教えようとしたところで
    # 僕の時間切れが。。。。
  • by onmyoji (18360) on 2009年06月02日 22時50分 (#1578667) 日記

    課題は何でもいいですが、軍曹風にやってみるとか。

    わたしが訓練教官のハートマン先任軍曹である!
    話しかけられたとき以外は口を開くな!
    口でクソたれる前と後に“サー”と言え!
    分かったか、ウジ虫ども!

    ふざけるな! 大声だせ! タマ落としたか!

    貴様ら雌豚どもが俺の訓練に生き残れたら各人が兵器となる!
    戦争に祈りを捧げる死の司祭だ!
    その日まではウジ虫だ!
    地球上で最下等の生命体だ!

    貴様らは人間ではない!
    両生動物のクソをかき集めた値打ちしかない!

    #5分で辞める人99%・・・

  • by nakka-man (37094) on 2009年06月02日 23時03分 (#1578678) 日記
    エレベーターの制御はどうでしょう。
    1機だけでも、例えばどの階段もボタンが押されていない時はどこで停止しておくのが効率かを考えることができますし、 2機以上になるととたんに制御が難しくなります。
    2台のエレベーターがお互いに逆方向に進行するのがベストですが、ほとんどのプログラマは同期しがちなアルゴリズムを書いてしまいます。
    1階は他の階の人間が全員乗り降りする(例えば8階建てだと7階分の人間が乗り降りする)ことを注意してあげてください。
  • パズルを解かせるとか、ソートさせるとかそんな課題たいして役に立ちません。
    実際業務で必要なのは、わかりやすい、バグが少ない、修正・仕様変更に強いプログラムです。
    (特に最後が大事)
    まずは簡単な課題を与え、途中から課題を修正し、最後に機能追加をする、
    というステップで課題を与えることが大切だと思います。
    #で、なにがいいかというとあんまり思いつかないんですがね
  • 学生時代、schemeの課題だったと思うけど、自分自身(ソースコード)を出力するプログラムをかけ、という課題があった(ファイルの読み込みは×)。Cでも書いてみたけど、パズルチックでなかなか難しかった記憶が。

  • 基本に忠実に (スコア:1, すばらしい洞察)

    by Anonymous Coward on 2009年06月02日 17時22分 (#1578365)
    直属の上司にその日の研修内容を100字以内にまとめて報告。
    まずは文字数減らす苦労を知ってもらわないと。
    #部長→上司の役員への週報が24文字以内だったかな。
  • 多分課題は1つじゃないですよね?
    ならば、「大きくて難しいのをやる前に、流れをつかむために1問やってみよう」という形で、Hacker's Delight から1問か2問出すのはどうでしょう??

    • x & ( -x ) (あ…これは答の方だ)
    • 32bit変数上の 1 になっているビットを数えろ( Chapter 5 の最初 )。
    • LSB(一番下の位) から見て、最初に1 になっているビット番号は? ただし、LSB の番号が0で、変数は 32bit。
                全部0の場合は 32 を返すのでOK。

    この程度なら、考えるのに1時間もあれば十分(というか、1時間で思いつかないなら1日だろうが1週間だろうが思いつかない)でしょうし、コーディングも1時間もあれば十分でしょう(難しい事を考えなければ)。

    --
    fjの教祖様
  • by yurie (35185) on 2009年06月02日 17時41分 (#1578382)

    brainf*ckのインタプリタはどうでしょうか
    http://ja.wikipedia.org/wiki/Brainfuck [wikipedia.org]

    • Re:brainf*ck (スコア:2, 参考になる)

      by tnk (13707) on 2009年06月02日 18時01分 (#1578403)

      brainf*ckは,インタプリタよりコンパイラの方がいいかも。
      (参考:http://ja.doukaku.org/80/nested/)

      で,ただのコンパイラだと簡単すぎるので,最適化機能をつけさせて,mandelbrot.bf [uni-paderborn.de]の実行時間を競わせてみるとか。

      親コメント
  • by Anonymous Coward on 2009年06月02日 17時46分 (#1578388)
    とりあえず、現実をぶつけてみるのはいかがでしょう。新人がコードを読むことで、内部の人間が当たり前だと思っていたことが、非効率だと気づかされることがあるかもしれませんし、議論する中で、当たり前のことにも合理性が再認識される可能性があります。

    それに、デバッグ箇所について、それぞれ理由を説明させることで、理解度も分かると思います。

    新人教育が、その職場環境に新人を適応させることであるならば、現場でありえそうにない課題をぶつけるよりも、普通に転がっている課題をぶつけるべきだと思います。

    #本職でないのでAC。
    • by Anonymous Coward on 2009年06月02日 17時55分 (#1578396)

      OJTの新人にコードを読ませていたら、受注元のSEの前で「先輩先輩、バグ見つけましたよ」と得意げに。
      ただでさえバグ頻発して問題になりかかっていたシステムだったので、その後の修羅場は酷かった。

      # 隣の島の出来事だったのでAC

      親コメント
  • 新人のレベル、目指すレベルにもよりますが、私なら、

    アルゴリズムの勉強というより、プログラムの作法の
    勉強が中心になってしまいますが、

    出来の良いグラフィカルユーザーインターフェイスの
    ライブラリのソースを与えて、色々と機能を拡張した
    派生クラスを作って貰うとか。

    どんな拡張をするかは、仕様書を与えてもよいし、
    大雑把なお題だけで、仕様等ドキュメントも含めて
    作成して貰ってもよいかな、レベル次第。

    本当に出来が良ければ、ライブラリにマージしても
    よいし、一生使う機会が無さそうな入力支援機能でも、
    作りが確りしていれば、来年の教材のサンプルに使える
    かも・・・って、ここ数年、私が教えるような新人なん
    て配属されてないじゃん。
  • by milito (34254) on 2009年06月02日 18時55分 (#1578452)

    もちろん力業ではなく。

    #そもそもアルゴリズムが見つかるかどうか

  • いかがでしょうか.
    ライブラリ無しで自分でソケット開いて,htmlパースして,URLをスタックに詰めたり.
    プロトコルも含め,ネットワークに,文字列操作,データ構造の理解とか,一粒で何度もおいしいかも.
    もちろん,肝心なモチベーションも(w

typodupeerror

アレゲはアレゲを呼ぶ -- ある傍観者

読み込み中...