プログラミングの学習は時間と労力のかかる学習で、途中で学習を挫折してしまう事も珍しくありません。学習が思ったように進まないと、自分はプログラミングに向いていないのではといった迷いが出ることも少なくないでしょう。

このような問題についての研究は長年続けられており、2015年にラトビア大学のJuris Borzovs氏、Lalia Niedrite氏、Darja Solodovnikova氏らが「コンピュータプログラミング適性検査による中退学生の削減」という論文を発表しました。この論文では心理テスト、高校数学の補修講座、出願前のプログラミング体験、メンタープログラムなどによるドロップアウト削減施策が講じられました。

今回はこの論文の中から特に目に付いた点を紹介します。

半数近くの学生がコンピュータサイエンスを初年度に中退

ラトビア大学ではコンピューティング学部の学生の三分の一から半分の学生が初年度に中退する傾向が続いていました。これにより学生と教員の時間と労力が無駄になり、大学の提供する教育が非効率なのではという疑念も出てきます。これによりラトビア大学では中退を引き起こす要因の調査を行う事になりました。

MBTI診断テストとプログラミング学習の関連

プログラミング適正検査の手法の一つとして心理テストが使われています。ある研究では質問を元に16の性格タイプを診断するMBTIとプログラミング学習に関連性がある事が研究で言及されています。

MBTIには外向型、内向型、感覚型、直観型、思考型、感情型、判断型、認知型といった項目の組み合わせで判定されます。研究の結果、感覚型の学生は直感型の学生よりもプログラミング課題の成績が優れていました。また判断型の学生は認知型の学生よりもプログラミングの水準が優れていました。

MBTI、MBTIを基にしたテストは多数ありますが、オンライン上では下記のものが人気があるように見えます。診断結果のアルファベット4文字の中にS(感覚)かJ(判断)のどちらかや両方がある場合にプログラミングの成績が良いグループにあてはまります。

MBTIのような性格テストを使った適性検査は単独でキャリア選択を決定できるほど絶対的なものではない点は注意が必要です。また外向的な性格か、内向的な性格かというのはプログラミング学習の成績とは関連していないというのも興味を惹かれました。

EQが低い方がプログラミング能力が高い?

別の研究ではSQ (Systemizing Quotient)とEQ (Empathy Quotient)を組み合わせた分析が行われました。SQはシステム化指数とよばれシステムの理解、関心を測ります。一方のEQは共感化指数と呼ばれ他者の感情への理解、関心を測ります。

研究ではSQ、EQそれぞれだけを見た結果とプログラミング課題の成績には相関は見られませんでした。ですがSQ - EQ、つまりSQからEQを引いた差が大きい学生はプログラミング課題の成績が優れていました。こうしたタイプの人は理解できない他人と関わるよりも理路整然としたシステムと関わる事を好む傾向があります。また、こうしたタイプの性格はプログラミングに限らず学習に非常に大きな努力が求められる活動への適正があるとされています。

能力の高いプログラマの中には一般的な社会性からかけ離れた部分がある人物がいる事を体験した事がある人は多いかと思います。この研究内容はそうした出来事の背景を指し示している可能性があります。

プログラミングか数学が好きだと好影響

研究ではコンピューティング学部の志望動機とその後の学習の状況についても調査しています。学生がコンピューティング学部を志望した理由としては下記の6つが主要な回答が挙げられいます。

  • コンピュータに関するものが好き
  • 将来の高い給料の可能性
  • 学習の質が高そう
  • プログラミングをしたことがあり、好き
  • 将来職を見つけやすい専門性を身につけたい
  • 数学に興味がある

どれもコンピューティング学部に進む理由としてはよくありそうなものですが、この中でその後の学習の進み具合に良い影響があったのは「プログラミングをした事があり、好き」「数学に興味がある」の二つのみでした。これは実際のプログラミングという作業が想像できていない事、数学の必要性を低く見積もっていることがあると指摘しています。

確かにプログラミングには地味な作業とトラブルシューティングの繰り返しが求められ、これが合わないということで挫折してしまう人は多いでしょう。なんらかの形で既にプログラミングを経験した上でそれが好きというのは良い素質があるということなのでしょう。同様に給料や就職に関する興味の強さが、実際の作業内容の理解や関心の低さを示している可能性も指摘されています。

また同様にプログラミングに数学が必要になるかどうかという議論もよく見かけます。ラトビアには高校の各教科の補講とそれに応じた認定資格があります。この数学の受講と認定資格取得の有無がドロップアウトに相関していることが調査結果で判明しています。これによりコンピューティング学部の学習を進める上では数学または数学で培われる能力が求められるということが結果に表れています。

ラトビア大学のドロップアウト対策

論文は分析結果を元にしたドロップアウトを減少させる為の対策についても触れています。それまで志望者のタイプに応じて複数の施策を組み合わせたプランが提唱されています。

まず最初に上がっているのがScratchを利用したプログラミング体験です。ラトビア大学ではオンラインで体験できる講座「School of Young Programmer」を志望者がコンピューティング学部に出願する前にプログラミングがどのような作業なのか、自身が好きなのかどうかを確認させようとしています。同様に性格テストなどの適性検査も出願や履修の前に活用する事で自分自身の性質にあった取り組みを行うように活用されています。

二つ目が在学生・卒業生と新入生をペアにしたメンタリングプログラムです。大量の情報と新しい環境に直面する新入生に経験者の視点でアドバイスをする事で初年度のドロップアウトを防ぐ試みです。メンタリングプログラムに登録した学生は8割が次年度に進級しましたが、登録しなかった学生は6割しか進級しませんでした。

三つ目が数学の補修講座の活用です。高校での数学の学習状況が高くない学生が、ドロップアウトしているという観察から、出願時のスコアに応じて高校数学の補修講座を学生に義務付けることで学生のギャップを埋めようとする試みです。

プログラミング未経験者・学習者ができる事は何か

プログラミングを学ぶ人にはさまざまな人がいて、ラトビア大学での取り組みがそのまま当てはまるわけではないでしょう。ですがさまざまな研究に基づいた取り組みのアイデアを取り入れるのはメリットがあるのではと思います。

プログラミングという作業は言葉では説明しづらい作業です。現在はScratchHour of Code, Swift Playgroundsなどのさまざまな体験が無料で用意されています。こういったコンテンツを本格的なプログラミング学習前に試してみる事で自分自身がそれを楽しいと思えるのかどうかをリアルに理解することができるでしょう。同様に性格テストなどを使って自身の特性とプログラミング学習の関係を知っておくのも学習の進み具合を予測する助けになりそうです。

高校レベルの数学に関する学習をする事も助けになるでしょう。近年では機械学習にはある程度の数学が必要となることもありプログラマのための数学学習をテーマにした書籍なども出版されるようになってきました。他にもアルゴリズムの計算量、抽象的な思考などで数学の能力はプログラミングの役に立つでしょう。特に線形代数は機械学習などの技術のベースになり、また方程式の理解などはプログラミングと近いという分析もあります。

そして経験者からのメンタリングを受ける事も大きな助けになります。プログラミングの学習は地道な作業が続くことが多く、自分自身が何が原因で詰まっているかどうかが分かりづらいことも多々あります。こういった時に経験者からのアドバイスを受けることで問題解決が早くなります。そして何より心理的に大きな頼りになると考えられます。

(追記)記事への反応

momit.fmのポッドキャストで記事の内容や出演者のお二人の感想を紹介して頂きました。ありがとうございます。