iOS エンジニアが TOEIC 895点 取るためにやったこと

この記事は Classi Advent Calendar 2018 の 4日目の記事です。

今年の6月に WWDC18 に参加するために渡米したのをきっかけに、英語の勉強を始めた。 しばらくして10月に受けた TOEIC で895点取ることができたので、どんなことをしてきたかを振り返る。

自分の英語力

  • 留学、海外就労の経験なし
  • 大学時代に最後に受けた TOEIC が700点台

WWDC から帰国後、十数年ぶりに受けた7月の TOEIC が785点だった。それからどんなことをしたか、というのがここからの話です。

tl;dr

3行でまとめると、こんなかんじだと思う。

  • TOEIC の点を取りたいから TOEIC の勉強をする
  • 自分が理解できるレベルの英語に触れる
  • 楽しく続けられることを毎日やる

TOEIC 対策について

当たり前と言われそうだが、TOEIC で点を取りたいなら TOEIC のための勉強をするのが手っ取り早かった。TOEIC の問題には決まったパターンと解き方があり出題される単語が決まっている。7月の受験時にリーディング、特に語彙力が足りないことが分かったので、2ヶ月くらいその対策をやった。 TOEIC の学習は英語自体の勉強になるし良い動機付けになったと思う。

f:id:enmtknt:20181122143452p:plain
7月の結果より

TOEIC 向けの学習として取り組んだこと

この単語帳は多分 TOEIC 対策の定番なのだけど、良いところが1つあって、 abceed という無料のアプリと連携している。これを使うと音声を聴きながら勉強することができる。通勤時間や、風呂の中でシャドーイングをして単語に慣れていった。 学生時代から暗記モノが本当に苦手でうまくいった試しがなかったので、このアプリで勉強してよかった。

TOEIC対策アプリ abceed

TOEIC対策アプリ abceed

  • Globee.Inc
  • 教育
  • 無料

TOEIC(R)テスト 新形式精選模試 リーディング

TOEIC(R)テスト 新形式精選模試 リーディング

TOEIC の リーディングパートの問題集。本番よりも難しめ。TOEIC のリーディングは結構頑張らないと最後まで解けずに時間が足りなくなるので、この辺を繰り返し練習して慣れておいてよかった。それでも本番は時間が足りなかったんだけど。

公式 TOEIC Listening & Reading 問題集 4

公式 TOEIC Listening & Reading 問題集 4

試験1ヶ月前に公式問題集を買って一周。リーディングの解けなかった問題を何回か解き直した。

一度受けてみて、苦手部分を特定してから重点的に練習するのが効率的だと思う。

ここからは TOEIC に限らない英語学習の話。

自分の理解できるレベルの英語に触れる

普段は自分が理解できるレベルの英語になるべく触れるようにしている。 後述する英語学習者向けの Podcast や易しめの英語の小説がこれに該当する。

理解出来ない英語に触れ続けても英語力は上がらないし、意味が分からないと嫌になってやる気がなくなる。

楽しく続ける

前に書いた話にも通じることだけど、無理しないで続けられることをやる。とにかく手を替え品を替えモチベーションがなくならないように工夫している。

多読多聴で沢山の英語に触れるようにする。頻出表現が馴染んでくると音のつながりが聴き取れるようになって、穴埋めなら次に来る単語がなんとなく分かったり、類推が効くようになる。

実際にやっていること

Podcast

通勤時間に英語の Podcast を聴いている。

iOS ユーザーなら、オススメしている人が多い Overcast というアプリを使うのがオススメ。 スロー再生にも対応していて、Twitter とも連携しておすすめの Podcastをサジェストしてくれる。

Overcast

Overcast

  • Overcast Radio, LLC
  • ニュース
  • 無料

聴いている Podcast

English as a Second Language (ESL) Podcast - Learn English Online

English as a Second Language (ESL) Podcast - Learn English Online

  • Center for Educational Development
  • 言語コース
  • ¥0

6 Minute English

このあたりは比較的聴きとりやすくて内容も面白いのでよく聴いている。ESL Pod は有料のサブスクライブを試していた時期があって、 それだと全てのエピソードを聴くことが出来る。

All Ears English Podcast

All Ears English Podcast

  • Lindsay McMahon and Michelle Kaplan
  • 言語コース
  • ¥0

少し速いと感じることもあるが最近よく聴いている。毎回特定のテーマについて話しながら、アメリカの文化や英語の慣用表現や単語の微妙なニュアンスを説明してくれる。

Swift by Sundell

Swift by Sundell

  • John Sundell
  • ソフトウェア ハウツー
  • ¥0

SwiftCoders: Interviews with Swift Developers

SwiftCoders: Interviews with Swift Developers

  • Garric Nahapetian
  • ソフトウェア ハウツー
  • ¥0

自分は普段仕事で iOS アプリを作っているので、iOS アプリ開発に関する Podcast も聴いている。

Netflix

Netflix

Netflix

  • Netflix, Inc.
  • エンターテインメント
  • 無料

Netflix の良いところは英語字幕を表示できること。 時間がある時に洋画やドラマを見ている。特に Stranger Things ハマってしまい睡眠時間を削って一気に見た。 日本語字幕で見たことのある映画を英語字幕で見直すというのも理解しやすくて良いと思う。 最初の1ヶ月は無料で試せる。

小説とマンガ

Kindle でネイティブの小学生とかが読むような、易しい英語で書かれている小説やマンガを読んだりしている。iPhone, iPad, Kindle Paper White を同期させておいて、スキマ時間に開いて読んでいる。 僕は Wonder という児童向けの小説とその続編を洋書で読んだ。Kindle は Word Wise という機能があって、英単語のヒントを表示することができる。(iOSアプリでは未実装とのこと。。。)

f:id:enmtknt:20181201113302j:plain:w300
Kindle Paper White の Word Wise
ちなみに今なら Kindle Unlimited は 12/11まで 2ヶ月99円のセール中。英語学習に使えそうな洋書やマンガが色々ラインナップされている。

Wonder (English Edition)

Wonder (English Edition)

Amazing Spider-Man (2018-) #1 (English Edition)

Amazing Spider-Man (2018-) #1 (English Edition)

英語の技術書

Kindle Unlimited で無料の技術書を少しかじったりもしている。技術書に出てくる英語は、実は硬めのニュースサイトとかよりよっぽど平易で読みやすいので、興味のある分野から入ってみるのはいいかもしれない。

技術ブログ Medium, Quora

Medium

Medium

  • A Medium Corporation
  • ニュース
  • 無料

普段使っている技術について英語で調べる。Medium は iOS 関連の記事が充実している。あとは Quora で英語の Q&A を見ている。Quora は内容が面白くて1つ1つの Q&A が短いのでシュッと見れて良い。

洋楽

趣味で洋楽を日常的に聴いている。洋楽を聴いても英語が上手くはならないが、慣用表現とか英単語をバンド名と紐づけて覚えたり、Apple Music では曲によっては歌詞が読めるのでそれを眺める。

英語のインタビュー記事や三文記事

どうにもやる気が出ないなあ、というときは 好きなバンドのインタビュー記事 とか Stranger Things の続編に関する噂の記事を読むようにしている。

HelloTalk

HelloTalk ハロートーク 英会話

HelloTalk ハロートーク 英会話

  • HELLOTALK FOREIGN LANGUAGE EXCHANGE LEARNING TALK CHAT APP
  • 教育
  • 無料

国語学習者のための SNS

英作文も練習したいと思っているので、気が向いたときはちょっとした英文を書く。ネイティブの人が英文を添削したり質問に答えたりしてくれる。

ディクテーション

たまーにやる気があって仕方がないという日があるので、そういう日はディクテーションをやってみている。ディクテーションをやると単語同士のリンキングがけっこう分かるようになる。ディクテーションの教材には ESL Pod とか、Netflix のフレンズを使っている。

つまらない教材は見切りをつけてどんどん次にいく。やりきることより続けることが大事という気持ちでやっている。ストイックにやるより、毎日英語に触れる時間を持つことが良いのかなと思っている。

日記について

Evernoteでごく個人的な日記をつけている。日記を書くことで生活に良いリズムが生まれる気がしている。

きっかけ

「3ヶ月間、個人的な日誌を書くために毎日5分間使う」というのがワインバーグの「スーパーエンジニアへの道」で気づきを得る方法として紹介されていた。これを実践し、気づいたら毎日の習慣になっていた。

なぜつけるのか

書くことの効用

  • 自分の中でモヤモヤしていることをまとめる
  • とにかく言語化して、自分の状態を理解する
  • 心理的安全性のある環境で好きなことを書ける

後で見返すため

  • 記録を残すことで体調不良の原因や、微妙な変化に気づく
  • 些細な成長を実感する
  • 読み返すと楽しい
  • 以前勉強したことや考えていたことを思い出す
  • 意外な気づきがある時もある

書き方

一日の終わりに以下のテンプレートを埋める形で書いている。 とにかく書くことの心理的なハードルを下げたいので、内容は簡単でいい。書けない日があれば、翌朝書いたり、別の日にまとめて書いたり。

テンプレート

日記と同じノートブックに雛形を用意している。今はこれだけど、項目を変えたり微調整をしている。

# あったこと

その日の出来事を書く

# 学んだこと

簡単なことでいいので、新しく学んだことを1つ書く

# 所感

1日の間で印象的なことや思ったことがあれば書く

スーパーエンジニアへの道―技術リーダーシップの人間学

スーパーエンジニアへの道―技術リーダーシップの人間学

UserDefaults に struct のリストを保存する

環境

Xcode 9.4.1, Swift 4.1

UserDefaults に struct を保存する

UserDefaults に sturct を保存する方法として、Dictionary にマッピングする方法がよく紹介されているが、 Swift 4 からは Codable が使える ので、それらを使えばエンコード、デコードすることができる。
また今回はリストを扱いたいため、map を使ってリストの各要素をエンコード、デコードする。

コード

save array of struct to UserDefaults

Instant Word Power を読んでいる

ここ2週間 Instant Word Power という本を読んでいる。 英語のボキャブラリを鍛える本で、通勤の時間や休み時間を使って1日1章ずつ読んでいる。

Instant Word Power とは

Instant Word Powerは 英語のボキャブラリーを増やすための本。よくある単語帳のような本とは趣が違って、英単語の語源と英単語自体の意味と紐づけて説明することで覚えやすくしようとしている。また語源を学ぶことで、未知の単語の意味を類推することも可能にする。ページのブランクを1つずつ埋めていくクイズ形式になっている。同じ単語を何度も繰り返し扱うことで、知識の定着を助ける。

なぜ Instant Word Power か

先日WWDCに行って、自分の英語力が全然足りないことを再発見した。今時点でライティング、リーディング、リスニング(ほぼ全部か)と強化したいものは沢山ある。その中でも根幹になる語彙が圧倒的に不足しているので、取り組んでみることにした。 自分は暗記ものは大の苦手で、記憶を上手に定着させる方法が必要だった。そこで良い本を探していたところ見つけたのが Instant Word Power だった。

実際やってみてどうか

語源が説明されていることと同じ単語が繰り返し練習させるので、記憶への定着はとてもしやすい。また全編英語だが、短くて平易な文章で書かれているので、高校英語まで勉強した人なら普通に読めると思う。

微妙なところ

古い本だからなのか、一般的にあまり使われないであろう単語も含まれている。たとえば podiatrist(足病医) は日本語でも初めて見た言葉だった。

最後に

今のところ毎日1章読む運用でうまく回っているので、1ヶ月かけて最後まで読み進めようと思う。月末に10数年ぶりにTOEICを受ける予定で、実際使えるものなのか楽しみである。

Instant Word Power

Instant Word Power

try! Swift San Joseの作業メモ

WWDC18 に付随して行われた try! Swift San Jose に参加してきた。前半は Swift コミッターによるパネルディスカッション、後半は Open Source Swift にコントリビュートするというワークショップだった。このワークショップを通して apple/swiftPull Request を送ることができた。

最近読んだ id:higepon さんの ログのすすめ をとても良いと感じていて、ワークショップの作業はログを書きながら行ってみた。ログを残すことによって、自分が今取り組んでいる課題は何か、次に行うべき作業は何か、かなり明確にすることができた。特に Swift コンパイラという普段自分が扱っているコードベースとは全く異なる環境ではかなり助けになる実感があった。 せっかくなので、その時の作業メモを残しておく。


バグチケット

https://bugs.swift.org/browse/SR-7844?filter=10451

<stdin>:3:3: error: computed property must have accessors specified
  }
  ^

こうしたい

<stdin>:3:3: error: subscript must have accessors specified
  }
  ^

作業ログ

# ゴール

- [x]subscript の diagnostics が computed property になっているのを修正する
   -  [x]どういう時に出るエラーか
        - getter がない時に出る

# 分からないこと

- [x] 開発環境
    - Xcode or Vim?
    - どっちでもいい
- [x] デバッグの仕方
    - バグを再現するテストを書いて、直ったことを確認する
    - PRにはテストが必要
    - テストは短ければ短いほどいい
- [x]テストの書き方

# やること

- [x] issue に自分をアサインする
- [x] bug をバイナリで reproduce する
    - ビルドした swift を実行する
        - <unknown>:0: error: Swift does not support the SDK 'MacOSX10.13.sdk’
        - xcode-select で Xcode10beta見るようにしたら直った
- [x] テストを動かす
- [x] バグを再現するテスト書く
        - test/decl/subscript/subscripting.swift 173行目
- [x] computed property の方のテストが壊れていないことを確認する
        - test/decl/var/properties.swift 379行目
- [x] どこをどうやって修正するか
    - include/swift/AST/DiagnosticsParse.def
        - 251行目、プレースホルダを使うように文言を修正する
        - "%select{variable|subscript}0 must provide either a getter or “ こういうやつ???
    - [x] %select を使って修正する
        - https://github.com/apple/swift/blob/master/docs/Diagnostics.md
    - [x] 呼び元で引数を渡す
        - lib/Parse/ParseDecl.cpp
            - computed propertyとsubscriptを区別する
            - bool Parser::parseGetSetImpl 多分ここにisSubscript を渡さないといけない
            - static void diagnoseRedundantAccessors の引数に isSubscript というのがある (lib/Parse/ParseDecl.cpp 4016行目)

- [x] 自分の環境に fork して clone する
- [x] 自分がforkした方に修正を入れる
- [ ] 自分がforkした方でビルドする
- [ ] 自分がforkした方でテストを通す
    - [x] fork し直すのではなく、git の remote origin を変更した
- [x] PRを作る

このようにゴール、分からないこと、やることのアウトラインを先に書いて、作業を進めながら詳細を書き足していった。

swiftc のビルドエラー 'libxml/xmlreader.h' file not found について

swiftc を久しぶりにビルドしたら以下のエラーが出た。

/Users/enomoto/.ghq/github.com/apple/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp:21:10: fatal error: 'libxml/xmlreader.h' file not found
#include <libxml/xmlreader.h>
         ^~~~~~~~~~~~~~~~~~~~

結論を書くと、 libxml 配下のファイルがなくてビルドエラーになる場合、Command Line Tools をインストールできていない。Xcodeのバージョンを上げたので、インストールする必要があった。

Command Line Tools のインストール

$ xcode-select --install

再度ビルド

$ ./swift/utils/build-script -Rt

無事ビルドが通った。

環境

WWDC18に参加した

f:id:enmtknt:20180603131544j:plain

6月4日〜8日にカリフォルニア州サンノゼで開催されたAppleの開発者向けカンファレンス、WWDC18に参加してきた。WWDCは今回が初めての参加で、他では得がたい経験をたくさんすることができた。 今回、渡航準備をするにあたって以前WWDCに参加した方のブログ記事を参考にさせてもらったので、この記事もこれから参加する方に役立つ内容にできたらと思う。

良かった事

WWDCのお祭りのような雰囲気を生で体験できる、最新の情報を現地で得ることができるというのは魅力的だが、以下のような点が現地に行ったからこそできた経験だと感じた。

  • Appleのエンジニアに直接質問できる
  • 他のエンジニアと交流できる
  • 情報収集のアンテナを得た
  • 業務にとらわれない集中した時間

Appleのエンジニアに直接質問できる

会期中はAppleのエンジニアに直接質問できるラボが開催される。仕事で解決できず困っていた事象について相談しに行ったところ、あっさりと解決してしまった。技術的な質問以外にも、アプリのデザインに関するアドバイスを受けられたり、初心者向けのラボもあり、Appleのエンジニアに直接質問できる貴重な機会だった。後述するtry! Swift San JoseでもSwiftコンパイラチームのエンジニアから直接手ほどきを受けることができた。

他のエンジニアと交流できる

現地で沢山のエンジニアと知り合うことができた。技術的な会話をしたり、普段どのように開発をやっているかを話したり、情報交換をした。話を聞いたところ多くのエンジニアが会社負担、業務扱いでWWDCに参加していて、そういう文化がもっと当たり前になればいいと思っている。ちなみに僕も今回の渡航費と参加費は会社に負担してもらった。

情報収集のアンテナを得た

オフィシャルのドキュメントがなんだかんだ一番参考になるということ、WWDCのビデオをちゃんとチェックすれば詳細な情報を得ることができるということを改めて実感した。普段ついQiitaやStack Overflowを見がちなので、一次情報をしっかり確認する癖をつけたい。

業務にとらわれない集中した時間

人によるとは思うが、普段1つの技術について突き詰めて考える長い時間を確保するのは難しいと思う。普段の業務だったり、生活に関するあれこれだったり。そういうものにとらわれずに色々考えを巡らせたり、新しい技術を試す期間を持つことができるというのはとても貴重なのではないか。

f:id:enmtknt:20180604130033j:plain

準備と現地での過ごし方について

航空券

渡航の際の航空券について。当選が決まり次第なるべく早く押さえた方が良い。僕はHISでLA経由のチケットを手配してもらった。またアメリカへの渡航に際してはESTAの登録が必要になる。これは申請から登録まで少し時間がかかるので早めに登録を行っておくと良い。インターネットで簡単に申請できる。

宿

世界中から開発者がサンノゼに集まるので、これも当選が決まり次第なるべく早く押さえた方が良い。当選してから数日後に探し始めたが目ぼしいホテルはほとんど埋まっており、Airbnbで予約した。宿泊した場所は会場から車で10分程度のところだったが、とても綺麗で過ごしやすかった。必ずしもホテルが良いとは言い切れないように思う。会場から近い方が楽なのは間違いない。

移動手段

現地で会った人たちでは、UberLyftを使っている人が大多数だった。僕はレンタカーを手配したが、アメリカで運転するのはとても神経を使うし、借りるにもそれなりのお金がかかる。滞在の後半はUberを何度か使ったが、すぐに来てくれるし料金は安いし、すごい体験だった。
ちなみにレンタカーを運転する場合は国際免許が必要になる。免許センターに行けば、手続きだけで即日発行することができる。

インターネット環境

iijmioの海外旅行用のSIMを事前に契約していったが、結果的にはあまり筋が良くなかった。早々に容量が足りなくなり、AT&Tのショップに足を運んでSIMを契約した。国内でT-Mobileのツーリストプランを契約してきていた人もいた。 ちなみにWWDCの会場はWi-Fiが飛んでおり、普通にインターネットができる。作業スペースも大きく確保されていて、そこに行けば有線でネットワークを使うことができる。

持ちもの

発表された新しいOSをインストールするために、以前使っていたiPhone 5s, 6sを持って行った。それ以外は Quoraの記事 を参考に荷造りをした。また会場内はかなり強めに空調が効いていて、夜は冷えるので、春秋に着るぐらいの上着は持っていくとよい。

お金

サンノゼはほとんどの店がクレジットカードに対応しており、現金を使う機会はあまりなかった。クレジットカードがあるならば、不測の事態に備えて幾らか持っておくくらいで問題ないと思う。

日程、レジストレーション

WWDC本編は月曜から金曜までの開催となる。入場のためのレジストレーションは開催前日の日曜から毎日可能だ。月曜は朝からKeynoteがあるため、Keynoteで良い席を確保するために早朝から並ぶなら、日曜日に必ずレジストレーションしておくことを勧める。

周辺イベント

WWDC開催期間中は周辺で様々な技術イベントやミートアップが開催されるので、事前に調べて参加登録しておくと良い。僕は最終日の金曜は try! Swift San Jose に参加した。try! Swift San JoseではSwift open source projectにコントリビュートするというワークショップが行われ、以前からSwiftコンパイラのコードを読んだりしていた自分としてはとても興味が惹かれるイベントだった。AppleのSwiftコンパイラチームの方や日本人のメンターの方に質問しながら、Swiftコンパイラにコントリビュートすることができた。この時の話については別エントリでもう少し細かく振り返ろうと思っている。

またカンファレンス以外に、WWDC渡航した日本人エンジニアのミートアップや、現地で働く日本人エンジニアの飲み会に参加させてもらう機会があった。こういった場で多くの新しい出会いがあったので、積極的に参加すると楽しいと思う。

おわりに

今回、幸運にも当選したことや家族や職場の協力があって初めてWWDCに参加することできた。来年以降ももし機会があればまた参加したい。

f:id:enmtknt:20180605154622j:plain