「どうすればプログラミングできるようになれますか?」

と聞かれることがある。相手は、Webデザイナーだったり、普通のサラリーマンだったり、ニートだったり、様々だが、趣味で、あるいは仕事の中でちょっとしたプログラムを組みたいと考える大人は多いようである。

裕福な学生であれば、専門学校に行くなり、その手の有料講座に通うというような事も可能だろうが、社会人やニートは暇も金もそれほどあるわけではないのでそういう訳にもいかず、入門書を書って「どうにも難しいので、途中で諦めてしまった」という事になってしまうことが多いようだ。

 

私に言わせれば、プログラミングを覚えるのに必要なのは「やる気」だけで、数学的素養や、才能はそれほど必要ではない。

では何故失敗するのかと言えば、彼らは総じて目標の設定とモチベーションの使い方が下手なのだと感じる。

 

今回は、大人がモチベーションを上手く維持しながら、プログラミングを独学で覚えるためのポイントを幾つか紹介したい。

 

最初に覚えるプログラミング言語は何がいい?

こういう話になると、まず「何の言語から覚えればいいですか?」という質問が飛んでくるのが決まりになっている。

結論から言うと何でもいい。

 

最初の言語は、あなたが今プログラムでやりたいことや解決したい問題を考えてみて、そのやりたい事が一番楽にできる(と思われる)言語を選ぶべきである。

例えば、あなたが総務課でExcelの仕事を効率化したければ、覚えるべきはExcelマクロ(VBA)であるし、あなたがWebデザイナーで、Webページにアニメーションを実装したいと考えているならJavascriptである。

 

よく、最初に○○はダメだ(時代遅れだ)。とか初心者向けには○○というブログや記事を見かけるかもしれないが、全部無視して構わない

初学者が、そういう言い分を真に受けると判断を誤りやすい。例えば、私は大学時代にWindowsアプリを作りたくて、当時のスタンダードだったC++の勉強をしようとして、本を3冊ほど買ったことがあるが、最後までWindowsアプリを作れるようにはなれなかった。(C++が難しいというよりは、当時のWindows GUIの実装がC++初心者には難しかったのだが)

これはスタンダードにこだわって、言語(方法)の選択を誤った例である。今思うと、私はVisualBasicや、HSPなどのスクリプト言語を選べば良かったのである。

 

目標があるのであれば、それを達成するための手段は出来る限り簡単なほうが良い。プログラミング言語のシェアとか、将来性というのは(確かに大事なことだが)初学者にとっては二の次であり、どうしても気になるのであれば、最初の目標を達成してから、そちらの言語に移っても遅くはない。

また、言語を一つに絞る必要はない、だいたい簡単そうなものを2,3頭に浮かべておけば十分だろう。

 

どんな本を買えばいい?

あなたの目標と手段(言語)が固まったら、行ける範囲で最も大きな書店に行こう。そして書棚の本を眺めて、覚えようと思う言語の

  • 初めての○○
  • ○○入門

というような書名の本を片端からチェックする。見るべきポイントは優先度順で以下のようになる。

  1. 本の中であなたの目標に近い(またはそこに繋がりそうな)ことをやっているか?
  2. 最初にあなたの持っているPCにプログラム言語の実行環境をインストール(構築)する方法を解説しているか?
  3. ソースコードが適度に載っているか?(全く載っていなかったり、逆にほとんどのページがソースコードばかりになっていないか?)
  4. 見たことのない数式が沢山載っていないか?

ここでも「目標」というのが大事になってくる。もし、あなたがやりたい事が「人工知能で株の自動売買をして大儲けするプログラムを作る」ことなのであれば、多分その本は存在しないか、上記の条件を満たすことはないだろう。

つまりこれはあなたの目標が過大であることを意味している。その場合は、目標をもう少し現実的なものに変えた方が良い。

 

もし運よく条件を満たす本が見つかったら、すぐ確保しよう。

また、同じ言語を扱う他の本もパラパラと読み、もしあなたの目標を実現する方法が書かれているらしき本があれば、内容が1ページたりとも理解できなくとも、入門書とセットで買うべきである。その本はいずれ必要になるからだ。

 

どう読んでいけばいい?

入門書が手に入ったところで、やることは、まず入門書を丹念に読むことである。

普通に1ページ目から読んでいこう。だいたい入門書というのは環境構築から始まっていることが多いので、適当にググったりせず、素直にそのとおりに環境構築すべきである。

そうすれば、手を動かしながら20ページほど読み進められるはずだ。わけのわからないアプリをインストールさせられ続けたなあ、という印象だろうが、大丈夫。あなたは最初の偉大な一歩を踏み出した、と考えて良い。

 

次に、入門書の指示どおりにソースコードを自分のPCにそのまま手で書き写しながら動作を確認していこう。この時、必ず手を動かすこと!ざっと読んで理解した気になってはいけない。

そして、余裕があれば、ソースコードを適当に変えてみると、どういう結果になるかも見ていく。またはその結果を予測しながら、ソースコードを改変してみる、といったことをすると、かなり効果的である。

 

条件分岐や、ループ関数、といった分野を通過できれば、入門書の最初の50ページほどしか読んでいなくとも、ほぼ合格である。

実はこの時点であなたはある程度のプログラムが書けるようになっている。

もし、何か試してみたいことが思いつけば、最初からプログラムを書いてみよう。1から100までのうち奇数だけを出力する、とかで良い。もしそれができれば、新卒未経験のプログラマ志望者の能力は超えたことになる。(本当)

 

目標を分割し、本を「引く」

実は、このあたりでプログラミングに挫折する人が多い。

この先の入門書には、あなたにとってはどうでもいい「ポインタによる文字列処理」であるとか「クリックでキャラクターを爆発させてみよう」とか、そういう事が書いてあるので、興味が続かないのである。(もちろん我慢できるなら、いけるところまで読み進めてよいが)

実は今まで黙っていたが、あなたの目標までの道筋を1歩1歩案内してくれる本というのはこの世に存在しない。今までずっと道案内してくれた入門書が違う方向へ向かっているように見えるので、あなたは、いきなり道標をなくしたような気分になっているのである。

 

まずは、落ち着いて目標を段階的に分割しよう。困難とは分割するものだ。そして、その中で、今の時点であなたの手が辛うじて届きそうな通過点を見つけよう。できれば、その通過点は達成すればテンションが上がりそうな、楽しそうな所を思い浮かべる。

例えばあなたがやりたいことが「カーレースゲームを作る」ことであれば、「車を1台だけ画面に表示すること」ならなんとかやれそうな気がしてこないだろうか?そして、それが実現できれば結構テンションも上がるだろう。

 

しかしそれを実現する具体的な方法がわからない。その時、本を「引く」のである。

あなたの目標は「カーレースゲーム」から「何らかの画像(か3Dモデル)を画面に表示する」に変わった。

今度は、後者の通過点に関連しそうな項目を手元の本をパラパラめくって、辞書から単語を探すように「引く」のである。

 

手元の本で見つからなければ、また書店に行くなり、ググって見ても良い。見つかったとしても、本来、順に読むべき入門書を飛ばしたことになるので、理解するのは一苦労だろうが、わからないことは入門書や他の本のどこかに書いてあるはずだ。

どうにも理解できなければ、入門書をまた一から読み直すことをお勧めする。おそらく最初に読んだ時とは異なり、貪欲な読み方になっている筈である。何故なら今やあなたは「自分が何をわかっていないか」を知っており、明白な目標のために読書しているからである。これは学習における重要な進歩と言える。

 

1歩進んでは3歩下がるようなペースで構わないし、どこかで挫折して、しばらく放っといても良い。急かす人はいないのであるから、目標さえ覚えておけば幾らでもやり直して良いのである。とにかくあらゆる手段を使って、最初の通過点をクリアしよう。

 

プログラミング学習のサイクル

通過点はなんとかクリアできただろうか?おめでとう!あなたは、プログラミング学習の重要なサイクルを1回まわしたことになる。

つまり、プログラミングの学習というのは基本的な文法知識を丸覚えした以降は、

  1. 課題の設定
  2. 情報の収集(本やWeb)
  3. 課題の解決

の繰り返しなのである。モチベーションの話をすれば、1,2という苦しい場所を3で達成できた喜びをモチベーションにして、また次のサイクルに向かわせるのだ。

 

モチベーションを燃料にこのサイクルを回し続ければ、出来ることは大幅に増えていく。通過点を除々に遠くに(目標の近くに)設定して、サイクルを回せば、いずれは最初の目標を達成できる、というわけだ。

実のところ、職業プログラマも、このサイクルを日々回すことを仕事としている存在にすぎない。ただし彼らはプロであるので、「楽しい」という理由だけでサイクルを回すことが許されない。

 

時には「納期」や「リストラの恐怖」という負の感情を動力源にしてサイクルを回していたりする。それは、モチベーションをベースにしたサイクルよりもかなり辛くて苦しいが、それでも達成の喜びは同じである。そしてそれがプログラマの唯一の生き甲斐であり、つまりはそういう世界なのだ。

 

あなたが最終的にプロを目指すかは知らないが、その事は覚えておいたほうが良いだろう。

 

 

【プロフィール】

著者名:megamouth

文学、音楽活動、大学中退を経て、流れ流れてWeb業界に至った流浪のプログラマ。

ブログ:megamouthの葬列