プログラミングは独学で十分習得可能です。 その証拠に、僕はすべて独学で習得しています。

今回は「どうやったらプログラミングを独学で習得できるのか」について僕なりに考えたことをまとめてみました。

作りたいもの(目的)を決めておく

プログラミングはただ学習を始めれば自然と身につくようなスキルではありません。 なぜならプログラミングというのは実際に手で触れることもできないし、目で見ることもできない概念的な存在だからです。 同じ言語であっても英語のように日常生活で役立つこともありませんしね。

まぁこれはプログラミングに限った話ではないのですが、明確な目的のある人間とそうでない人間とでは伸びが違うように、プログラミングも作りたいものが決まっているかどうかで、習得の難易度は大きく変わってきます。

そもそも効率性という観点から見れば、独学というのは非効率的な方法です。 特にプログラミングが初めてとなる場合はその非効率性はかなり大きいもの。 そのためプログラミングを使って何をしたいのかを前もって明確にしておく必要性は高いです。

プログラミングの習得≠暗記

プログラミングができるかできないかを分ける最大の要素が習得に対する考え方です。 というのも、一般的な勉強方法とは違って、プログラミングの世界では暗記学習というのは役に立たないからです。

ここではプログラミング自体について掘り下げてみます。

プログラミングは工作である

プログラミングというのは工作に近い存在です。

工作ではハサミやのこぎりのような工具の使い方を実際に手を使って学びますよね? いきなり使ったことのない工具で本制作を始める人はまずいないはずです。 なにより危ないですからね。

そして工作によくある現象が、同じツールを使っているはずなのに、上手い人や下手な人がいるということです。

これ、実はプログラミングでも同じなんです。

プログラミングが本当に上手い人というのは誰よりもプログラムを書いているし、色々試して遊んだりしているものです。

ですから、事前にプログラミング言語の言語仕様をどれだけ暗記してみても、実際に使った時に本当に上手く使えるかどうかはまた別の話です。

プログラミングの習得とは「できる」を積み重ねていくこと

プログラミングというのは「関数」や「クラス」を組み合わせて、目的の動作をするプログラムを作成していきます。 そしてプログラムはこういった部品(コンポーネント)をつなぎ合わせてできたものなので、それぞれを掘り下げていくと、実はかなり単純な動きをするものばかりだったりします。

これらの関数やクラスといったものは自作するだけでなく、外部のGitHubのような場所で公開されているライブラリを利用して使うことも多いです。 (さっきの工作の例に当てはめれば、ライブラリというのは制作キットみたいなものです。)

そして全てのライブラリには使用方法が明確に決められているので、言語の学習だけでなく、そのライブラリの使い方も学ぶ必要があります。

こういうことからも分かるように、プログラミングにおいては学ぶ作業が常につきまといます。 なので、自分でできることを少しずつ拡張していくことがプログラミングの学習スタイルとなります。

言語仕様をすべて学ぶ必要はない

必ずしも言語仕様の全てを勉強する必要はありません。 必要な要素だけをインプットしていくだけでも、十分使えるものは作れます。

それを説明するのに良い例がまさにこのブログです。 このブログはつい先日僕が実際に作ったものです。 Javascriptでできています。 Javascriptはほぼ初めての言語でしたが、このサイトの基本的部分が出来上がったのが制作から2週間経った頃で、その頃に1記事目をアップしています。 現在のサイトと同じ構成になるまでにかかった期間はおよそ1ヶ月です。

この制作のために僕が勉強したことは、Javascriptの言語仕様からするとおそらく1/3も含まれてないと思います。 その代わりにたくさん手を動かしては、トライアンドエラーを繰り返しています。 おかげさまでJavascriptの基本的な部分については結構習熟したと思います。 でも、Javascriptならではの要素といえる非同期処理については全く触れてないので、Javascriptについては全然マスターできていないというのが僕のスキルの現状なんです。

ですがこんな具合であったとしても、使用しているライブラリがそれを補ってくれているため、見ての通りそれなりに動くサイトができています。

このようにプログラミングというのはその都度必要な要素を勉強していくことで上達するものになっています。 一部の天才を除いて、最初から言語仕様を全部理解しようとしてもほとんど時間の無駄になるだけです。

言語理解が進むと、言語の切り替えも簡単になる

プログラミングでしばしばあるのが言語自体の変更です。 かくいう僕自身もこれまでに何度かメインで使うプログラミング言語を変えています。

こう言うと、毎回新しくプログラミング言語を覚える必要があって、とても大変な作業に思えるかもしれません。 でも、本当にそこまで難しい作業ではないのです。

その理由はプログラミングの基本原理はほとんど一緒だからです。 (Rustのように例外もありますが。)

確かに言語によっては記述方法が大きく変わってしまったり、前の言語でできていたことができなくなったりすることもあります。 しかし、土台となる概念が完全に変わるということはそうそうありません。 なので新しい言語を習得する際には、変わる部分と変わらない部分を見極めて、変わる部分だけをアップデートする形で理解していくのです。

これは暗記というより、概念の理解・再認識といったほうが正しいです。

「暗記でなく、概念が頭に染み込むくらいに理解すること」

これがプログラミング習得の基本です。 受験勉強のような暗記学習は不要で、むしろ害悪そのものです。

勉強する素材

YouTubeを使う

周りにプログラミングを教えてくれる人が居ない場合、YouTubeは最初の一歩を踏み出すのにはかなり良い教材になります。 なにせ僕が独学の最初の段階で一番役に立った方法がYouTubeでしたから。

動画には色んな種類がありますが、僕がおすすめするのは実際のコーディング作業が映し出されている動画です。 コーディング作業の全体像がつかめれば良いので、英語だろうがスペイン語だろうが何だってかまいません。 解説で何を言っているのかは分からなくとも、自分でコードを読めば理解できるようになっているのがプログラミングですから。

とにかくプロはどういう順番で何を記述していくのか、それを理解することに集中しましょう。 これが大方理解できればプログラミングの勉強をスタートする準備は完了です。 そしてYouTubeの出番も終了です。 あとは実際にドキュメント(公式ドキュメントや本)片手にコーディングしていくだけですから。

また、初めてコーディングする様子を見た場合、プログラミングにおけるテキストエディタや統合開発環境(IDE)の便利さも分かると思います。 このタイミングで好きな物を準備しておきましょう。

本を使う

本は王道ですね。

初学者であれば、参考書のような本でなくて、実際に自分の手を動かして制作していける内容の本が良いです。

参考書を買うタイミングとしては、細かい所は分からないものの、なんとなくでも目的の動くものが作れるようになった段階をクリアしてからです。 それまでは細かいことを気にする必要はないと思います。

参考にする本は新しいものを使うべき

知っての通りITの世界はすごい速さで変化しています。 これはプログラミング言語も同様で、本を買う場合はなるべく新しいものを使うようにしてください。

CやJAVAといった既に枯れた言語であれば問題ないのですが、JavascriptやRustのように現在進行系で開発がガンガン進められている言語では、バージョンアップで言語仕様がガラリと変わってしまうという事がしばしば起こります。 そのため「本に書いてある通りにプログラムを作ったのに、全く動かない…」ということもよくある訳です。

本というのはそもそも書き上げるのに結構な時間を要するものですから、もし1年以上前のプログラミング本を買う場合には、その本が書かれた際の言語のバージョンと現在のバージョンとの互換性を絶対に確認してください。

Udemyのようなオンライン教材

最近はオンライン教材がかなり充実しています。 場合によっては本よりも分かりやすいのに凄く安い教材もあるほどです。

少なくとも、よくある高額な情報商材よりずっと上質なものばかりなので、僕としてはこういったサイトをガンガン利用することをオススメしたいです。

Udemy| いろんなことを、あなたのペースで

エラーへの対処法

基本的にプログラムというのは適切に記述しないと動きません。 仮に動いたとしても、バグによって適切に動作していなかったりします。 まぁ最近の言語は親切な設計になっていることが多いので、警告文が表示されるので分かりやすいのですが。

いずれにしても、こうしたエラーに対処していく必要があります。

Linting機能のついた開発環境を用意する

初心者の場合、エラーの理由がとても単純な場合が多いです。 「 } 」や「 ; 」が抜けていたり、変数や関数の名前を間違えて入力していたりなどです。

こういった単純ミスを解決してくれる機能がコーディング用のテキストエディタやIDEには付いています。 プログラミングには必須の機能といえます。

この手の開発環境を用意すると、画面上でどこにエラーがあるかを教えてくれるようになっているので、かなりスムーズにコーディングが進められます。

ちなみに僕のオススメはVSCodeです。

Googleで検索する

簡単な構文ミス以外のエラーを手っ取り早くクリアする方法はやはりグーグルでの検索です。 エラー文をそのままコピー&ペーストで検索すれば、何らかの解決法を見つけることができると思います。 日本語で見つけたい場合はGoogleの検索オプションで日本語を指定しましょう。

人に聞く

エラーというのは慣れてくればどうってこともないのですが、やはり学習期におけるエラーというのは厄介な存在です。 僕が思うにエラーでの対応でプログラミングが嫌いになる人が多い気がします。 多くは凡ミスだったりするんですけどね。 まぁいずれにせよ時間がかなり取られることは間違いありません。

こういった場合、やっぱり人に聞くのが一番手っ取り早い方法だと思います。

でも大阪や東京のようにIT企業がたくさんある地域に住んでない限り、近所に聞ける人なんて普通いませんよね。 なので、こういう場合も既に紹介したUdemyのようなオンライン講座を質問のためだけに受講する方法が使えます。 こうした講座は講師に直接質問することができるようになっていることが多いです。

学習の初期というのは自分もよく分かっていないので、なかなか答えにたどり着けなかったりするものですが、この方法を取れば確実に答えが得られると思います。

英語は読めたほうが絶対に良い

Rubyのように日本人が作ったプログラミング言語もありますが、基本的にはプログラミングの世界は英語が標準語です。 そのためほとんどの言語の公式ドキュメントは英語ですし、同様にライブラリのドキュメントも英語です。

正直な話、英語が読めてしまえば、日本語向けに翻訳されているほとんどの書籍を買う必要はありません。

また、エラーへの対処についても英語が読めると簡単な場合が多いです。 自分と同じエラーに遭遇している人間の数自体が、日本人に限った場合より断然多くなるからです。 困っている人間の数が多ければ、その分だけ「より洗練された解決方法が導き出されている可能性も高い」ということは自然に分かると思います。

プログラミングで使われる英語はどちらかと言えば簡単な表現が多いので、英語を頑張って読んでみる価値は十分あると思います。