英語が使える人だからできるIT・プログラミング学習方法 ①初級編

2017/05/25


上の動画ではオバマ元大統領が「コンピュータ科学を学ぶことは自分の将来のためだけではない。我々の国の将来がかかっている。」と明言している。(意訳)

英語ができる人はITとプログラミングの学びがとても早い

  • IT・プログラミングの情報の多くが英語でオンライン上に公開されている
    (世の中にあるウェブサイトの50%が英語、5%が日本語)
  • 英語のセンスを発揮して、自然で綺麗なコードをかける
    (変数の名前づけ、コードの構文、コメントなど)

英語を使える筆者もIT・プログラミングを学ぶ時はほとんど英語の情報を利用している。英語であれば情報量が豊富、情報が最新で質が高い、説明が分かりやすいと圧倒的に便利だと感じる。

そして、このグローバル化とIT革命の時代に、世界の共通言語である英語とプログラミングを中心としてIT知識が両方あることは有利である。(社会人になると、どちらかに悩みを抱えている人が多い。)

ちなみに筆者はプログラミングを学び初めて数年であり、まだまだ日々勉強中である。

最初は統計分析のためにPython、R、Stataといったプログラミング言語から始めた。そこから、JavaScript、Java、SQLと言った言語を学んだ。

そして、このブログのウェブサイトの構築に必要なHTMLとCSS、そしてPHPも学習して活用している。

過去3〜4年、TOEFL iBT 勉強法とGoogleで検索すると当ブログが1ページ目の1番に出る。これはSEO (Seach Engine Optimization)という検索結果を有利にする知識を活用している。

今回、英語言語でIT・プログラミングを学んだ筆者が同じく英語ができる人にオススメの学習方法を提案する。

ITエンジニアはプログラミングだけでなく、ソフトウェア、ハードウェア、アルゴリズムと色々ある。しかし、どの分野にもプログラミングは必須なので、プログラミング学習を中心に説明する。

プログラミングは試行錯誤しながら学ぶこと

Learn by doing.
(試行錯誤して学べ)

英語が母国語のITエンジニアと話すと、上のような表現は非常によく聞く。

筆者も海外の大学でプログラミングの授業を取った時に教授から1回目の授業の1番目にしつこく言われた。

文学、法学、経済学、商学、社会学、物理、生物、化学などの他の科目と違い、プログラミングは学んだその瞬間から自分のコンピュータで実践できる。

英語の習得も同じで単語や文法を学ぶだけでなく、リーディング、リスニング、スピーキング、ライティングとたくさん実践して本当の英語力が身につく。

Grasp the fundamentals for long-term benefits. 

長期的なメリットのために基礎をしっかり理解しよう

一方で単に見本を真似るだけでなく、ロジックやステップを理解することも同じくらい重要である。応用の段階で効率的・効果的なプラグラムを書くためである。

Break a big and complex problem into smaller and simple pieces.

大きくて複雑な問題を小さくてシンプルなパーツに分解する

これもComputer Scienceの教授に1回目の授業でしつこく言われた。まぁ、これらの細かい説明は下に紹介する講座から学ぶと良い。

メンターを探してフィードバックを受ける

英語学習と同じでプログラミングの勉強も少なくても中級になるまではメンター、アドバイザー、コーチなど自分を導いてくれる指導者がいる方が良い。

色々な情報が無料で公開されているが、プログラミングを学ぶ目標は色々あり、学び方も色々とあり、普遍的なベストは存在しない。

自分で試行錯誤して学ぶことはとても大事だが、それをするほど色々な疑問や不安が出てくる。経験が豊富なメンターに質問して良い答えを聞く、または自分の活動を報告して適宜フィードバックを受けることは非常に有益である。

  • IT・プログラミングの業界で上級者
  • 短期間ではなく長期間、面倒を見てくれる人
  • プログラミング以外でも付き合いがあり、その人のために親身になれる人
  • 初心者の目線を持っていて、教え方が上手な人
  • オンラインではなく現実に会える人

無償で教わるのであればお礼は忘れないようにしよう。カフェでコーヒーをご馳走する、得意な英語力を活かして英語の勉強方法を伝えるなど、Win-winになるようにする。

もし身近にIT・プログラミングに詳しい人がいない場合は以下のような

  • 英語でプログラミングを実践的に学べるCodecademyでは有料版であるPro版にアップグレード(月額$19.99)するとアドバイザーが学習計画を立てたり、Live helpをしてくれる。
  • Dot.で初心者用のイベントを探し、色々と教わる。有料になるがメンターになってくれるサービスを提供している企画者も多い。
  • Nobuo_CREATEさんのようなブログでプログラミングを教えている人に相談してみる。

時間がない人は費用は数十万と高めだが塾・合宿に行くと良いだろう。

どのプログラミング言語を初めに学ぶべき?

多分、初心者の人で一番多い質問だろう。勇気を出して経験者に聞くと以下のようになる。

初心者:どのプログラミング言語を初めに学べば良いですか?

経験者:何をしたいかによるけど、何をしたいの? 

それが分かれば、多分質問していない(笑)

ちなみに英語学習も同じようなことがたまにある。

初心者:英語をどうやって学び始めれば良いですか?

経験者:何をしたいかによるけど、何をしたいの?

上のような苦い経験を得た筆者が初心者向けのやさしい助言をしたい。

大体の有識者は最初のプログラミング言語にJavaScriptかPythonを勧める

初めの言語選択についてfreeCodeCampというサイトのWhich programming language should you learn first? ʇdıɹɔsɐʌɐɾ :ɹǝʍsuɐが包括的、正確、コンパクトで一番分かりやすかった。

Image Credit: https://medium.freecodecamp.com

初めに学ぶ言語をプログラミング言語を以下に分けて分類している。

  • 目的
  • 検索結果の伸び
  • コンピュータ・サイエンス学部で教えられている言語
  • 仕事で一番使われている言語
  • 求人(需要)の多い言語
  • 将来性
  • 言語習得の難易度

もし、上の図をみて、特定の目的が無いのであれば、初めの言語はJavaScriptPythonで異論はないだろう。

freeCodeCampのサイトでは総論としてJavaScriptをお勧めしている。

一方、著名なアメリカ人のソフトウェア開発者であるEric Steven Raymondが書いたハッカーになろう (How To Become A Hacker)という無料公開の文書にはPythonから学ぶことをお勧めしている。

一般的に初めの言語としての望ましい特徴は以下である。

  • 用途が幅広い
  • 言語的に美しいかつ簡単で学びやすい
  • 仕事で広く使われており、需要と供給のバランスでは需要の方が上回る

Webアプリを作る目的が漠然と視野にあるならJavaScript、データサイエンス、人工知能、学術的な分野での使用が視野にあるならPythonが良いだろう。

※ちなみにJavaとJavaScriptはオーストラリアとオーストリアくらい違うので注意。Javaの方が処理が速い分、コンピュータの理解しやすい表現で書く必要があり、言語的には難しい。

PythonとRubyを比較してどっちが良いのか?

PythonとRubyは平易で早く書けるといった特徴や概念が似ている言語であり、学びやすいのでよく比較される。

Rubyは日本人によって開発され、文法も日本人にとって分かりやすく、説明も日本語が多い。Pythonは学術系、RubyはWebアプリ系の開発に強いと言われている。

英語を使える人が学ぶのであれば世界的な使用人口の多いPythonをお勧めする。

(※これは経済的側面になるが、似た商品が2つある場合、性能よりも市場を囲い込みした方が勝つという原則がある。Blu-rayとHDDの競争が良い例である。)

学校ではMatlabとかRを習っているけど、どっちが必要?

Matlabのロゴ

Matlabは数値解析全般、Rはデータ分析に特化したプログラミング言語であり、特化型言語(domain-specific language)である。関連の分野に従事するなら必要になるので、それはそれで良い。

ただ、先ほどから説明しているプログラミング言語は特定の用途に特化しないプログラミング言語である。(General-purpose programming language)

例え、MatlabやRが既に使えるとしても、それとは別に凡庸性の高い言語を習得しておくと可能性が広がる。

どうやってプログラミング言語を勉強するの?

先ほどの説明通り、①実践しながら基礎を学べる環境で、②メンター的な人が適宜細かい指導や心構えを教えてくれる環境が良い。

しかも、③できるだけ低費用で、質の高い学習環境が良い。(→ワガママ)

候補として

  1. CourseraEdXのようなMassive Open Online Courseで提供されている講座
  2. Codecademyのようなプログラミング専用学習サービス
  3. YouTubeに上げられている動画
  4. ブログや参考書
  5. 専門学校・塾・合宿

上の5つが考えられる。もちろん、人の学習環境の好みもあるが、一般的に以下が言える。

5の専門学校等は講師がいて、実践しながら学ぶので、学習環境の質は一番高いが、学習費用も一番高い。

4のブログや参考書は低コストであるが、動的でないので分かりづらく、また身近に細かい指導をしてくれるメンターを得づらい。これらをメインにして一から進めていくよりは参考書として困った時のために持っておくのが良い。

例えば、Python Crash Courseは海外で人気の入門用のPythonの参考書である。

包括的で分かりやすく、本質的な学びを失うことなく実戦的なことが書かれていると定評がある。各機能の使い方だけでなく、その論理的な解説もしている。

3のYouTubeに上げられている動画は動的で分かりやすいし、実践的である。しかし、大学教授ほどの専門的な知識を持った講師ではない人が多いので、理論的な側面を得づらい。

学習範囲として広くないUnixのCommandsを学ぶなど、局所的な使い方が良い。下はLinux/MacのTerminalの使い方を説明している動画である。

2のCodecademyはブラウザで学びながら実践もするという無料の学習サービスであり、アドバイザーのヘルプ、学習計画、追加的なQuizzesやProjectsを利用できるPro版(月額$19.99)もある。

しかし、Pro版でさえ、1つ1つの課題において細かい指導を得るというのは中々難しい。また、プログラマーとして問題を解決する心構えを教わることも大切だが、それも難しい。

参考:4 Reasons Why You Shouldn’t Learn to Code from Codecademy

結果、1のCourseraEdXで提供されている講座で学習するのが、2017年現在、一番最適であると思われる。

CourseraやEdXをお勧めする理由

実践しながら基礎を動画で学んでいき、プログラマーとしての心構えも学べる。宿題も豊富にあり、練習は十分に積める。分からないことはDiscussion Forums (掲示板)で質問もでき、メンターがフォローしてくれる。

EdXとCourseraはほとんど似ているが、EdXの方が若干難しいと言われている。ほとんどのコースは無料であり、有料でも数十ドルと格安である。

また、有料でCertificateを取得すると、客観的に知識をアピールしやすいので、特に就職や大学院を意識している学生にお勧めである。

例えば、CourseraでJavaScriptを学びたい場合

例えば、CourseraでPythonを学びたい場合

以上、英語を使える人だからこそできるIT・プログラミング学習について、最初の言語選択と学習の始め方から解説した。

 

Go for it!

(あとがき) 本記事の反応が良ければ、続編で2番目以降の言語とフレームワーク、Githubなど実務で必要なウェブサービスなどについて書いていく。