Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

プログラミングスキルの獲得について考えてみた

3,815 views

Published on

日本Androidの会 秋田支部月例ミーティング#44

Published in: Education
  • Be the first to comment

プログラミングスキルの獲得について考えてみた

  1. 1. プログラミングスキルの 獲得について考えてみた • なぜスキルテストにFizzBuzzが有効なのか? • 何をテストで評価しているのか? • スキルを鍛えるには? 2016-01-15 JAGA#44 清水悟(@shimitei)
  2. 2. 経験年数に依らないスキル評価 •コーディングテスト Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”. http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/
  3. 3. (し) 変数i は 3の倍数 である (だ) 変数i は 5の倍数 である (ま) 変数i は 15の倍数 である (や) 変数i は 3の倍数 または 5の倍数 である (な) 変数i は 3の倍数 かつ 5の倍数 である (こ) Fizz を出力する (ん) Buzz を出力する (で) FizzBuzz を出力する #include <stdio.h> int main(void) { int i; for (i = 1; i <= 100; i++) { if (isx3orx5(i)) { printf(“xxxxxxxx¥n"); } else if (isx3xxxx(i)) { printf(“xxxxxxxx¥n"); } else if (isx5xxxx(i)) { printf(“xxxxxxxx¥n"); } else { printf("%d¥n", i); } } return 0; } ( A ) ( C ) ( E ) ( F ) ( D ) ( B )  文法、構文  ループ処理を書けるか?  条件分岐を書けるか?  アルゴリズム(問題を解く手順)  アルゴリズムを組み立てることができるか?  組み立てた通りのコードを書けるか?  そのアルゴリズムは正しいか?
  4. 4. プログラミングスキルとは? プログラム = アルゴリズム と データ構造 「プログラミングができる」とは 文法がわかる 適切なデータ構造とアルゴリズムを選択し、記述できる ※アルゴリズムとは、問題を解く手順
  5. 5. スキル評価サイト • Paiza http://paiza.jp/ おすすめ ※「転職」を目的としたスキルチェックを受けることができます • CodeIQ https://codeiq.jp/ 制限時間はあってないようなもの 数学パズル性が高め?
  6. 6. 未経験者の評価 求人条件の未経験者歓迎とは? 実務経験不問 スキルを有する or 見込みがある テストをパスできればOK 確認方法???
  7. 7. プログラミングの素質?適性? • The camel has two humps http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf 「一貫した論理的思考」が可能かどうかが重要 http://credo.asia/2015/04/24/before-education-programing/ ふたこぶらくだグラフ等
  8. 8. プログラミング習得の障害は何か? • 文法 なじめない、飲み込めない。 日本語、英語などの自然言語は文法がでたらめであっても 聞き手読み手が解釈をくみ取る。 プログラミング言語では曖昧さは許容されない。 • FizzBuzz(アルゴリズム) 応用がうまくできない。 複雑なものになると対処できなくなる。
  9. 9. 認知機能の学習がうまくいかない理由 1. バグ修正の問題 2. 領域固有性の問題 3. 不良構造化問題 4. メタ認知の問題 5. 熟達化の問題
  10. 10. 第二言語習得の理論 https://ja.wikipedia.org/wiki/第二言語習得の理論 インプット仮説 インプットの量が言語習得に係わる重要な要素の一つ 学習者の能力より少し上のレベルのインプットを受けた場合に 習得が行われる
  11. 11. プログラミングの教材、環境 • 独習のハードル 間違いがわからない、正しいかわからない • 文法、構文 正解を参照する。チートシート、コード・スニペット活用。 • データ構造、概念 配列、リスト、ハッシュ、キュー、…、スレッド、再帰、… • アルゴリズム 「データ構造とアルゴリズム」本には定石は載っている。 自分で手順を組み立てられるようになる手立て?
  12. 12. 事例 • パズルの解法を通じて学ぶプログラミングの基礎(数独をExcelで解く) http://www.kozuki.or.jp/ronbun/itsubsidy/itsub15_yamagami.pdf アルゴリズムは「分割統治」、より小さな独立した問題に切り分ける。 適切な難易度の、小さな設問 一つひとつは理解できる 視覚的な実行結果がすぐに得られる エラー等の問題を解消できる指導員の存在 http://www.kozuki.or.jp/ronbun/itsubsidy/itsub15_yamagami.pdf
  13. 13. アルゴリズムちからを 鍛えるのに最適な環境はこれだ! •少ない命令 必然的に文法エラーもわかりやすい (TIS-100だ…) •すぐに実行できて、視覚的に確認できる (TIS-100だ…)
  14. 14. TIS-100とは? ゲーム • 主人公(=あなた)の叔父に当たる人物が最近、原因不明の死を遂げた • 叔父は生前プログラマーで、遺品整理していたらTIS-100という1980年代製の 謎のコンピュータが出てきた • TIS-100の中には叔父の生前のメッセージや日記などが残っていた • 主人公であるあなたはTIS-100のプログラムを復活させてすべての謎を解き明 かしていく http://akisute.com/2015/12/pyspa-advent-calendar-2015-2015-goty.html より
  15. 15. TIS-100のアーキテクチャ  分散コンピューティング • 各プログラムは横に4つx縦に3つ、最大12個の「ノード」と、 複数の「入力ポート」「出力ポート」で構成される • 各ノードは最大上下左右4つの「ポート」で結ばれている • 各ノードにはアセンブリ言語を用いて命令を記述できる • 各ポート間はGo言語のチャンネルのような仕様を用いて入力・出力を行ったり、 各ノード間の協調動作を行ったりすることができる。 • 各ノードの命令はすべて並列で実行される http://akisute.com/2015/12/pyspa-advent-calendar-2015-2015-goty.html より
  16. 16. コンピュータ サイエンス アンプラグド • コンピュータを使わない情報教育 http://www.etext.jp/publish/unplugged.html http://www.csunplugged.jp/ コンピュータの操作方法、 プログラミング言語の文法に時間を取られることが無い。 論理的思考力、問題解決能力は プログラミング以外にも役立つ
  17. 17. • プログラミング学習サイトまとめ http://www.kagua.biz/teach/codelearning.html まとめた人のあとがき(教育関連まとめ) http://www.kagua.biz/teach/cordeducation-matomereview.html

×