最終更新:2023/04/22
大学を卒業してしまうと,新しく何かを学ぶのはとても難しくなります.
私自身,大学を卒業した後で情報工学を学ぼうとしたときにそれを実感しました.
誰かの役に立つかもしれませんので,私が勉強する際に役に立つと思ったことを共有しようと思います.ほかの記事と重複している部分も大きいですが.
独学はしてはいけない
たまに「独学で~を勉強した」ということが称賛されることがあるので勘違いしがちですが,独学は非効率で危険な勉強法です.絶対にやってはいけません.
初心者でも上級者でも,指導者は常に必要です.ここでいう指導者とは,
特定の分野に対して,何をどう学べばいいのかの道順を示してくれる
学ぶための最低限の教材を指定してくれる
フィードバックを返してくれる.ダメだったらダメ,OKならOKと教えてくれる.
という3つの条件をすべて満たすもののことです.
人物である必要はなく,オンラインコースでも良いです.オンラインコースは一般に安く,まとまった時間を確保せずとも受講でき,かつ質の高いものが数多くあるので(分野にもよりますが)お勧めです.
オンラインコースの探し方ですが,2023年4月現在は Class Central というサイトが良さそうです.複数のプラットフォームから,横断的に講座を検索することができます.ここで,大学から提供されているなど,信頼のおけそうなものを探して受講してみてください.
なぜ独学をしてはいけないかですが,それは「途中でわからなくなったとき,先に進めなくなるから」ではありません.
- 何が定説で,何が異端あるいはトンデモ学説なのか
- 目的のために何を知っておくべきで,どういうことは「重箱の隅で,どうでもいいこと」と見做していいのか
ということが,独学では判断できないからです.
指導を受けたり,既定のシラバスに従うことにより「自分の興味を主体的に追求できなくなる」と心配するひとがいます.その気持ちはわかりますが,だからといって独学の誘惑に負けてはいけません.
大学院で「自分の興味の赴くままに」研究をしているはずの博士課程の学生でさえ,必ず指導教官の指示を仰ぎます.教員も同じで,同僚と議論したり学会で人の発表を聞いたり,人の意見を頻繁に仕入れます.有識者と言われるひとでさえそうなのに,ヒヨッコの初心者がどうして自分の判断だけで健全な学習ができるでしょうか.(いや,できない)
自主的に勉強する意欲があるのはとても良いことですが,「何を勉強するか,どの本を読むか」は自分で決めずに,誰か有識者の意見を参考にしましょう.
英語への抵抗をなくそう
英語で読み書きできる能力は重要です.「話す・聞く」はひとまずできなくとも構いません.また,DeepL などの機械翻訳に頼りっぱなしでも構いません.とにかく,英語の資料を選択肢から自動的に外すのをやめるようにしてください.
日本は高等教育が母国語で受けられる,とても恵まれた国ですが,それでも英語を避けることはできません.英語ができると,アクセスできる情報の質も,量も,コストも桁違いに変わります.
たとえば,英語だと情報系や数学のリソースは無料のものがたくさんあったりします.FreeComputerBooks や FreeCodeCamp などを見てみてください.
また,わからないことがあったときに質問するにしても,英語が書ければ StackExchange などの利用者の数が多いサービスを使うことができます.
さらに,学習パスを調べるためにシラバス等を参考にするにしても,日本の大学はあまり OCW をしていないので日本語だと情報が足りなくなります.英語がわかれば MIT OCW のような充実した質の高い情報源にアクセスできます.
今は機械翻訳が優秀で,それほどコストをかけずに英語の読み書きができるので,積極的に英語のリソースを利用しましょう.余裕があればリスニングもできるといいですね.
リスニングの練習方法はあまり詳しくないですが,Youtube チャンネルを見るのはどうでしょうか?私がよく見るものには次のようなチャンネルがあります.
Kurzgesagt 一般受けしそうな科学を扱うチャンネル.
3Blue1Brown 数学のチャンネル.美しい映像が特徴.
コンテストやアワードの類には積極的に参加しよう
ここでいう「コンテストやアワードの類」というのは,講座のような絶対評価ではなくて,ほかの人との比較で順位やレーティングを付けてくれるサービス全般を指します.
「自分のダメさ加減を直視させられるのはしんどいから」と敬遠するひとがいます.それは一理ありますし,全くの初心者で何もわからないうちはもっと優先すべきことがあるので,確かに参加しない方がいいでしょう.しかしある程度基礎が身について余裕がでてきたら参加した方が良いと思います.
こうしたものに参加することによるメリットが数多くあるのです.
まず,自分の実力がどの程度のものなのか,客観的に測ることができる貴重な機会になります.人間は素人ほど自信過剰になりがちで,玄人になると今度は自分の実力を過小評価しがちになるので,数字でずばりと順位が出るのはありがたいものです.
また,同じような興味を持っている同志を見つけやすくなります.コミュニティに所属しているとニュースも教えてもらいやすくなりますし,困ったときに相談に乗ってもらうこともできるかもしれません.
もし上位に入ったり,賞をいただいたりすることがあれば,多くの人に認知してもらえます.
コンテストは,できるだけ頻繁に開催されているものが良いでしょう.分野ごとにプラットフォームがあります.いくつか例を挙げます.(私の知っている範囲で挙げるので,情報系に偏っていますが)
Kaggle データサイエンス分野で有名なプラットフォーム.
CodinGame ゲームに焦点を当てたコーディング学習プラットフォーム.
HackTheBox セキュリティ分野のプラットフォーム.わざと脆弱性があるように設計されたマシンに侵入して,フラッグ(旗)を奪うというゲームを通してセキュリティの技術が学べます.
CryptoHack CTFのプラットフォーム.暗号理論の勉強ができます.新しい問題が追加される頻度が低いことが難点.
Project Euler 離散数学の問題が出題されるプラットフォーム.
LeetCode 外資系IT企業では,入社試験としてコーディング能力を問う面接があります.その対策のためのサイトなのですが,競技プログラミングプラットフォームとして利用することもできます.日本では類似サービスの AtCoder が有名なので,あまり使用しているひとを見かけませんね.AtCoder も良いと思うので,自分に合っている方を選んでみてください.
- 全くの初心者なら LeetCode の方がオススメです.
- 競技プログラミングというゲームをしっかり楽しみたければ AtCoder の方がオススメです.
ニュースを見よう
はっきり言って,時代についていくことは不可能です.時代はあまりに目まぐるしく変化します.そのたびに追従しようとしていると,何の専門家にもなれず,何も達成できません.ある程度「過去の成功体験を繰り返す」ことが必要です.
それはそうなのですが,だからと言って最新情報を収集するのをやめてはいけません.ついていくことができないとしても,最新の動向を知っておくのは役に立ちます.
いざ新しいものが古いものを駆逐し始め,自分も追従しなければならないとなったときに,困惑したり拒絶したりするのではなく,受け入れることができるようでなければならないからです.
Twitter や YouTube などが役に立つでしょう.新聞などを購読するのもいいですね.私は,GitHub のトレンドを見たり Discord のサーバの投稿を眺めたりしています.同好の士が集うコミュニティに属しておくと,ニュースを収集するのが非常に楽になるのでお勧めです.
また,IT技術者向けですが,ブラウザの新規タブをニュースフィードに変えてくれる daily.dev というアプリもあります.
おわりに
一般的なアドバイスを書きたかったのですが,プログラミングの話ばかりになってしまいました.
この記事のタイトルも潔く「プログラミングを学びたい社会人へのアドバイス」とした方がよかったかもしれませんが,しかし「プログラミング」と書いてしまうとプログラミング学習でしか使えない個別のことしか書かれていない印象になるので,このタイトルのままとします.
また何かあれば追記・修正しようと思います.