プログラミングが難しいと感じる時の対処法5選

近年、需要の増加と共に注目が高まっているプログラミングですが、その挫折率は約9割にも及ぶそうです。一般的には

「プログラミングは難しい」

と言われていますが、実際にほとんどの人が実践で使えるレベルになる前に諦めている現状のデータから考えると、この表現は比較的正しいと言えるでしょう。

ただし、多くの人がプログラミングが「難しい」と感じるのには理由があります。それは

「ある事柄を理解するために必要な前提知識が欠けた状態で挑んでいる」
「教材などで途中の説明が省略され過ぎている」

などといった要因。つまり、「適切な学習手順を踏めていない」という事です。

例えば、数学では「確率」とか「パーセンテージ」とかの話をする時に前提となる知識は「割り算」なのですが、まずはそもそも基本的な割り算ができないと確率もパーセンテージも当然理解できないですよね。基本的な割り算の理解をすっ飛ばしてパーセンテージを理解しようとするのは手順として悪手なわけです。

また、説明というのは基本的に初心者でもわかるように十分に内容を噛み砕いてステップバイステップでやるからこそ意味があるのですが、教える側の立場にいるにもかかわらずこの法則を無視した「説明になってない説明」をする人も残念ながら多くいます。

例えば、ある新しい概念を理解するのに初心者は10段階のステップが必要な場合に、ステップ1を説明したら次はいきなりステップ5に飛び、そして次も一気にステップ10まで飛躍し、それで「説明した」と言い張るような人です。既にわかっている人から見ればそれが「当たり前」に見えるのかもしれませんが、前提知識が欠けた状態の初心者からすればそれは「論理の飛躍」以外の何物でもなく、「え、どこがどうなってそうなるわけ?」と困惑してしまうのです。

プログラミングの挫折率がこれほどまでに高いのは、必ずしも一概に学習者本人だけの問題ではありません。学習者に適切な補助が入っているかどうかの「環境的要因」も大きいのです。本記事では、僕が現在所属している大学のIT科学部の現状と、自分の頭で考えているだけでは解決できないような状況に遭遇した時にオススメな対処法を5つ紹介します。


そもそもの問題:優秀な講師や教材が少ない

とりあえず僕の個人的な観測範囲でのお話をさせていただきますが、僕が現在在籍しているフィンランド・オーランド諸島のオーランド大学のIT系の学部は、お世辞にも「優秀な教員が多数在籍している」とは言い難い状況です。

「え?フィンランドって教育の質が世界一じゃなかったの?」

と疑問に思っている人もいるかもしれませんが、この点に関してはまた後日詳しい事を別記事で書こうと思います。

話を戻しましょう。ちゃんとした授業をしてくれる先生も一応いる事はいますし、そういう先生の授業で学んだ事は非常にためになっているのですが、いかんせんそうでない先生が意外と多い。

最初は僕の現地語(スウェーデン語)での理解力が足りてないのかと思いましたが、ある時から僕の周りの学生も

「この授業は一体何なんだ?」
「あの先生、話が通じない…」


など、この大学の授業や教員に不満を覚えているという情報が入ってくるようになりました。

実際そうなんです。この大学では、IT学科に入学してくる学生は1年目が終わる頃までには約半分が授業についていけずドロップアウトするというのが毎年恒例。

去年の今頃の時期も、ある「教え方が酷い」と悪評を持つ先生の「論理学」(大学レベルの数学)の授業に僕は苦しんでいました。先生の説明が壊滅的にわからん。授業で使っている教材も何が言いたいのかわからん。

これはタマランと思った僕は、以前書いた記事

でも紹介したVille君に助けを求めました。

Ville君は現在物理学の博士課程をやっており、博士や修士課程に入る前に大学レベルの数学もやっているはず。ならば、当然僕がてこずっていた論理学も楽勝でわかるだろうと判断したのです。

Ville君はネイティブのフィンランド語に加えて英語も日本語も流暢で、学業の傍らitalkiという語学サイトでこれらの3言語を教える語学の先生の仕事もしています。で、僕は彼に事情を話し、

「Ville君のオンラインレッスン予約しようと思ってるんだけど、そこでフィンランド語じゃなくて大学数学の論理学を教えてくれないかな?」

とお願いしたらOKをもらえまして、こうして役に立たんウチの大学の数学の先生の代わりにVille君に僕の先生役をしてもらったのでした。

要するにVille君を金で雇ったわけですが、結果的にはこれが正解でした。

オーランド大学の論理学の授業で使う教材や出された課題を彼に見せてみた所、「うーん、この先生はこの記述で一体何をやろうとしてるんだ?」とVille君が見ても意味不明な所が一部あったようですが、彼の指導のおかげで僕の理解度は爆上がり。

Ville君の個人レッスンを頼む前はほぼ何もわからなかったのに、論理学の期末テストを受けた際は最高評価のVGをもらえたのでした(VGはVälgodkänd「大変よくできました」の略。Gは「普通の合格」のGodkänd。Uが「不合格」のUnderkänd)。

同じ論理学という科目に同じ僕という人物が取り組んでいるというのに、先生を交代させただけで結果が180度変わってしまった。この時、僕は次のように確信したのでした。

プログラミング学習の成功や失敗は教材や先生選びの時点でほぼ決まっている


わからない事があった時の対処法のポイント

いくら教材を見直しても、いくら先生の説明を聞いても理解できないというのはよくある事。そんな時は、

同じ内容をより上手に説明できる人を見つけるべき。

プログラミングやその他なにか「難しい」と言われている科目を勉強していて壁にぶち当たり、いつまで経っても何もわからない状態に陥ってしまったら、その状態で悩んでいてもいつまで経っても解決しません。

これから紹介する5つの対処法は、「いかにして今の自分のレベルでも理解できる所まで学習内容を噛み砕くか」という事に焦点を当てている点は共通していますが、手間や費用のかかり具合などが違います。前半に紹介するものは費用がかからず、後半に紹介するものはコストのかかるものとなっています。


対処法1:Google検索

まず最初に、わからない事があったら普通に自分でググりましょう。Google検索結果で出てきた記事をザっと見て、自分の知りたい情報と関係が強そうなら更に深く読み進める。あまり参考にならなさそうな検索結果ばかりなら、検索キーワードの組み合わせを変えて再度検索をかけてみる。

自分の欲しい情報に辿り着くためのグーグル検索のやり方にはコツがあり、以下の動画の説明が簡潔にまとまっていて参考になると思いますので、ぜひこちらも見てみてください。



対処法2:Youtube検索

Googleで検索してもわからない場合、僕はYoutubeでも同じものを検索するようにしています。

上の画像は、オーランド大学のIT科の「オペレーティングシステム」という授業で出てきた「Banker’s algorithm」というものをYoutubeで検索した時の結果です。例によって、この授業を担当してた先生の「説明」ももはや説明の役割を果たしてなかったので、Youtubeの講義動画に活路を見出す事に。

動画だと文字だけでなく図に描いたり特定のポイントを指さししたりと、テキストベースよりも情報の種類が豊富になるので、より視覚的・直感的に説明がわかるようになりやすいです。

ただ、このYoutube検索という手法にはやや難点があります。それは、日本語での説明動画が(少なくとも2020年3月時点では)あまり見つからないという事です。基本的にYoutubeでコンピューターサイエンス(CS)関連のキーワード検索をした場合、英語で検索しないとそれほど検索結果に期待はできません。従って、英語が苦手な人はこのやり方はキツイかもしれません。

また、Youtubeで見つかるCS系の動画はインド人が作っているものが多く、英語が喋れる人でもインド訛りの英語に慣れてない間は聞き取りにてこずるかもしれません。

僕はYoutubeでインド人のCS関連の動画をたくさん見たおかげか、インド訛りの英語はほぼ問題なく聞き取れるようになりました。思わぬ副産物\(^o^)/

今となっては大学の先生よりYoutubeのインド人を頼りにしておりますw


対処法3:質問サイトで聞く

自分で情報検索をしていて出てくる記事や動画を見るだけではわからないという場合は、自分で質問しちゃうというのもありです。プログラミング関連で質問をする際は以下の2つのサイトが有力です。

Stack Overflow

プログラミング界では知らない者はいないほど有名な質問サイト。原則英語でのやりとりとなります。少し前に日本語版もリリースされているのですが、こちらはまだ現時点ではあまり活発に使われていないようです。僕も日本語版のStack Overflowでも質問をしてみた事はあるのですが、こちらではまだ1回も返事をもらった事がありません。

英語版Stack Overflowは情報の量で言えばこれを上回るサイトはないのではないかと思いますし、質問をした時のレスポンスは非常に早いです。

しかし、僕がこれまで使ってきて個人的に持った感想としては、「ググレカス」的な文化というか、やや初学者を見下しているような人が一定数見受けられる印象があります。「そんなくだらねー質問してくんじゃねーよ」的な。

僕はStack Overflowで質問するだけでなく、たまに回答者側になって質問者の手助けをした事もあるのですが、僕が回答を書き込んだわずか数分後にはその質問投稿が凍結され、それ以上の回答の投稿ができないようになってた事がありました。凍結を行使したそのユーザー的には「そんな程度の事で質問してくんじゃねーよ」とばかりに、「レベルの低い質問」だと判断したようです。

Stack Overflowでは各会員に「持ち点」が与えられ、アカウントを作ったばかりの時は全員ゼロスタートなのですが、「良い質問」をしたり「良い回答」をしたりするとその都度持ち点が増える仕組みになっています。どのように「良い質問」や「悪い質問」が判断されるのかというと、ユーザー同士による投票制です。多くの支持を集める質問や回答にはプラス投票、質の悪い質問や回答と判断されるとマイナス投票という形で票が投じられます。

で、Stack Overflowの会員はその持ち点に応じていくつもの階級に分かれており、持ち点の多い「上位会員」であればあるほどより強大な権限を持つようになります。非常に高い持ち点を持っていれば、他人の質問投稿内容を勝手に修正したり投稿そのものを凍結する事すらできるようになってしまいます。

このように上位会員がサイト内で大きな権限を持ってるのをいい事に「素人の分際でオレ様に文句あんのか」みたいな高圧的な考えを持っている人も残念ながら一定数いるようです。

とはいえ、良心的で親切なユーザーさんもたくさんいますし、多くの人の参考になる良質投稿も多々見つかるサイトなので、こういうサイトにも慣れておくとプログラミング関連の調べものの幅は大きく広がる事は間違いないでしょう。

Teratail

こちらもStack Overflowと同じくプログラミング関連の質問サイトですが、日本語のサイトです。Stack Overflowの日本語版よりもよっぽど活発に使われているようです。

僕はこれまで英語版のStack Overflowばかり使ってきたのでこのTeratailというサイトではまだ質問も回答もした事がないのですが、今回この記事を書く時の情報収集時にこのサイトを知りました。

サイト内の質問や回答をザっと見てみた分には、個人的には英語版Stack Overflowよりも回答者さんたちが親切で丁寧な傾向がある印象です。抽象的な事だけを書いて回答を終わらせるのではなく、具体的なコードの例も示しながら「なぜここがこうなるのか」を順を追ってキチンと説明されている、初学者に優しいユーザーさんの投稿がたくさん目についた気がします。

Teratailは英語で世界中のプログラマーに使われているStack Overflowと比べるともちろん投稿数(つまり情報量)では明らかに劣りますが、この回答者さんたちの親切さ・丁寧さはそれを補ってあまりあるほどの価値があると思います。

僕も今後は何かわからない事があったらStack Overflowだけじゃなくてこっちでも質問してみようかな(^^)


対処法4:Udemyのコースを購入

Google検索でもYoutube検索でも質問サイトでもわからない場合は、そもそもその分野に関する根本的な基礎知識が不足している可能性があるため、場合によってはUdemyのようなオンラインコースで勉強するのもありです。

上の画像は僕が実際に受講した、JavaScriptのフレームワークの1つであるVue.jsのコースです。オーランド大学でも「フロントエンド」という授業があり、そこでVue.jsが出てきたのですが、その授業を担当していた先生の説明が壊滅的で理解度が1ミリも上がらなかったので、この先生の用意した教材や説明で理解するのは諦める事にしました。

当時同じ授業を受けていた現地のスウェーデン語ネイティブの学生も

この授業の先生、何を言っとんのかさっぱりワカラン_| ̄|○

とボヤいていました。僕はこのUdemyのコースではVue.jsの理解度が一気に深まり、大学の授業時は文字通り何もわからない状態だったのがTwitterの簡易版みたいなのが作れるぐらいにはなりました。それでも、その後で当時のフロントエンドの授業スライドを見てみたら、やはり「こんな説明不足にもほどのある教材を初見で理解しろという方が無理だろ…」と思うような内容でした。

僕がこの時とったVue.jsのコースは英語でしたが、Udemyは最近は日本語でもなかなかコンテンツが充実しているので、必ずしも英語ができなくても大丈夫です!また、日本人の講師がリリースしているコースの方が説明がわかりやすいという事もあるので、英語が喋れる人でもあえて日本語版を選ぶのもアリです。

実際、僕は最近JavaのSpring Bootというフレームワークの勉強を始めたのですが、最初に購入した英語版のは思ったより説明がわかりにくく期待外れだったので30日間の返金保証制度を使ってコースをキャンセルし、日本語でSpring Bootのコースを検索しなおしました。その結果見つけた日本人講師によるコースはとてもわかりやすい内容になっていたため、非常に満足しています。

コース1つの値段は大体10~20アメリカドル。普段は20ドル弱で設定されている事が多いのですが、年末年始やその他何らかの特別な時期には値下げキャンペーンが行われており、本来20ドルぐらいするものを10ドルで買える、なんて事もよくあります。

1つのコースに収録されている講義動画の数や合計時間はコースによって大きく異なります。全部で4時間ぐらいで終わるコースもありますし、僕がこれまで受講したコースの中には動画の総数が450を超え、収録時間の合計も50時間以上のものもありました。これだけのボリュームでも値段は変わらず10ドル。メッチャお買い得。


対処法5:メンターサイトを使う

グーグル検索でもユーチューブ検索でも質問サイトでもわからないし、オンラインコースを取ってるだけのヒマがない、またはそもそも勉強したい内容がオンラインコースで見つからない!という場合は、メンターサイトを使ってみるのも手です。

メンターサイトでは自分に合ったメンターを選び、1対1で濃密なやりとりをする事ができるため、これまで紹介してきた4つのやり方だけでは解決できないような難問にも対応しやすくなります。

当記事では、メンターサイトを2つ紹介しますね。

MENTA

MENTAは日本のメンターサイトであるため、基本的にユーザーもメンターも日本人で、やりとりの言語も日本語です。

ざっと見てみた所、月額制で契約してくれるメンターさんが多いようです。値段はスキルセットやメンターさんによって幅があり、月2000円以下でメンター契約してくれる人もいれば、月1万5千円やそれ以上の人もいます。

Codementor

こちらは世界展開しているサイトで、原則やりとりの言語は英語です。

日本のMENTAでは月額制で契約するケースが多く見られたのに対し、Codementorでは一律

「15分あたり何ドル」

という設定になっています。そして、その値段設定はMENTAよりも遥かに高く、平均的なのでも15分あたり20ドル(つまり1時間80ドル、日本円で9000円近く)はあり、スキルセットや人によっては15分あたり30ドルやそれ以上になる事もあります。

ちなみに僕は最近、MENTAではなくこちらの値段の高いCodementorの方を利用しました。なぜかというと他に選択肢がなかったからです。オーランド大学ではPrologというプログラミング言語が必修となっているのですが、この授業の先生は記事の前半でも紹介した「説明が壊滅的」な論理学の先生でした。従って、授業での先生の説明や先生の用意した教材はアテにならない。

Prologは下記のWikipediaの記事

https://ja.wikipedia.org/wiki/Prolog#%E4%BB%8A%E6%97%A5

でも言われているように「実務的に利用される事が少ない」ためか、Youtube検索やUdemyでは英語ですらほとんど教材が出てきません。日本のMENTAでPrologを教えられる人はいないか検索してみたのですが、検索結果は見事に0人。Codementor以外の場所では僕にマトモな形でPrologの勉強の手助けをしてくれる人は見つからなかったのでした。

今回僕のメンターとなってくれたのは、上の画像にも表示されているポーランド人のJadwigaさん。最後のセッションの時にブログに載せてもよいかと聞いたら快くOKしてくれました。

他の生徒さんのレビューを見てみたら非常に評価が高かったのですが、実際に何度かセッションをお願いして大学の授業でわからなかった所を聞いたらとても丁寧に説明をしていただけて、おかげで先日のPrologの最終テストでもなんとか合格点を取る事ができました。たぶん彼女の助けがなかったらヤバかったです。

Codementorで受けたサービスの質自体には満足しているのですが、このサイトには以下2つの難点があります。

1つは、やはり値段の高さ。僕が今回教えてもらったのはPrologで、JavaScriptなどの需要の高い言語のセッションと比べると安いですが、それでも15分15ドルなので、1時間教えてもらっただけで7000円近くがぶっ飛びます。

もう1つは、たぶんこのCodementorのサイト上の問題だと思うのですが、メッセージ通知がたまに来ない事があるという事です。普段なら何かメッセージが来た時にはサイトに登録してあるメールアドレスに「〇〇さんから新着メッセージがあります」と通知がくるのですが、ある日僕のメールアドレスにその通知が来ず、結果的にJadwigaさんからのメッセージを3日ぐらいシカトしてしまった事があります。

実は僕はJadwigaさんの前に他のメンターさんであるインド人の方にも1回セッションをお願いしていたのですが、彼もセッション後に僕のメッセージに一切返事をせず音信不通になった事がありました。これも彼に新着メッセージの通知が来てなくて僕のメッセージに気づかなかったのが原因。Codementorを使う際は、これまですぐに返事をしてくれていた人の返事が突然途絶えたら、このようなシステム上の障害を疑ってみるべきかもしれません。

それから、メンターさんは基本的に親切に何でも教えてくれますが、もちろん質問者である自分自身でも事前に質問内容を整理し、メンターさんが答えやすいようにする配慮や努力はすべきです。

この「質問の仕方」に関しては、プログラミング関連で情報発信をされているKENTAさんという方の以下の動画が「質問する時に心がけるとよい事」を網羅的にカバーしていて非常に参考になるので、見ておくことをオススメします。



ちなみに

記事の前半でも紹介したように、オーランド大学のIT系の先生には意外と「ロクな説明のできない残念な人」が多いのですが、実はこれはこの大学に限った話ではありません。

メンターの項目でも紹介したJadwigaさんにも話を聞いてみたのですが、彼女もポーランドの大学でCS専攻していた頃、Prologの授業で教授からロクな説明もないまま難解な課題を丸投げされて困った事があったそうです。どうやってそれを乗り切ったのかというと、クラスメイトにたまたま最初から何でも知ってる天才みたいな人が1人いて、その人につきっきりで教えてもらえたおかげでPrologが上達した、その人がいなければ無理だったと言ってました。

また、エストニアの大学でCS専攻している人からも「ウチの大学の教授の説明は何も説明してないに等しい。Youtubeのインド人のCSレクチャー動画のがよっぽど役に立つ」という話を聞いた事があります。

コンピューターサイエンスの世界には「自分の頭の中だけでわかってて他人に説明する能力がない人」がたくさんいて、しかもそういう人たちが教授などの権限の強いポジションについているので、学習者にシワ寄せがいくという事は国や地域を問わずよくあります。

でも、今の時代はインターネットの発達によって、「教える能力のない人」の授業を無視して独自ルートで学習を進めるのも十分に可能です。「大学の授業でしかプログラミングを学んではいけない」などと誰が決めたわけでもありませんし、YoutubeやUdemyなどで勉強したっていいではありませんか。変な固定観念にとらわれず、利用できるものは何でも利用して、ムダな事に時間を使わず効率的に学習しましょう!