メニュー

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

プログラミング教育の課題と改善策:初心者がつまづくポイントとその克服法

📌 この記事の結論

  • プログラミング初心者は、直感的な思考とコンピュータが要求する論理的思考の間に大きな隔たりを感じている。
  • 主な問題はプログラミング言語の構文よりも、問題の理解、アルゴリズムの設計、抽象的な概念の視覚化にある。
  • 改善策として、アルゴリズム思考を促すコースの導入構成主義的なアプローチ視覚化・シミュレーションの活用多様な学習スタイルのサポートが有効である。
  • プログラミングは知識だけでなくスキルであり、継続的な実践が不可欠である。

1. プログラミング学習の難しさ:なぜ初心者はつまづくのか?

現代ビジネスや日常生活のあらゆる側面でコンピュータプログラムは不可欠であり、これらの開発と維持のためには多くのプログラミング専門家が必要とされています。しかし、プログラミング教育の分野では、初心者が学習中に経験する再発する問題や困難が多く報告されています。

この事実は、プログラミングコースの高い失敗率につながり、長年にわたりプログラミング学習に対する否定的な意見や苦手意識を生み出してきました。これまでに多くの改善が試みられましたが、問題は今日まで解決されずに残っています。

プログラミングは特定の思考様式と、抽象的な概念や構造の理解を必要としますが、多くの初心者にとってこれらを理解し、自身のプログラミング課題に応用することは困難です。本記事では、この課題について深掘りし、その解決策について考えていきます。

2. 紹介する論文の概要

📄 論文情報

タイトル プログラミング教育の課題とその改善策 (PROBLEMS IN PROGRAMMING EDUCATION AND MEANS OF THEIR IMPROVEMENT)
著者 M. Konecki (University of Zagreb, Faculty of Organization and Informatics)
掲載誌 DAAAM International Scientific Book 2014, pp. 459-470, Chapter 37
研究対象 190名の情報科学学生
研究期間 2014年以前(論文発行年)

研究の目的

本研究は、プログラミング初心者が直面する再発する問題の原因を分析・議論し、プログラミングコースの成功率向上に向けた具体的な改善策を提案することを目的としています。

研究の方法

プログラミング初心者(情報科学学生)の学習における課題を明らかにするため、以下の方法で調査が行われました。

  1. プログラミングコースを終えた190名の情報科学学生を対象にアンケート調査を実施
  2. 学生が最も難しいと感じたプログラミングの側面や、プログラミング問題の理解、アルゴリズム設計、プログラミング言語の構文記憶に関する経験を調査。
  3. コース中に学生が作成したコンピュータプログラムの分析も行った。

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

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

この研究では、プログラミング初心者が共通して直面する問題の核心を深く掘り下げています。主な結果は以下の3つのポイントに集約されます。

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

プログラミング初心者にとって最大の課題の一つは、人間の直感的な思考とコンピュータが要求する論理的・機械的な思考の間に大きな隔たりがあることです。人間は多くの関連付けや連想に基づいて物事を処理・理解しますが、コンピュータは明確な指示、明確な境界、そして考えられるすべてのシナリオを網羅するルールを必要とします。

ドン・ノーマン(Norman & Draper, 1986)は、このギャップを「グランドキャニオン」と例え、初心者の直感とコンピュータの要求する思考様式の間に大きな隔たりがあることを指摘しました。教育の多くの努力は、ユーザー(学習者)をシステム(コンピュータ)に近づけようとするものですが、研究はプログラミングの難しさが構文そのものよりも、この「新しい思考様式」、すなわちアルゴリズム思考の理解と適用にあることを示唆しています。

✅ ポイント2:プログラミング初心者に共通する「バグ」

研究では、プログラミング初心者に共通して見られる、プログラミング概念の理解における「バグ」(Pea, 1986)が指摘されています。これらはプログラミング言語の設計よりも、コンピュータへの指示の仕方に関連するものです。

  • 並行性バグ(Parallelism bug):コンピュータが複数の処理を同時に認識したり、一度通り過ぎた条件が後から満たされれば、その処理が実行されると誤解するものです。例えば、JavaScriptで非同期処理を適切に扱わず、前の処理が終わる前に次の処理が実行されることを考慮しないといったケースが挙げられます。
  • 意図性バグ(Intentionality bug):プログラミング初心者がプログラムの一部だけを見てその動作を推測し、その結論に基づいて残りのコードを客観的に解釈しないことです。Scratchで特定のブロックの動作だけを見て、その組み合わせによる全体の挙動を正確に予測できない、といった状況が考えられます。
  • 自己中心性バグ(Egocentrism bug):プログラミング初心者が、コンピュータが自分の意図を somehow(なんとなく)理解してくれると思い込み、十分なプログラミング指示を与えないことです。Pythonで条件分岐やループ処理の終了条件を書き忘れ、無限ループに陥るといった例があります。

✅ ポイント3:構文よりもアルゴリズム設計に課題

学生を対象としたアンケート結果(Tab. 2)は、プログラミング言語の構文を覚えることよりも、与えられたプログラミング問題の理解や、概念的な解決策(アルゴリズム)の設計に、学生がより大きな困難を感じていることを示しました。

特に「アルゴリズム的解決策の設計が難しい、直感的ではない」という回答が非常に高かった(平均 4.347)です。具体的な難しいトピックとしては、連結リスト、ソート、ファイル操作、データ構造、配列、ポインタなどが挙げられ(Tab. 1)、これらはより抽象的で複雑な概念であり、学生が最も苦戦するポイントであることが示されています。

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

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

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

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

アルゴリズム思考の重要性

ScratchやRoblox Studioのようなビジュアルプログラミング環境では、構文の壁が低い分、論理的な思考(アルゴリズム)の重要性がより際立ちます。子どもたちはゲームを作る中で、キャラクターの動きやインタラクションをどうすれば実現できるか、順序立てて考える力を養っています。

視覚化とインタラクションの効果

Unityでのゲーム制作はまさにこの視覚化とインタラクションの宝庫です。C#のコードが3D空間のオブジェクトにどう影響するかをすぐに確認できるため、抽象的な概念が具体的に理解されやすくなります。例えば、変数でキャラクターの速度を調整したり、条件分岐で敵の行動パターンを変えたりする際、その場で結果が見えることで学習意欲が高まります。

モチベーションと実践の相乗効果

子どもたちは「自分の作りたいゲーム」という明確な目標があるため、自然とモチベーションが高まります。これは論文で述べられている「プログラミングはスキルであり、多くの練習が必要」という点と完全に一致します。作品を作る中で試行錯誤し、エラーを解決する過程が、まさに「構成主義的学習」の典型例となっています。

ADVANCEでは、「作りたい」という子どもの意欲を最大限に引き出しながら、ゲーム制作を通じて自然とアルゴリズム的思考を養えるカリキュラムを提供しています。単にコードを覚えるだけでなく、問題解決能力と論理的思考力を育むことを重視しています。

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

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

🏠

日常生活で「手順」を意識する問いかけ

「このおもちゃを片付けるには、どんな順番で何をすればいいかな?」「料理を作るにはどんなステップが必要?」など、日常の簡単なタスクを「手順(アルゴリズム)」として考える機会を与えてみましょう。例えば、「お買い物リストを作ろう!一番効率的なルートはどれ?」と考えるのは、SQLのデータベース最適化やPythonでの経路探索アルゴリズムの初歩的な考え方につながります。

📅

「なぜそうなった?」を一緒に考える時間

子どもがゲームやアプリで何か問題に直面したとき、「どうしてうまくいかなかったんだろう?」「どうすれば直せるかな?」と、一緒に原因を探り、解決策を考える姿勢を促しましょう。これはプログラミングにおけるデバッグ作業そのものです。HTML/CSSで要素が思った通りに表示されない、JavaScriptでクリックイベントが発火しない、といった場面を想定し、一緒に考える体験が非常に重要です。

👏

試行錯誤のプロセスを褒める

結果だけでなく、子どもが「自分で考えて、試してみた」というプロセスを具体的に褒めましょう。「色々な方法を試したね!」「難しい問題に諦めずに挑戦できてすごいね!」といった言葉は、子どもの自己肯定感を高め、学習意欲を維持する上で非常に大切です。失敗を恐れずに挑戦する姿勢は、プログラミング学習だけでなく、あらゆる分野で役立つ「成長の原動力」となります。

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

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

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

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

6. 参考文献

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. Konecki, M[ario] (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
  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等を用いたプログラミング教育を担当。子どもから大人まで幅広い年齢層への指導経験を持つ。