メニュー

堺市で運営しているプログラミングスクールADVANCEの教室の様子

プログラミング教育の課題と改善策|初心者向け学習のポイント

📌 この記事の結論

  • プログラミング学習では、初心者の「直感的な思考」とコンピューターの「アルゴリズム的思考」の間に大きなギャップがあることが最大の課題です。
  • プログラミング言語の構文よりも、問題解決のためのアルゴリズム設計が難しいと感じる学生が多いです。
  • このギャップを埋めるためには、アルゴリズム的思考を訓練する専用のコースや、視覚化、インタラクション、例による学習、そしてモチベーション向上が不可欠です。
  • プログラミングは知識だけでなく「スキル」であり、継続的な実践と練習が成功の鍵を握ります。

1. プログラミング教育における長年の課題

現代社会において、コンピュータープログラムはビジネスや日常生活のあらゆる側面で不可欠な存在です。そのため、プログラミングに関する深い知識を持つ専門家の育成は極めて重要ですが、プログラミング教育には長年にわたり解決されない問題と困難が伴っています。

特にプログラミング初心者にとって、その抽象的な概念は理解しにくく、高い失敗率や学習意欲の低下を引き起こす原因となっています。多くのプログラミング言語が初心者向けに開発されてきましたが、いずれも決定的な解決策には至っていません。なぜこのような状況が続くのでしょうか?

本記事では、2014年のDAAAM International Scientific Bookに掲載されたM. Konecki氏の論文「Problems in Programming Education and Means of Their Improvement(プログラミング教育における問題点とその改善策)」を基に、プログラミング初心者が直面する具体的な問題と、その改善に向けた効果的なアプローチについて深く掘り下げていきます。

2. 紹介する論文の概要

📄 論文情報

タイトル Problems in Programming Education and Means of Their Improvement
(プログラミング教育における問題点とその改善策)
著者 KONECKI, M. (Mario Konecki)
掲載誌 DAAAM International Scientific Book 2014, pp. 459-470, Chapter 37
研究対象 プログラミング学習における初心者の問題、教育方法論
研究期間 2014年以前に実施された研究

研究の目的

本論文は、プログラミング教育における長年の問題点と困難を分析し、それらの改善策を提案することを目的としています。特に、プログラミング初心者が抽象的な概念を理解しにくいという課題に焦点を当て、その原因と具体的な解決策を議論しています。

研究の方法

著者は、既存の文献レビューを通じてプログラミング学習の困難さを確認した後、190名の情報科学専攻の学生を対象とした調査を実施しました。この調査は、プログラミングコースの講義終了時にアンケート形式で行われ、学生が最も困難だと感じるプログラミングの側面や、問題の理解、アルゴリズム設計、構文記憶に関する経験が尋ねられました。

  1. プログラミングコースにおける学生の失敗率と中退率に関する先行研究の分析。
  2. プログラミング初心者が直面する一般的な「バグ」の分類(並行性、意図性、自己中心性)。
  3. 190名の情報科学専攻学生に対するアンケート調査。
  4. アンケート結果に基づき、学生が困難と感じるプログラミングトピックを特定(連結リスト、ソート、ファイル操作など)。
  5. プログラミング問題の理解、アルゴリズム設計、構文記憶に関する自己評価の収集。
  6. これらの分析結果と既存の研究に基づいた、教育改善のための具体的なステップの提案。

3. 研究結果のポイント3つ

堺市で運営しているプログラミングスクールADVANCEの教室の様子

本研究から明らかになった、プログラミング初心者が直面する主な問題と、それらが教育に与える影響に関する3つの重要なポイントをまとめました。

✅ ポイント1:直感的な思考とアルゴリズム的思考の大きなギャップ

プログラミング初心者が直面する最大の課題は、人間の直感的な思考とコンピューターが要求する機械的で論理的な思考の間に存在する「グランドキャニオンのように広いギャップ」です。人間は多くの情報を同時に処理し、連想や適応によって問題を解決しますが、コンピューターは明確な手順、境界、そしてあらゆる可能性を網羅した指示を必要とします。この違いが、初心者がプログラムの振る舞いを予測したり、正確な指示を書いたりするのを困難にしています。

✅ ポイント2:初心者に共通して見られる3つの「思考のバグ」

プログラミング初心者には、年齢に関わらず共通して見られる概念的な「バグ」が存在します。これらはプログラミング言語の構文ではなく、コンピューターへの指示の仕方に起因するものです。

  • **並行性バグ (Parallelism bug)**: コンピューターが複数のプログラミング行を同時に認識したり、過去の条件を後から実行したりすると誤解する。例えば、一度通過した条件式が後で満たされた際に、自動的にその条件ブロックが実行されると考えるなど。
  • **意図性バグ (Intentionality bug)**: プログラムの一部だけを見て、その意図を推測し、残りのコードを客観的に解釈しない。自分の推測を事実とみなし、プログラム全体の動作を誤って判断してしまう。
  • **自己中心性バグ (Egocentrism bug)**: コンピューターが自分の意図を「 somehow figure out(なんとなく理解してくれる)」と過信し、必要な指示を省略してしまう。特に条件分岐や繰り返し処理で、網羅的な指示が不足しがちになる。

✅ ポイント3:構文よりも問題理解とアルゴリズム設計の難しさ

学生へのアンケート調査では、プログラミング言語の構文を覚えることよりも、与えられたプログラミング問題の内容を理解し、その概念的な解決策やアルゴリズム(疑似コード)を設計することに大きな困難を感じていることが明らかになりました(Tab. 2参照)。特に、連結リスト、ソート、ファイル操作、データ構造、配列、ポインターといった抽象度の高い概念は、多くの学生にとって理解が難しいと報告されています(Tab. 1参照)。これは、コースの進度が抽象的な概念の導入とともに、学生の学習困難度が増すことを示唆しています。

4. ADVANCEの現場から見た実感

堺市で運営しているプログラミングスクールADVANCEの教室の様子
▲ ADVANCEの教室で学ぶ様子(イメージ)

堺市南区のプログラミングスクールADVANCEで実際にプログラミングを教えている講師としての意見は以下の三つです

🎮 現場で感じる3つの変化

思考のギャップを埋めるアプローチの重要性

論文で指摘されている「直感的な思考とアルゴリズム的思考のギャップ」は、日々の指導でも強く感じます。例えば、Scratchでキャラクターを動かす際、「このボタンを押したら、この順番で、この動きをする」と具体的に指示しないと動かないことを理解するのに時間がかかる生徒がいます。ADVANCEでは、「コンピューターは命令されたことしかできない」という基本を、ゲームを通じて繰り返し体験させることで、このギャップを自然と埋めることを意識しています。

モチベーションが学習効果を大きく左右する

「モチベーション」が成功要因であるという論文の指摘は、まさに現場の肌感覚と一致します。子どもたちはゲーム制作という具体的な目標があることで、難しい課題にも意欲的に取り組みます。Roblox StudioやUnityで自分の作りたいものを形にする過程で、エラーに直面しても「どうすれば解決できるか?」と前向きに考えられるのは、強いモチベーションがあるからです。成功体験を積み重ね、小さな達成感を常に与えることが、学習の継続に不可欠だと感じています。

視覚化と実践による抽象概念の具体化

「連結リスト」や「ポインター」のような抽象的なデータ構造は、子どもには特に理解が難しいものです。論文が推奨するように、ADVANCEでは「視覚的なフィードバック」と「実践」を重視しています。例えば、Unityの変数(Pythonでいう変数の箱)がゲーム内のオブジェクトの動きをどう制御するかを実際にコードを書いて動かし、結果をすぐに画面で確認することで、抽象的な概念が具体的な意味を持つようになります。エラーメッセージもただの文字ではなく、「どこをどう直せば動くか」を考えるヒントとして捉えられるよう指導しています。

ADVANCEでは、この論文で提唱されている「アルゴリズム的思考を促す追加コースの導入」や「視覚化とインタラクションの活用」といった要素を、ScratchからUnity(C#)に至るまで、各コースのカリキュラム設計に積極的に取り入れています。ゲーム制作を通じて、子どもたちが楽しみながら自然とプログラミング的思考を身につけられるよう、日々工夫を凝らしています。

5. 保護者の方へ:家庭でできること

プログラミング学習の成功には、学校やスクールだけでなく、家庭でのサポートも大きな影響を与えます。論文で示された課題と改善策を踏まえ、保護者の方がご家庭でできることをいくつかご紹介します。

🏠

論理的思考を促す日常会話

「どうしてそうなると思う?」「他にやり方はないかな?」など、お子さんに順序立てて物事を考える質問を投げかけてみましょう。これは、プログラミングにおけるアルゴリズム設計の基礎となります。例えば「朝の準備は何から始める?」といった身近な話題でも十分です。

📅

「小さな実践」を続ける習慣を

プログラミングは「スキル」であり、継続的な練習が重要です。毎日長時間取り組む必要はありません。例えば、「今日は30分だけScratchで新しいブロックを試してみよう」「昨日作ったプログラムのバグを見つけてみよう」など、短時間でも良いので、定期的にプログラミングに触れる時間を作ることを促しましょう。

👏

プロセスを具体的に褒める

結果だけでなく、試行錯誤する過程や、エラーを解決しようと努力した点を具体的に褒めてあげましょう。これはお子さんのモチベーションを維持し、失敗を恐れずに挑戦する心を育みます。「よく考えてこのブロックを繋げたね!」「エラーが出たけど、自分で調べて直そうとして偉いね!」といった声かけが有効です。

🎮 ADVANCEで一緒にプログラミングを始めませんか?

堺市南区のプログラミングスクールADVANCEでは、Scratchからはじめて、Roblox、Unity(C#)まで段階的に学べます。

研究で効果が実証されたプログラミング教育を、ゲーム制作を通じて楽しく体験できます。

🕹️ ▶ ぼうけんを はじめる 無料体験会に申し込む! 🎮

6. 参考文献

  1. Konecki, M. (2014). Problems in Programming Education and Means of Their Improvement, Chapter 37 in DAAAM International Scientific Book 2014, pp.459-470, B. Katalinic (Ed.), Published by DAAAM International, ISBN 978-3-901509-98-8, ISSN 1726-9687, Vienna, Austria DOI:10.2507/daaam.scibook.2014.37
  2. Alaoutinen, S. & Smolander, K. (2010). Student self-assessment in a programming course using bloom's revised taxonomy, Proceedings of the 15th Annual Conference on Innovation and Technology in Computer Science Education, Laxer, C. (Ed.), pp. 155-159, ISBN 978-1-60558-820-9, Bilkent, Ankara, Turkey, June 26th - 30th, ACM, New York, NY, USA
  3. Baldwin, L. P. & Kuljis, J. (2001). Learning programming using program visualization techniques. Proceedings of the 34th Annual Hawaii International Conference on System Sciences, Sprague, R. H., Jr. (Ed.), pp. 1051-1058, ISBN 0-7695-0981-9, Maui, Hawaii, USA, January 3rd - 6th, IEEE, Washington, DC, USA
  4. Ben-Ari, M. (1998). Constructivism in computer science education. ACM SIGCSE Bulletin, Vol. 30, No. 1, March 1998, pp. 257-261, ISSN 0-89791-994-7
  5. Bennedsen, J. & Caspersen, M. E. (2007). Failure rates in introductory programming. ACM SIGCSE Bulletin, Vol. 39, No. 2, June 2007, pp. 32-36, ISSN 0097-8418
  6. Bergin, S. & Reilly, R. (2005). The influence of motivation and comfort-level on learning to program. Proceedings of the 17th Annual Workshop on the Psychology of Programming Interest Group, Douce, C. (Ed.), pp. 293-304, University of Sussex, Brighton, UK, June 28th - July 1st, Psychology of Programming Interest Group, UK
  7. Dolinay, J.; Dostalek, P. & Vasek, V. (2010). Simple operating system RTMON for HC08 microcontrollers. Annals of DAAAM for 2010 & Proceedings of the 21st International DAAAM Symposium, Katalinic, B. (Ed.), pp. 0515-0516, ISSN 1726-9679, ISBN 978-3-901509-73-5, Zadar, Croatia, October 20th - 23rd, DAAAM International, Vienna, Austria, EU
  8. Dolinay, J.; Dostalek, P. & Vasek, V. (2011). Graphical user interface simulators for lessons of real-time programming. Annals of DAAAM for 2011 & Proceedings of the 22nd International DAAAM Symposium, Katalinic, B. (Ed.), Vol. 22, No. 1, pp. 395-396, ISSN 1726-9679, ISBN 978-3-901509-83-4, Vienna, Austria, November 23rd - 26th, DAAAM International, Vienna, Austria, EU
  9. Fincher, S.; Robins, A.; Baker, B.; Box, I.; Cutts, Q.; de Raadt, M.; Haden, P.; Hamer, J.; Hamilton, M.; Lister, R.; Petre, M.; Sutton, K.; Tolhurst, D. & Tutty, J. (2006). Predictors of success in a first programming course. Proceedings of the 8th Australasian Conference on Computing Education, Tolhurst, D. & Mann, S. (Eds.), Vol. 52, pp. 189-196, ISBN 1-920682-34-1, Hobart, Australia, January 16th - 19th, ACS, Darlinghurst, Australia
  10. Ford, M. & Venema, S. (2010). Assessing the success of an introductory programming course. Journal of Information Technology Education: Research, Vol. 9, No. 1, January 2010, pp. 133-145, ISSN 1539-3585
  11. Gomes, A. & Mendes, A. J. (2007). An environment to improve programming education. Proceedings of the 2007 International Conference on Computer Systems and Technologies, Rachev, B.; Smrikarov, A. & Dimov, D. (Eds.), Art. No. 88, pp. 1-6, ISBN 978-954-9641-50-9, Rousse, Bulgaria, June 14th - 15th, ACM, New York, USA
  12. Hanks, B.; McDowell, C.; Draper, D. & Krnjajic, M. (2004). Program quality with pair programming in CS1. Proceedings of the 9th Annual SIGCSE Conference on Innovation and Technology in Computer Science Education, Boyle, R. (Ed.), pp. 176-180, ISBN 1-58113-836-9, Leeds, United Kingdom, June 28th - 30th, ACM New York, NY, USA
  13. Hawi, N. (2010). Causal attributions of success and failure made by undergraduate students in an introductory-level computer programming course. Computers & Education, Vol. 54, No. 4, May 2010, pp. 1127-1136, ISSN 0360-1315
  14. Hu, M. (2004). Teaching novices programming with core language and dynamic visualization. Proceedings of the 17th NACCQ, Mann, S. & Clear, T. (Eds.), pp. 94-103, ISBN 0-476-00726-7, Christchurch, New Zealand, July 6th - 9th, NACCQ, Hillcrest, Hamiliton, New Zealand
  15. Jenkins, T. (2002). On the difficulty of learning to program. Proceedings of the 3rd Annual Conference of the LTSN Centre for Information and Computer Sciences, pp. 53-58, ISBN 0-9541927-1-0, Loughborough, UK, August 27th - 29th, ICS Subject Centre, Ulster, Ireland
  16. Kinnunen, P. & Malmi, L. (2006). Why students drop out CS1 course? Proceedings of the 2nd International Workshop on Computing Education Research, Anderson, R.; Fincher, S. A. & Guzdial, M. (Eds.), pp. 97-108, ISBN 1-59593- 494-4, University of Kent, Canterbury, UK, September 9th - 10th, ACM, New York, NY, USA
  17. Lister, R.; Adams, E. S.; Fitzgerald, S.; Fone, W.; Hamer, J.; Lindholm, M.; McCartney, R.; Moström, J. E.; Sanders, K.; Seppälä, O.; Simon, B. & Thomas, L. (2004). A multi-national study of reading and tracing skills in novice programmers. ACM SIGCSE Bulletin, Vol. 36, No. 4, December 2004, pp. 119-150, ISSN 0097-8418
  18. McCracken, M.; Almstrum, V.; Diaz, D.; Guzdial, M.; Hagan, D.; Kolikant, Y. B.-D.; Laxer, C.; Thomas, L.; Utting, I. & Wilusz, T. (2001). A multi-national, multi-institutional study of assessment of programming skills of first-year CS students. ACM SIGCSE Bulletin, Vol. 33, No. 4, December 2001, pp. 125-140, ISSN 0097-8418
  19. Nikula, U.; Gotel, O. & Kasurinen, J. (2011). A motivation guided holistic rehabilitation of the first programming course. ACM Transactions on Computing Education (TOCE), Vol. 11, No. 4, November 2011, Art. No. 24, ISSN 1946-6226
  20. Norman, D. A. & Draper, S. W. (1986). User-Centered System Design: New Perspectives on Human-Computer Interaction, Norman, D. A. & Draper, S. W. (Eds.), Lawrence Erlbaum Associates, ISBN 0-89859-781-1, Hillsdale, New Jersey
  21. Pea, R. D. & Kurland, D. M. (1983). On the Cognitive Prerequisites of Learning Computer Programming. Technical Report No. 18, June 1983, Bank Street College of Education, Center for Children and Technology, New York, NY, USA
  22. Pea, R. D. (1986). Language-independent conceptual "bugs" in novice programming. Journal of Educational Computing Research, Vol. 2, No. 1, pp. 25-36, Baywood Publishing Co., Inc., New York, NY, USA
  23. Pears, A.; Seidman, S.; Malmi, L.; Mannila, L.; Adams, E.; Bennedsen, J.; Devlin, M. & Paterson, J. (2007). A survey of literature on the teaching of introductory programming. ACM SIGCSE Bulletin, Vol. 39, No. 4, December 2007, pp. 204-223, ISSN 0097-8418
  24. Peng, W. (2010). Practice and experience in the application of problem-based learning in computer programming course. Proceedings of the International Conference on Educational and Information Technology (ICEIT), Yuting, L. (Ed.), Vol. 1, pp. 170-172, ISBN 978-1-4244-8033-3, Chongqing, China, September17th - 19th, IEEE, Piscataway, New York, NY, USA
  25. Robins, A.; Rountree, J. & Rountree, N. (2003). Learning and Teaching Programming: A Review and Discussion. Journal of Computer Science Education, Vol. 13, No. 2, April 2003, pp. 137-172, ISSN 0899-3408
  26. Smith, D. C.; Cypher, A. & Tesler, L. (2000). Programming by example: novice programming comes of age. Communications of the ACM, Vol. 43, No. 3, March 2000, pp. 75-81, ISSN 0001-0782
  27. Smith, P. A. & Webb, G. I. (2000). The efficacy of a low-level program visualization tool for teaching programming concepts to novice C programmers. Journal of Educational Computing Research, Vol. 22, No. 2, April 2000, pp. 187-216, ISSN 0735-6331
  28. Sorva, J.; Karavirta, V. & Malmi, L. (2013). A review of generic program visualization systems for introductory programming education. ACM Transactions on Computing Education (TOCE), Vol. 13, No. 4, November 2013, Art. No. 15, ISSN 1946-6226
  29. Tan, P. H.; Ting, C. Y. & Ling, S. W. (2009). Learning difficulties in programming courses: undergraduates' perspective and perception. Proceedings of the IEEE International Conference on Computer Technology and Development, Jusoff, K.; Othman M. & Xie Y. (Eds.), Vol. 1, pp. 42-46, ISBN 978-0-7695-3892-1, Kota Kinabalu, Malaysia, November 13th - 15th, IEEE, Los Alamitos, California,USA.
  30. Wiedenbeck, S. (1999). Novice comprehension of small programs written in the procedural style. International Journal Human-Computer Studies, Vol. 51, No. 1, July 1999, pp. 71–87, ISSN 1071-5819
  31. Wiedenbeck, S.; Ramalingam, V.; Sarasamma, S. & Corritore, C. L. (1999). A comparison of the comprehension of object-oriented and procedural programs by novice programmers. Interacting With Computers, Vol. 11, No. 3, January 1999, pp. 255-282, ISSN 0953-5438
  32. Yadin, A. (2011). Reducing the dropout rate in an introductory programming course. ACM Inroads, Vol. 2, No. 4, December 2011, pp. 71-76, ISSN 2153-2184
👨‍🏫

この記事を書いた人

ADVANCE 講師

堺市南区のプログラミングスクールADVANCEで、Scratch・Roblox・Unity等を用いたプログラミング教育を担当。子どもから大人まで幅広い年齢層への指導経験を持つ。