今や、あらゆる場面においてソフトウェアが重要になってきた社会の中で、プログラミングを学ぼうと考える人も多いだろう。プログラミングを身につける方法は、インターネットにはたくさん情報があるし、本も多くある。開発環境も無料で使える。独学したい人には良い時代になった。始めるのは、とても簡単だ。

一方で、挫折する人も多くいることが想像できる。情報が多くありすぎて、学び方ひとつとっても様々なことを言っているし、チュートリアルのようなものをやってみても、じゃあ自分で作るなら一体どうすれば良いかわからない。どの言語を選べば良いか、頭でっかちになって始められない人もいるかもしれない。

* * *

プログラミングを手っ取り早く身に付ける方法などあるのだろうか。これは、正解のない問題だ。人によるし、作りたいものにもよる。身に付けたい動機にもよるし、そもそもが、どこまで出来たらプログラミングを身に付けたと言えるのだろうか。

私の場合、プログラミングを始めたのは10歳の頃で、インターネットもない時代に独学で身に付けた。いや、子供だったから果たして身に付いていたのかどうか怪しいものだが、勉強しようという感じではなく、打ち込んで動かすのが楽しくて没頭した。(実は30年以上も経った今も、その感覚は変わっていない。)

私がプログラミングを身に付けるまで実は正しい道筋があったのか、もっと効率的な方法があったのか、今となってはわからない。だけど、動かしていたこと、楽しんでいたこと、没頭していたことが、プログラミングを身につける上で大事なことだったのではないだろうか。そこに正解はないが、共通する考え方はありそうだ。

知識よりも経験、勉強よりも練習、なによりも遊ぶ

最初に知るべきは、プログラミングは知識で出来るようになるものではなく、経験で出来るようになるものだということだ。経験するために必要な知識はあるにせよ、いかんせん経験を積まないで出来るようにはならない。

それはプログラミングという行為の目的が、動くものを作ることであり、知識があるだけでは役に立たないからだ。例えば、どれだけ車のことに精通していたとしても、練習をしなければ車の運転ができないのと同じだ。

プログラミングは本質的にはスポーツやアートに似ている。だから、時間をかけて繰り返し練習をしなければ、教科書やチュートリアルを一通りこなしただけでは役に立たない。自分の手を動かして、たくさんプログラムを作った方が良いだろう。

勉強も大事だが、そのあとの練習こそが重要だ。何度も動かして試しているうちに、早く思い通りに作れるようになってくるだろう。少しずつ出来るようになると、とても楽しいはずだ。そうした習熟の喜びも、スポーツやアートに似ている。

そして、やはり誰よりも練習したものが、一流になれるのも同じだろう。ただ、どんなスポーツやアートも最初は遊びから始まる。まずは遊ぶ気持ちから始めよう。

小さな成功と失敗、動かなくなるまで試そう

何か作りたいものがあるのは大いに結構。そのためにプログラミングを勉強するというのも、きっかけとして良い。私もプログラミングを始めたのは、ゲームを作りたかったからだ。ただし、すぐにプログラミングそのものが楽しくなった。

プログラミングには、作りたいものが作れる楽しさと、自分の手で作り上げる楽しさの両方がある。後者の楽しさを知ってしまえば、たとえ大金が手に入っても、誰かに作らせるよりも自分で作る方を選ぶ。それが本物のプログラマだろう。

作りたいものを目的にプログラミングを学ぼうと助言をするケースもあるが、本当の初心者には作りたいものまでの道筋をイメージするのも難しいし、きっと到達するまでの道のりが遠くなりすぎて、挫折してしまうかもしれない。

まずは、小さくても動くプログラムを書いたり、サンプルコードを写経してから、色々と変えてみて実行して動作を確認しよう。どうすれば動くのか、何を変えれば動かないのか、壊れることを恐れずに、いくらでも動かして試してみれば良い。

プログラミングの良いところは、材料費がかからないことだ。いくらでも実行して試せる。しかも、失敗しても戻すことができる。試してダメなら戻せば良い。こうしたことは、現実の工作や料理では出来ないことだ。どんどん気軽に試そう。

最初から厳密さや網羅性を求めなくて良い

最初のうちは、知識を網羅的に勉強する必要はない。パラメータの意味や例外的なケースまで網羅しなくても、動くプログラムは作れる。少し覚えたら、少し動かそう。念のため、知識が不要だとか、ただ動けば良いと言っている訳でなない。

プログラミングを身に付ける道のりは一本道ではない。自分を中心に出来ることが面で広がっていくイメージだ。色々な文法や書き方、ライブラリやイディオム、ノウハウなど出来ることが繋がって、年輪のように知識と経験を積み重ねていく。

知識と経験を小刻みに繰り返すことで、身体で覚えていくことができる。ペーパーテストではないから、頭で暗記したところで使える訳ではないし、この業界の知識はあっという間に古くなるから、常にアップデートしていかなければならない。

だから最初にすべてを覚えようとはしなくても良い。それよりも頭で理解したことを、手を動かして試してみて、自分が考えたことが動く喜びを知った方が良いだろう。そう、喜びはプログラミングへの意欲を持続させてくれる。

どうだろう、学ぼう・勉強しようと気負うのではなく、動かしてみて気軽に試して、楽しむところから入ってみよう。子供の頃にレゴブロックで遊んだように、プログラミングで遊ぼう。それも、とても奥の深い遊びなのだ。

どんな最初の一歩を踏み出せば良いのか

では、気軽に試せて、プログラムが動く感覚を身につけるのに、どこから始めるのが良いか。ウェブアプリが良いのか、スマホアプリか。どちらも、前提となる知識も多く、動かすための環境を構築するだけでも大変だ。

最初の最初に身に付けたいのは、自分が考えた通りにプログラムが書けること、良いプログラムを書くための基本的な考えだ。チュートリアルをこなすだけでは得られない、自分で考えてプログラムを書く力だ。

仮説だが、ターミナルで動くコマンドラインのプログラムから始めるのが良いのではないかと考えている。そう、いわゆる「黒い画面」だ。これなら特別な環境は要らないし、前提にする知識も少なく、プログラム全体を把握して動かすことができる。

* * *

まず最初に、ファイルやディレクトリの考え方を学んで、ファイル操作のいくつかのコマンドを練習して身につける。コンピュータを扱う感覚を身につけるのだが、全てのコマンドを網羅する必要はない。あとは履歴や入力補完も練習しよう。

そして、RubyやPythonといったプログラミング言語を使って、プログラムを作ろう。定番の"Hello world!"から、標準入力と標準出力を通じて型を知り、関数とスコープから分割統治といった考え方を知り、順序・反復・分岐でアルゴリズムの基本を学び、そして、配列、ハッシュ、クラス、インスタンス、例外処理・・・などなど。

コマンドラインのプログラムでも十分に、プログラミングで大事なことは学べる。むしろ、本質だけにフォーカスできて良いのではないだろうか。そして、案外と大事な本質や哲学を学ばずに職業プログラマになってしまっている人も多いのではないか。

プログラミングの道の、本当の最初の一歩をターミナルから始める。その段階で、学ぶだけでなく、しっかりと練習をして、さらに有識者によって良いプログラムを書くための基本を教わることが有益なのではないだろうか。そんな仮説を持っている。

* * *

ちょうど機会があり、この仮説のもとで一人の初学者を実験的に育てているが、今のところ手応えを感じている。仮説がうまくいったら、こうしたことを周りに有識者がいなくても独学できるような本があればと、以下のような本を書こうかどうか考えている。

『ターミナル「黒い画面」で身につけるプログラミングの基礎と基本』

プログラミングに触れなかった文系の学生や、中学生でもわかるような、なるべく平易な言葉を使って、本当に初めてプログラミングに取り組みたい時の1冊目になるような本なんて、どうだろう。世の入門書の、さらにその手前の一歩目のために。

「3日で現場で使える即戦力が身につく!」といったキャッチーな本ではないけれど、一生の仕事で使えるプログラミングの基礎と基本を身につけることのできる本。地味だから出版社から出すのは難しそうだけれど。(どうでしょう?出版社さん)

一人でも多くプログラムの奥深さと楽しさにハマる人を増やしていきたい。