英語でコンピューターサイエンスやテックを学ぶためにやっていること

この記事は [VALU Advent Calendar 2019](https://qiita.com/advent-calendar/2019/valu) の 17 日目の記事です。

こんにちは。今回ふたつめの投稿になる濱崎です。

Web エンジニアをやっている筆者ですが、大学時代の専攻はコンピューターサイエンスではなく、そうした知識はこれまで専ら情報技術者試験などの資格試験を通じて学ぶに留まっていました。
自身にとって今年は、国外出身のエンジニアさんとお話をする機会を多く持てた一年で、そのなかで、コンピューターサイエンスの習得のしかたやテック系の知識の得かたも国内と海外とではずいぶん異なるのだなと知る機会がありました。
そうした今年一年の経験をふまえて、今後エンジニアとしてより成長していくため、個人的に取り組んでいる（いきたい）施策をいくつかご紹介します。

# TL; DR
こんなことをやって（or やりたいと思って）います！

- YouTube の CS 解説動画を観る
- 技術書 (の PDF) を原語で読む
- 英語の技術論文を読む
- LeetCode など、海外の競技プログラミングサイトで課題を解く
- 英語の Podcast やラジオを聴く
- 英語の個人 Slack チャンネルを作る
- OS や アカウントの言語設定を英語にする
- 英単語を覚える、ときどき語彙力を測定する

# YouTube や MOOC の CS 解説動画を観る
個人的にいまマイブームなのはこれです。
YouTuber の台頭が騒がれて久しい昨今ですが、英語圏では特に、CS (コンピューターサイエンス) やプログラミングのあれこれを動画で指南してくれるテック系 YouTuber も多く存在します。
筆者は下記のようなテック系の YouTube チャンネルを近ごろよく観ています。

- [CS Dojo](https://www.youtube.com/channel/UCxX9wt5FWQUAAz4UrysqK9A) （日本出身で、北米の Google でエンジニアをされていた方。アルゴリズム解説が豊富）
- [Siraj Raval](https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A) （機械学習やブロックチェーン、FinTech といった最新トピックでの個人制作・起業ネタが豊富）
- [3Blue1Brown](https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw) （機械学習のベースになっている数学関連の解説が豊富）
- [mayuko](https://www.youtube.com/channel/UCEDkO7wshcDZ7UZo17rPkzQ) （シリコンバレー勤務で日系の iOS エンジニアのかた。ソフトスキル関連が豊富）
- [Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer](https://www.youtube.com/watch?v=RBSGKlAvoiM) （8時間の動画でアルゴリズムを概観）

それぞれのトピックについて、ビジュアルつきでわかりやすく解説してくれるのが YouTube 動画の魅力です。
また、こうしたチャンネルでは Coding Interview やスタートアップの経験談など、専門書だけではカバーしづらい実践的な周辺トピックの情報が充実しているのも良い点です。

ただそれでも、（日本語でも難しい）新しいことの学習を英語で行ううえで、一度ですべてを理解するのは簡単ではないと感じています。なので筆者は、[この動画 (10 Ways to Learn Faster)](https://www.youtube.com/watch?v=hKBZjH7Ot2g) の内容など参考にしつつ、下記の方針で動画を観ています。

- 自動生成の字幕を表示する
  - YouTube の英語字幕自動生成機能はかなり優秀
  - 聴き取れなくても単語を見ればわかる場合がかなりある
- すべて分からなくてもいいので、まずは多くの動画を観る
  - 複数の動画で重複するトピックはそれだけ重要なこと、そうでないトピックはそれなり、と判断
- そのために、なるべく等速ではなく倍速で観る
  - これも聴き取れなくても字幕を見ればわかる場合がある
  - 倍速でわからないものは等速でもわからないことが多い。後でまた調べると割り切る

こうした方法で、まずは CS の概要を把握し、そこから[こうした動画 (Resources for Learning Data Structures and Algorithms)](https://www.youtube.com/watch?v=RBSGKlAvoiM) を参考に、各トピックをより深く掘っていければよいなと思っています。

# 技術書や技術論文 (の PDF) を原語で読む
エンジニアとして勉強するうえで、自分にとっては技術書も欠かせない存在ですが、技術書は訳書も多く、日本語訳も独特な文体で取っつきづらいことが少なからずあります。
どうせ読みづらいなら英語で読んでしまえ！　と思って、筆者は元が英語である技術書籍はなるべく原語版で読むようにしています。
「カタカナ語だらけの日本語で読むより英語のほうがわかりやすかった:v:」、、なんてアハ体験は残念ながら今の所ないですが、速読やボキャブラリーの練習も兼ねられるので一石二鳥かなとは思っています。

技術書を読むときは、なるべく PDF など OCR 済のものを選んで、 **疲れたと思ったら適宜 OS のスピーチ機能で読み上げてもらう** ようにしています。
発音の確認にもなるし、わからなかった箇所でもとりあえず読んだという事実は確保できる（？）のでおすすめです。

技術書のなかでも古典的な名著だと、改定前の古い版が PDF で教育機関のサイトに上がっていることもあります。洋書を読むお試しとして、まずはこういう PDF を検索してみるのもよい手段かと思います。

技術論文についても、計算機科学の古典から機械学習の最新研究に至るまで、多くの論文はインターネット上で PDF として読むことができます。筆者はこのあいだ[シャノンのエントロピーの論文](http://www.math.harvard.edu/~ctm/home/text/others/shannon/entropy/entropy.pdf)を読んでみて爆発しました。そのうちわかりたい。

# LeetCode など、海外の競技プログラミングサイトで課題を解く
競技プログラミングサイトは国内にも存在しますが、海外にも [HackerRank](https://www.hackerrank.com/) や [LeetCode](https://leetcode.com/) といった同種のサイトが多く存在します。その中でも LeetCode は近年人気がある印象です。
また、有料サイトとしては [AlgoExpert](https://www.algoexpert.io/questions) がかなりハイレベルな内容を体系的に学べそうで、基礎の準備が済んだら取り組みたいと思っています。

体感としては、日本語であれば解けるプログラミングコンテスト課題であっても、出題が英語になることで Language barrier の障壁がひとつ増える感じがしています。（技術用語や、中高レベルの数学用語の英訳がわからない、出題に出てくるお菓子の固有名詞に馴染みがなくてそれがお菓子だとわからない、等）
これから英語サイトでも競技プログラミングの経験を積んで、日本語と同じくらいのレベルで課題を解けるようになっていきたい気持ちです。

# 英語の Podcast やラジオを聴く
少し前に [Rebuild.fm](http://rebuild.fm/) の Podcast を知る機会があり、よく聴くようになりました。海外のプログラミングやテック系の話題が豊富なことに加えて、ホストの Miyagawa さんはじめ、ゲストの方もシリコンバレーや海外でのエンジニア業務経験者の方が多く、日々刺激を受けています。
日本語と英語を使い分けるとき、技術英語由来のカタカナ語やソースコードをどう発音すればよいのか（カタカナに寄せる場合も英語に寄せる場合もある）など、実際にバイリンガルのかた同士の会話を体験するまで知らなかったことが沢山ありました。

また、 Rebuild.fm のつながりで [バイリンガルニュース](https://bilingualnews.jp/podcast/) という Podcast を知り、こちらも近ごろよく聴いています。
ホストの Mami さんと Michael さんは共に日本育ちの英語バイリンガルなのですが、会話の中での日本語と英語のスイッチのしかたなど、業務で外国籍エンジニアさんとやり取りするときのスイッチの感覚に近いなと感じており、そうした感覚を養うのに役立っている感じがします。
ニュースの内容はテック系から科学、社会ネタまで幅広く扱われており、オール英語はつらいという方も日本語パートで話題についていけるようになっています。

Podcast についても、英語圏では多くの企業やメディア、個人がテック系の情報を発信しており、その日の気分で色々なチャンネルをザッピングしたりします。内容はすべては聴き取れないこともありますが、機械学習やブロックチェーンといった最先端分野のチャンネルも多く、一度いろいろ探してみると面白いかもしれません。

急いでいて Podcast を選ぶ余裕がないときは、とりあえずラジオアプリの [TuneIn](https://tunein.com/) で [Bloomberg](https://www.bloomberg.com/audio) や [BBC](https://www.bbc.co.uk/sounds) のラジオを流したりします。特に前者はテック系企業の話題も多い印象です。

# 英語の個人 Slack チャンネルを作る
VALU の社内 Slack では、個人の分報チャンネル `#times_{hoge}` で自由に色々なことをつぶやくカルチャーがあります。
先述のバイリンガルニュースのような Podcast を聴いているうち、分報を英語で書きたいと感じる機会も増えてきたので、近ごろ新たに英語版の分報チャンネルを作ってみました。

![IMG_0271 copy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213209/094dd5ef-5912-4a3b-b34b-eaaf4cb20bf5.png)

こんな様子で、日本語の分報と似たようなことを英語で書いています。
わかっているつもりの基礎的な文法も、いざ日常的な表現で使おうとすると案外迷ったりする（冠詞をつけるつけない、現在進行系にするしないなど）ので、そうしたライティングの練習の場としても活用していきたい気持ちです。

# OS や アカウントの言語設定を英語にする

これは実践している方も多いのではないでしょうか。
スマホや OS の設定を英語にすることも有効ですが、個人的に重要なのは **Google アカウントの言語設定** を英語にすることかなと思っています。

Google の検索結果は言語設定に大きく左右されるようになっており、日本語に設定していると英語のテック系ワードを入れても日本語資料が優先表示されます。
この設定を英語にすると、同じ検索ワードでも英語資料が優先表示されるようになり、日本国外の一次情報に断然アクセスしやすくなります！

↓ `React Hooks` を日英それぞれで検索してみた結果

<img width="848" alt="Screen Shot 2019-12-17 at 9.46.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213209/899b22dd-24e1-d15e-59eb-e35eedf8498c.png">
<img width="1133" alt="Screen Shot 2019-12-17 at 9.47.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213209/7c89f59c-cf59-7bf3-8a51-910eba038535.png">

急いでいると手っ取り早く日本語の情報が欲しくなるときもありますが、上図のように、英語設定であっても、位置情報が日本であったり日本語での検索履歴があったりすると日本語情報も混ぜて表示してくれるようです。（このあたりアルゴリズムが気になる）

# ときどき語彙力を測定する
語彙については数年前に [SVL12000](https://www.alc.co.jp/vocgram/article/svl/) を集中的に覚えたのですが、洋書や英語の YouTube 動画ではしばしばわからない単語があり、辞書を引いています。（本でいうとだいたい1ページにつき1単語くらい）

そんな自分ですが、語彙力の測定には [Test your vocab](http://testyourvocab.com/blog/2013-05-08-Native-speakers-in-greater-detail#newMainchartNative) を使っています。
このサイトのよいところは、テスト結果の単語数を [ネイティブの年齢別語彙力の統計](http://testyourvocab.com/blog/2013-05-08-Native-speakers-in-greater-detail#newMainchartNative) と比べることができ、自分がネイティブでいうと何歳相当なのかを概算できる点です。
成人ネイティブの平均語彙数は 20,000 - 35,000 words とのことらしく、筆者はまだ成人できていません。道は長い。

よりカジュアルに語彙力を測定したいときには、[Weblio の語彙力診断テスト](https://uwl.weblio.jp/vocab-index) も使います。
英単語に対して日本語の対訳を選ぶ形式で（ちょっと訳があやしいときもありますが）、TOEIC や英検といった国内メインの評価基準にも対応しているのが利点です。

# まとめ

いろんなチャンネルを活用することで、日本にいながらでも英語でコンピューターサイエンスやテックを学ぶ方法はあるなと感じています。一方で、言語ごとにレコメンデーションの分化が進んだ現在のインターネットでは、そうした情報を得るために一歩踏み込んだアクションが必要だとも感じます。この記事がそうしたアクションへの手がかりのひとつになれば幸いです！