効率的にプログラミング言語を学ぶための4つのステップ

Yoshifumi Shiiba
9 min readOct 26, 2014

仕事がら、ぼくはいつくかの種類の言語を日常的に扱う。最近ならCとNode.js上のCoffeeScript、Objective-C、軽くC++とPythonあたりだ。ついでだが、好きな言語はClojureだ。

ハッカーなら皆そうなのではないかと思うが、ぼくは新しいプログラミング言語を学ぶのがそんなに難しいことだとは思っていない。もちろん、新しいパラダイムの言語を学ぶのはなかなか大変だが、それもその原因がわかっていれば大した問題じゃない。

自分と同じように、あるいはそれ以上に簡単に言語や技術を学べる人を見てきたが、それと同時にぞっとするような効率の悪い方法でプログラミングを学ぼうとする人たちもぼくはたくさん見てきた。

プログラミングを学ぶのは、数学や物理を学ぶというよりは絵画や小説の書き方を学ぶのに近い。誰かが今日も的はずれな方法論で非効率な学習を行う悲劇を少しでも減らすために、自分の経験を踏まえて効率的にプログラミング言語を学ぶための方法について解説する。

1. 開発・実行環境を整える

プログラミング言語を学ぼうと思ったときに一番初めにすべきことはドキュメントを読むことじゃない。いや、ある意味では正解だが、読むのはコードの内容じゃなく環境をセットアップするためのドキュメントだ。そしてすぐに実行環境をつくるべきだ。「どこにコードを書いてどうやればそのプログラムが実行されるのか」とういうことを把握し、できるようにしよう。これにはいくつかの理由がある。

怠惰の波を乗り越える

はじめの一歩を踏み出すのはいつだって大変だ。たとえそれがとるに足らないものであっても。あなたが学習のために行動を起こし、Google Searchへ言語名をタイプしたということは大きな一歩だ。ほとんどの人は、そこに至る前に挫折している。

だがここで安心しきってはいけない。第二、第三の怠惰の波があなたを飲み込み、学習をやめさせるかもしれない。開発環境の構築というのは状況によっては極めてめんどくさい作業になり得る。あるいは、簡単なセットアップで済むものであってもある程度の学習はかならず要求される。

もしそうなった時、あなたがまだ言語仕様についての解説を読んでいる途中であれば、再開して環境づくりを行う保証はあるだろうか? どこにもない。これがコードの書き方も書く環境もすでにそろっていればどうだろう。あとは書くだけだ、再び学習を始める可能性はずっと高い。コードを書ける環境を、行動し始めたその勢いのままに構築しはじめるべきだ。

本だけではどうせ完結しない

それがどんなにすぐれたドキュメントであれ、技術書であれ、読むだけでプログラムが書けるようになるなんて話をぼくは聞いたことがない。結局最後にはコードを書かないといけないんだ。それが目的なんだから。

なら、読みながら書けばいい。そうしてはいけない理由などどこにもない。実際に手を動かして書いたコードは、間違いなく読むだけよりもずっと学習効率を高める。また、ある程度書けるようになり、そこから技術を深めるためにする読書はそうでないものよりとても楽しく、効率がいい。まずは書けるようになることを目指そう。

2. 言われるままにコードを書く

まずはコードを書くことだ。まだ何を書くかを考えるべきではない。とにかく、誰かが書いたコードをそのままにタイプしてコピーし、実行してみることで何が起きるか、そのコードでなぜそうなったのかを理解することが重要だ。

チュートリアル

心に留めておいてほしいことは、時間に余裕があり、それが存在するのなら迷わずチュートリアルコンテンツをこなすべきだということだ。ただし、読むだけではなく必ずサンプルコードを書きながらだ。業務上その言語の限られた機能のみを求めている、など少ない状況を覗いては—時にそうであっても—これが最も効率的な言語の学び方だ。

ぼくはObjective-C、Goその他にもたくさんの言語をこの方法で学んだ。何度も学習を繰り返すとわかるが、オフィシャルでその言語の膨大なチュートリアルを用意してくれていたら「これはラッキーだ、学習が楽になる」くらいの気持ちに最終的には落ち着く。間違いなく。

物によってはかなり大きなコンテンツとなっている場合もある。Pythonのチュートリアルはたしかにうんざりする量だ。でも、絶対にコードを書くのをサボって読み流してはいけない。読んだだけではコードを書けるようにはならない。なにも一日でこなさないといけないなんてルールはない、気長にやればいい。

誰かのコードを書き写し、実行する

そのプログラミング言語にチュートリアルがない。あるいは英語で書かれていてかつ英語に不慣れである、などの場合にはチュートリアルに頼れなくなる。

初心者向けのブログ記事や本を用意しよう。そして、そこに書かれているコードを書き写し、実行しよう。コピペじゃダメだ。タイプするべきだ。

ハンター・S・トンプソンは1959年にタイム誌で使い走りとして働いていたとき、偉大な本を書くのはどういう感覚なのかを深く理解するために、F・スコット・フィッツジェラルドのグレートギャツビーやヘミングウェイの武器よさらばをタイプして暇な時間を過ごした。1人で本を読んでいても著者の表現の使い方やストーリーの語り方を知るのは不可能であり、実際に作成するようにふるまえばそれを感じることができる。
Don’t copy and paste other people’s code, type it out

わざわざコードをタイプすることには意味がある。タイプすることで「この変数名は意味がわかりやすい。タイプするのはめんどくさいけど。」だとか「こんな風に処理をまとめているのか。便利だ。」だとか、そのコードを書く行為を体験できる。コードをコピペするだけでは、そのコードを詳細に読み進めるのはかなり難しい。タイプすることで半ば強制的に一文字一文字に注意を払わなければならなくなる。「このコードでなぜこの実行結果になったのか」という重要な問に対する解を理解する大きな手助けになる。

3. 自由にコードを書く

あなたが書いたサンプルコードはちゃんと動いただろうか。あなたがそのコードの内容を一文字一文字隅々まで把握していて、それがちゃんと実行されたのなら、あなたはすでにそのコードがなぜその実行結果を出力したのかおぼろげながらにでもいくつかの想定をしているはずだ。

試してみよう。思いつく限りすべてのことをそのコードでやってしまえばいい。問題がおきて動かなくなったら元の状態に戻せばいい。誰も怒るやつなんていない。

改変する

まずは改変だ。もし書いているのがコマンドライン上のソフトウェアなら、四則演算の内容を更新してしまおう。実行結果がどう変化するかを観察し、把握しよう。グラフィカルなソフトウェアなら要素の色なんかを調整してみるのもいい。観察して、意図通りに変化したかを観察しよう。意図的に要素の色を変化させられるようになったのなら、すばらしい、あなたはその要素のその色を調整するという仕事については、プロのハッカーにも引けをとらないスキルを身につけたことになる。

追加する

改変する箇所がなくなったら、要素を追加していこう。まずはすでにコードに含まれる要素をコピーし、意図通りに増えるかを観察するのがいい。コマンドラインツールなら出力結果を増やしたり、グラフィカルなツールならテーブルセルの種類を増やしたり。

もしあなたがその言語に慣れ親しんできたのなら、新たなコードを別のソースからコピーしてくるのもいい。Web上にはそれ単体で実行不可能だが意味のある処理を行うことのできるコードの切れ端がたくさん転がっている。そういうコードをタイプして書き写し、実行してみるといい。

目標

あなたが初心者であればあるほど、リッチでグラフィカルなスマートフォン上で実行できるゲームみたいなものを書きたいと思うことだろう。あるいはビデオや写真の編集だろうか。

でもまずはこらえて、退屈な、計算結果や文字列をただ画面上に表示するだけのソフトウェアを書いてみよう。何のソフトウェアも創りあげられない人間より、退屈な時計アプリケーションであろうとそれを創ることのできる人間のほうがずっとあなたの目標に近いだろう。あせることはない、人類の大半は前者だ。

心配しなくても、あなたが楽しんで学習を続けれらればいつか目標に到達できる。

4. アウトプットする

満足するまでコードをいじり倒しただろうか?

なら、最後にアウトプットすることを忘れてはいけない。必ずだ。ブログを書けなんて言いたいわけじゃない。重要なのはアウトプットすることであって、誰かに知らせることじゃない。

もしいれば、おとなしく話を聞いてくれる友人や同僚を捕まえて、あなたが学んだことをわかりやすく解説してやろう。「このサイトでこのソフトを落としてきて実行したら、実行環境が出来上がった」「=の意味が違うんだ」「コードベースで色指定をするのはめんどくさい」なんて具合に、尊大に語ってやろう。

もう一度言うが、重要なのはあなたがアウトプットすることであって誰かに知らせることじゃない。ブログを書いてもいいが、それがめんどくさくてアウトプットしないなんて事になったら最低だ。口述であれ、具体的に理解可能な形に学習結果を整理することに意味がある。同僚であれ、教室での授業であれ、誰かに教えるのが1番優れた方法だ。

友人や同僚が捕まらない、あるいはいないのなら、今すぐおもちゃ屋へ走って、黄色いアヒルの人形を買ってきて同僚のかわりにしよう。彼/彼女にあなたの学んだことをヒソヒソと教えてやればいい。ちなみにぼくは、ずっとこの方法でアウトプットしている。効果は絶大だ。

さいごに

このようなステップを一日から一週間の短い期間で実行しよう。そして繰り返そう。

テクノロジの学習に終わりはない。興味が尽きない限り、他の機能へ、他の言語へ、他のプラットフォームへ渡って、学習を続ける事ができるし、その必要がある。

どれだけ最新のテクノロジを学んだとしても、立ち止まってしまえば3ヶ月から1年もすればそのテクノロジは陳腐化し、当時ほど役に立たなくなるだろう。そして時が来れば時代遅れだと言われることになる。常に学び続ける必要がある。

無理の無い範囲に負荷おさえて学習を習慣化することが重要だ。週末の暇な時間にでも、軽くコードを書くのはなかなか楽しい作業だ。

あなたが手に入れたほとんどのものはあなたの元を離れていく可能性があるが、あなたが自ら得た知識だけはあなたを裏切らない。

--

--