東大卒エンジニアが考える、新言語習得の3つのポイント

目次

はじめに

こんにちは。おそらく世間では珍しい、東大卒エンジニアのYamaです。

今日は、「プログラミング言語マスターのコツ」についてお伝えしたいと思います。

これは、僕が学生時代に編み出した「大学受験の攻略法」をプログラミングの世界に当てはめたものです。

凡人の自分が東大に受かった時に使っていたノウハウ(考え方)であり、今現在のエンジニアスキル習得にも非常に役立っているという点で、一応は実績があると言えるのではないでしょうか。

大学受験もプログラミングも、要は「技術を習得する技術」が試される世界であり、両者は共通しています。

その攻略法も似通ったものになるのは、ある意味当然ですよね。

実際、このコツを意識した上でプログラミングの習得に励んだ結果、半年後にはフリーランスとしての仕事依頼を頂けるレベルのスキルを身に付けることができました。
(まだ完全にフリーへ転向したわけではありませんが。)

基本的には「今すでに一つ言語をやっているけど、別の言語を使う必要が生じた」という方向けの記事ですが、「これからプログラミングを始めたい!」という方にとっても役立つ内容になっていると思います。

以下3つのポイントとしてまとめているので、「言語の習得にそんなに時間掛けてられない!」というあなたに、何かヒントを掴んでもらえたら嬉しいです。

新言語習得の3つのポイント

1.プログラミング言語の全体像=地図を手に入れる

まずは、習得したい言語(例えばRubyとしましょう)の全体像を把握することが大切です。

イメージとしては、「Rubyという世界の地図を最初に持っておく」という感じ。

この地図があるのと無いのとでは、これ以降の学習効率が全然変わってくるんです。

そのためのアクションとして、

・入門書を1冊、「立ち止まらずに」読み通す

というのがオススメです。

その言語の「入門書」と位置付けられている本を1度読み通します。

(どの本を選ぶべきかは、Amazonのレビューなどを参考にしてください。基本的に「定番」とされているものを選べば問題ありません。)

この時のポイントは、「分からない事があっても、そこで立ち止まらない」ということ。

完璧主義は厳禁です。時間を掛けすぎてはいけません。

あくまでも全体像としての地図を作ることが目的なので、理解のレベルとしては

「へぇ〜、Rubyってこういう考え方の言語なんだ〜」
「こんな処理もできるんだ!便利だな〜」

くらいで最初は大丈夫です。

1つ1つの細かいメソッドの使い方を覚えるのではなく、「なぜそうなるのか」という仕組みの部分にフォーカスしましょう。

すでに他の言語(例えばJava)を習得済みという場合は、

「Javaだとこうだけど、Rubyならこう書けるのかぁ〜」
「オブジェクトの考え方がJavaと結構違うなぁ」

など、自分が知っている言語と比較しつつ全体像を掴むということを意識してみてください。

こうして、頭の中に「Rubyという世界の地図(見取り図)」を作っておきます。

2. 実際の開発を通して、知識の「点」をたくさん作る

地図が用意できたら、次は実際に動くプログラムの作成を通して、実用としての「知識の点」をポツポツと増やしていきます。

プログラムの題材としては、先ほど使った「入門書」に載っているサンプルプログラムが最も手軽ですが、自信のある方はその言語のフレームワーク(Rubyで言えばRuby on Rails)を使ったアプリケーション開発から始めてもいいと思います。

ここは、「とにかく動かしてみる」というフェーズです。

ちなみに、「知識の点」というのは例えば以下のようなものを指します。

  • 配列/文字列の具体的な操作方法
  • クラスからインスタンスを生成して、メンバーの値を取り出す方法
  • エラーを捕捉する方法

これらは最初に読んだ「入門書」にも含まれている項目ですが、「実際にコーディングする」というプロセスを経ることで「とりあえず使える」レベルの知識に変えていくことができます。

しかし、この時点においてそれぞれの知識は「点」であり、バラバラに存在している状態です。

開発現場で即戦力として活躍できる(「この言語使えます!」と言える)段階には至っていないので、次のステップで一気にレベルを引き上げていきます。

3. 「点」と「点」を繋げて知識のネットワークを作る

ステップ2のような

一応、部分的に言語が使える”点”の状態

と、

一部だけでなく、応用的なことも含めて広く対応できる状態

の境界線が、現場基準で「この言語使えます!」と胸を張って言えるボーダーだと僕は思っています。

例えば受験の世界においても、複数の知識を組み合わせて応用問題を解ける人は圧倒的に優位に立てます。

プログラミング言語に限らず「新しいことを習得するのが遅い人」は、このボーダーを超えるまでに長い時間をかけてしまっているわけです。

知識が点のままだと、エラーなどの問題を解決すること自体が難しくなります。

「これまでに経験したパターンそのもの」でないと、対処ができないからです。

いわば「スカスカのクモの巣」のようなもので、獲物の蝶が飛んできても引っ掛けることができない(=生じた問題に対処できない)状態です。

逆に、点同士が繋がっている状態だと、それらの線が重なり合ってきめ細かな「知識の網(ネットワーク)」になります。

この状態であれば、飛んできた蝶を引っ掛けて捕らえる(=生じた問題を解決する)ことはさほど難しくなくなるのです。

開発中にバグが出ても、精神的に余裕を保てます。

(とはいえ、本番環境でバグが出ると「ヒヤっ」とするのは変わりませんが。笑)

では、どうすれば知識をネットワーク化できるのか?

そのための重要なポイントの一つが、STEP1の「最初にその領域の地図を持っておく」ということなんです。

イメージを掴むために、ものすごく単純な状況を考えます。

今、Rubyに関する「知識の点」が2つだけあるような場合を考えましょう。

ぼんやりとでもいいので、「Ruby」という世界の地形や方角が分かっていれば、その2点間の距離や相対的な位置関係が分かりますよね。

つまり、2点間に「線」を引くことができるのです。

この点の数を3,4,5…と増やしていき、それら全てを線で結んでいけば、きめ細かな「網」の完成です。

逆に、「地図」を持っていないと、2つの点はいつまでも独立した「点」のままで、知識のネットワークを形成できません。

結果として、これがプログラミング習得スピードの大きな差になっていきます。

また、「その日の開発で学んだことをメモっておき、後日に周辺情報をググって復習する」というのも、知識のネットワークを作るためには有効な手段です。

僕の場合は、その日初めて知った技術的な内容をQiitaというサービスの投稿としてまとめ、後から振り返れるように情報を集約しています。

自分だけのノートができていく感じで楽しいので、オススメですよ!

まとめ

いかがだったでしょうか。

開発現場でも、「今まで使って来た言語とは別の言語を使わなきゃいけなくなった!」なんてことは結構よくあります。

また、フリーランスとして活動していく場合にも「扱える言語の幅」がその人の技量の高さの証になり、単価アップヘ繋がることも十分あるでしょう。

今回紹介した考え方を生かして、「稼げるエンジニア」へとさらに近づいていきましょう!

ここまでお読み頂き、ありがとうございました。