Jekyll2019-09-14T10:19:45-07:00/feed/index.xmlMilezeroBay area, Software engineering, Startup, Computer Science, Study abroadシリコンバレーでエンジニア就職する前に知りたかったこと2019-07-14T00:00:00-07:002019-07-14T00:00:00-07:00/2019/07/14/technical-interview-in-us<p>公開が遅くなってしまいましたが、2018年の秋ごろ行ったアメリカでの就職(転職)活動をまとめてみました。各会社で選考方法は異なるので、ケースバイケースな対応が必要ですが、共通的に対策できる部分もあるのでそれをまとめています。</p>
<p>日本のIT企業でもコーディング試験などの技術面接が導入されている会社があると聞いているので参考になるかもしれません。</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/juuI2qV9A8pO2x" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/TatsuyaNanjo/ss-171913694" title="シリコンバレーでエンジニア就職する前に知りたかったこと" target="_blank">シリコンバレーでエンジニア就職する前に知りたかったこと</a> </strong> from <strong><a href="https://www.slideshare.net/TatsuyaNanjo" target="_blank">Tatsuya Nanjo</a></strong> </div>公開が遅くなってしまいましたが、2018年の秋ごろ行ったアメリカでの就職(転職)活動をまとめてみました。各会社で選考方法は異なるので、ケースバイケースな対応が必要ですが、共通的に対策できる部分もあるのでそれをまとめています。TLA+ 入門2017-12-22T00:00:00-08:002017-12-22T00:00:00-08:00/2017/12/22/tla-plus-getting-started<p><a href="https://lamport.azurewebsites.net/tla/tla.html">TLA+</a>は、MicrosoftやAmazonがミドルウェアの設計に利用しているステートマシンの記述言語です。実際、Azure Cosmos DBやAmazon DynamoDB, S3, EBSはTLA+を使って設計、検証を行っていると公式に発表されています。</p>
<ul>
<li><a href="https://cacm.acm.org/magazines/2015/4/184701-how-amazon-web-services-uses-formal-methods/abstract">AmazonはどのようにTLA+を利用しているか</a></li>
<li><a href="https://www.youtube.com/watch?v=L_PPKyAsR3w">Azure Cosmos DBの設計・開発におけるTLA+の貢献</a></li>
</ul>
<h2 id="ideのダウンロードとインストール">IDEのダウンロードとインストール</h2>
<p>TLA+はTLA ToolboxというIDEが用意されており、シンタックスチェックや、作成したステートマシンの検証を行うことが可能です。TLA Toolboxは下記のGitHubのリンクからダウンロードが可能で、利用するにはJava 1.8以上が必要です。</p>
<ul>
<li><a href="https://github.com/tlaplus/tlaplus/releases">ダウンロード先</a></li>
</ul>
<h2 id="ステートマシンの記述">ステートマシンの記述</h2>
<p>TLA+は、JavaやPythonなどでのプログラミングと以下の点で異なります。</p>
<ul>
<li>数学的な表記方法</li>
<li>どう実装するかではなく、どう動くかを記述</li>
</ul>
<p>それでは簡単なPythonコードとTLA+コードを比較してみましょう。</p>
<p>以下は、1か2の乱数を取得し、それに1を加えるPythonプログラムです。乱数の取得方法は、現在のタイムスタンプを2で割ることによって実装しています。</p>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">time</span>
<span class="k">def</span> <span class="nf">getRandNum</span><span class="p">():</span>
<span class="k">return</span> <span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span> <span class="o">%</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
<span class="k">def</span> <span class="nf">addOne</span><span class="p">(</span><span class="n">i</span><span class="p">):</span>
<span class="k">return</span> <span class="n">i</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">getRandNum</span><span class="p">()</span>
<span class="n">i</span> <span class="o">=</span> <span class="n">addOne</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
<span class="c1"># debug
</span><span class="k">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</code></pre></div></div>
<p>TLA+では、初期状態Initと次の状態Nextを使って表現します。以下がTLA+での記述例です。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>EXTENDS Integers
VARIABLES pc, i
Init == i = 0 /\ pc = "start"
Rand1 == /\ pc = "start"
/\ i' = 1
/\ pc' = "middle"
Rand2 == /\ pc = "start"
/\ i' = 2
/\ pc' = "middle"
Add1 == /\ pc = "middle"
/\ i' = i + 1
/\ pc' = "done"
Next == Rand1 \/ Rand2 \/ Add1
</code></pre></div></div>
<p>TLA+では数学的な記法を用いており、JavaやPythonでは見られない記法が用いられています。おおざっぱに各記号は下記を意味しています。</p>
<ul>
<li>== … “定義する”という意味。Init == i = 0 /\ pc = “start”は、i = 0 /\ pc = “start”にInitという名前をつけている。</li>
<li>= … “等しい”という意味。i = 0は変数iがゼロに等しいかを調べる。</li>
<li>/\ … “かつ”という意味。i = 0 /\ pc = “start”は変数iがゼロかつ、変数pcがstartに等しいことを表す。</li>
<li>\/ … “または”という意味。Rand1 \/ Rand2 \/ Add1はRand1か、Rand2か、Add1という意味になる。</li>
<li>X’ … “Xの次の状態”という意味。i’ = i + 1は変数iを1追加して更新することを表す。</li>
</ul>
<p>特に「=」の使い方がプログラミング言語での使い方と逆なので注意が必要です。</p>
<p>TLA+では、どのように実装するかは議論しないので、Pythonコードに見られたタイムスタンプを使って乱数を生成するところは記述しません。</p>
<p>TLA+では、前提条件preconditionと事後条件postconditionを使って記述します。例えば、Rand1では、前提条件pc=”start”が満たされれば、変数pcを”middle”、変数iを1に変更します。初期状態Initで、変数pcは”start”が代入されているので、初期状態の後、Rand1を実行することができます。また、Rand2も同じ前提条件pc=”start”ですが、Add1は前提条件pc=”middle”なので、初期状態の後Rand1かRand2は起こりますが、Add1は起こりません。これはPythonコードの実行順序(i=getRandNumのあと、i=addOne(i))に一致しています。初期状態から、Rand1とRand2の両方が実行可能というのは、PythonコードでgetRandNumが1か2を返すのか決定的でないことと同じです。</p>
<h2 id="ステートマシンの実行">ステートマシンの実行</h2>
<p>実際に、上記のTLA+をTLA Toolboxで実行してみましょう。インストールしたTLA Toolboxを起動し、File -> Open Spec -> Add New Spec…をクリックします。適当なディレクトリを指定し、Finishをクリックします。ここではSampleという名前にしました。</p>
<p><img src="/assets/tla1.png" alt="tla1" /></p>
<p>上記のコードを「—-MODULE Sample—-」「======」の間にコピペして、保存します。保存すると自動で、更新日時がコメントとして挿入されます。</p>
<p><img src="/assets/tla2.png" alt="tla2" /></p>
<p>では、TLC Model Checker->New Modelをクリックして、新しいモデルをつくります。ここでは、名前を「Model_1」として作成しました。作成できたら、赤枠にある実行ボタンを押してみます。</p>
<p><img src="/assets/tla3.png" alt="tla3" /></p>
<p>実行が完了すると、「Deadlock reached」というエラーがでると思います。今回は、乱数を生成し、1を追加した後のステップは用意されていないモデルなので、デッドロックとなります。Model Overviewタブをクリックして、Deadlockの検証を外します。</p>
<p><img src="/assets/tla4.png" alt="tla4" /></p>
<h2 id="ステートマシンの検証">ステートマシンの検証</h2>
<p>書いたプログラムをテストコードでテストするように、TLA+で作ったステートマシンもテスト(検証)することが可能で、この試験により設計上のバグを見つけることができます。ステートマシンの検証では、全てのステートで成り立つ不変量Invariantと、ステートマシンの性質を定義したPropertyの2種類を調べられます。</p>
<h3 id="invariant">Invariant</h3>
<p>今回の例では、乱数1、2に対して1を加えるので、変数iは常に0から3までの数値です。これをInvariantを使って検証します。</p>
<p><code class="highlighter-rouge">Next == Rand1 \/ Rand2 \/ Add1</code> の次の行に、下記を追加します。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-------
NumberLimit == i \in {0,1,2,3}
</code></pre></div></div>
<p><code class="highlighter-rouge">i \in {0,1,2,3}</code>は、変数iが集合{0,1,2,3}の要素であることを示しています。モデルのタブをクリックして、上記のInvariantを追加します。Invariants欄のAddをクリックして、NumberLimitと入力してFinishをクリックします。</p>
<p><img src="/assets/tla5.png" alt="tla5" /></p>
<p>NumberLimitを追加できたら、緑色の再生ボタンを押して、再びモデルを実行します。Error Detectedの欄が「No errors」になることがわかると思います。これは、変数iが全てのステートで0から3までの数値であることを示しています。それでは、先程のコードを変更して、エラーを起こしてみましょう。NumberLimitを下記のように変更して、再びモデルタブから再生ボタンを押してみます。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-------
NumberLimit == i \in {0,1,2}
</code></pre></div></div>
<p>さて今回は、下記のようにエラーがでると思います。左のパネルではトレースというエラーにいたるまでのステートの変化が表示されています。今回は、乱数が2のとき、1を加えた結果が3になることを表しています。このようにして、全てのステートで成立すべき性質をTLA Toolboxに調べさせることができます。</p>
<p><img src="/assets/tla6.png" alt="tla6" /></p>
<h3 id="property">Property</h3>
<p>さて、Invariantは全てのステートで成り立つ性質の話でしたが、もうすこし複雑な性質を検証したい場合、Propertyを使います。エディタに戻り、NumberLimitの下に以下のコードを追加します。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>NumberLimit == i \in {0,1,2,3} /* {0,1,2,3}に修正する */
Done == [](pc = "done" => i>1)
</code></pre></div></div>
<p><code class="highlighter-rouge">[](pc = "done" => i>1)</code> は、<a href="https://en.wikipedia.org/wiki/Temporal_logic">Temporal Logic</a>を使った記述方法で、変数pcがdoneのとき(すなわち変数iに1を加え終わったとき)、変数iは1より大きいということを表しています。モデルのタブをクリックして、上記のPropertyを追加します。Properties欄のAddをクリックして、Doneと入力してFinishをクリックします。</p>
<p><img src="/assets/tla7.png" alt="tla7" /></p>
<p>緑色の再生ボタンを押して、Error Detectedの欄が「No errors」になれば、「変数iに1を加え終わったとき、変数iは必ず1よりも大きい」という性質が満たされていることがわかります。</p>
<h2 id="まとめ">まとめ</h2>
<p>今回はTLA+を紹介しました。TLA+は設計用の言語なので、その実装方法については触れず、前提条件が満たされた場合に何が起こるのか、事後条件を記述していきます。TLA+で記述することで、実装前から試験が可能になり、仕様上のバグがないかどうか調べることがことできます。さらにTLA+を知りたいという方は、下記のビデオコースがおすすめです。</p>
<ul>
<li><a href="http://lamport.azurewebsites.net/video/videos.html">The TLA+ Video Course</a></li>
</ul>TLA+は、MicrosoftやAmazonがミドルウェアの設計に利用しているステートマシンの記述言語です。実際、Azure Cosmos DBやAmazon DynamoDB, S3, EBSはTLA+を使って設計、検証を行っていると公式に発表されています。形式手法 / Formal Methods2017-12-20T00:00:00-08:002017-12-20T00:00:00-08:00/2017/12/20/formal-methods<p><a href="https://ja.wikipedia.org/wiki/%E5%BD%A2%E5%BC%8F%E6%89%8B%E6%B3%95">形式手法(Formal Methods)</a>は、AmazonやMicrosoftがクラウドサービスの設計・検証に利用している技術で、システムを数学的な記法で表現します。要件定義書や設計書を数学的な記法で表すことで、自然言語による曖昧さを回避することや、システムが期待通り動くか、専用のツールで検証することができます。</p>
<ul>
<li><a href="https://cacm.acm.org/magazines/2015/4/184701-how-amazon-web-services-uses-formal-methods/abstract">Amazon:TLA+をDynamoDB、S3、EBSの設計・検証に利用</a></li>
<li><a href="https://www.youtube.com/watch?v=L_PPKyAsR3w&feature=youtu.be">Microsoft:TLA+をAzure Cosmos DBの設計・検証に利用</a></li>
</ul>
<p>今回は形式手法の1つ、FSP (Finite State Processes)という表記方法を紹介します。</p>
<h2 id="例題データベースシステム">例題:データベースシステム</h2>
<p>この記事ではシンプルなデータベースシステムを設計することを例に説明します。このシステムは1つのプライマリーDBと、1つのセカンダリーDBからなり、書き込みはプライマリーDBに行い、読み込みはセカンダリーDBに行うシステムとします。プライマリーDBからセカンダリーDBへはデータがコピーされます。</p>
<p><img src="/assets/blog-fsp.png" alt="FSP" /></p>
<h2 id="準備線形時相論理linear-temporal-logicltl">準備:線形時相論理(Linear Temporal Logic、LTL)</h2>
<p>なんだかむずかしいタイトルですが、自然言語を数学的に記述するのに利用します。下記の3つの表記方法をこの記事では使っています。</p>
<ul>
<li>[] P: 常にPは真である。</li>
<li><> P: 将来のいずれかの時点でPは真になる。</li>
<li>X P: 次の状態でPは真になる。</li>
</ul>
<p>これを利用すると例えばデータベースシステムの性質を下記のように書くことができます。</p>
<ul>
<li>プライマリーDBはいつも動いている: [] isRunning(primary)</li>
<li>セカンダリーDBはデータをもつ: <> hasData(secondary)</li>
<li>プライマリーDBに書き込みをされれば、セカンダリーDBにも書き込みがされる: [] (write(primary) -> <> write(secondary))</li>
<li>リクエストの後すぐにレスポンスする: [] (request(primary) -> X response(secondary))</li>
</ul>
<p>ここでisRunning(x)、hasData(x)などは <strong>Predicate</strong> と呼ばれるもので、isRunning(x)はxが起動中であるときに真になり、hasData(x)はxがデータをもっているときに真になるとします。「->」は <strong>内包(imply)</strong> と呼ばれるもので、「もし〜〜があったら」を表現するのによく使われます。</p>
<p>PredicateやImplyなどを詳しく知りたいという方がいらっしゃいましたら、下記のオンラインコースが参考になります。</p>
<ul>
<li><a href="https://www.coursera.org/learn/what-is-a-proof">Cousera: What is a Proof?</a></li>
<li><a href="http://oli.cmu.edu/learn-with-oli/see-all-oli-courses/">Carnegie Mellon: Proof & Logic</a></li>
</ul>
<h2 id="fsp-finite-state-processes">FSP (Finite State Processes)</h2>
<p>さて、本題の形式手法に入ります。形式手法ではたくさんの記述方法があるのですが、FSPは、教科書やツールがそろっており勉強の手始めに最適です。今回のデータベースシステムの例をFSPで記述すると下記のようになります。このコードは実際に<a href="https://www.doc.ic.ac.uk/ltsa/">LTSA Tool</a>で動作するものであり、このツールを利用することで、状態遷移図を描画させたり、システムの検証をすることができます。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// プライマリーデータベースのモデル
// * 書き込みリクエストに対応する
PRIMARY = (request_write -> write_primary -> write_secondary
-> response_write -> PRIMARY).
// セカンダリーデータベースのモデル
// * プライマリーDBからの書き込みリクエストに対応する
// * 読み込みリクエストに対応する
SECONDARY = (request_read -> read_data -> response_read -> SECONDARY
|
write_secondary -> SECONDARY).
// システムはプライマリーDBとセカンダリーDBからなる
||SYSTEM = (PRIMARY || SECONDARY).
</code></pre></div></div>
<p>FSPコードは、イベントを順に記述していきます。プライマリーのほうは、request_writeイベントのあと、write_primaryイベントがあり、write_secondaryイベント、response_writeイベントを経て、また初期状態に戻ります。これは、クラアントからリクエストが来ると、まずはプライマリーDBに書き込み、その後セカンダリーDBに書き込んでから、クライアントにレスポンスを返すことを表現しています。セカンダリーのコードにある「|」という記号は2つのイベントのどちらかが起こることを示し、クライアントからの読み取りイベントrequest_readと、プライマリーからの書き込みイベントwrite_secondaryのどちらかを処理することを表現しています。</p>
<p>上記のコードをLTSA Toolで描画させるとそれぞれ下記のようになります。赤い丸で表現されている状態0が初期状態で、リクエストを待っている状態です。プライマリーDBに関しては、書き込みのリクエスト(request_write)が来ると、状態1に遷移します。このように、FSPでは状態に名前をつけるのではなく、状態を変化させるイベントに名前をつけるのが特徴です。セカンダリーDBの初期状態0は、読み込みのリクエスト(request_write)か、プライマリーDBからの書き込みリクエスト(write_secondary)を受け付けるものになっています。</p>
<p><img src="/assets/fsp_primary.png" alt="fsp_primary.png" />
<img src="/assets/fsp_secondary.png" alt="fsp_secondary.png" /></p>
<h2 id="モデルの検証">モデルの検証</h2>
<p>さてここからが面白いところで、FSPで記述されたデータベースシステムの検証を行っていきます。</p>
<p>最初に、「書き込みリクエストに対して、システムは最終的にレスポンスを返すかどうか」どうかを検証したいと思います。LTSA Toolに下記のコードを追記して、Compile後、「Check->LTL Property->GET_RESPONSE」と選びます。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// リクエストが来た状態とレスポンスを返した状態を定義
fluent W_REQUEST = <{request_write}, {response_write, write_primary, write_secondary}>
fluent W_RESPONSE = <{response_write}, {request_write, write_primary, write_secondary}>
// リクエストが来た場合、最終的にはレスポンスを返すことを検証
assert GET_RESPONSE = [](W_REQUEST -> <>W_RESPONSE)
</code></pre></div></div>
<p>LTSA Toolが総当りで検証した後、「No LTL Property violations detected.」と表示され、このモデルではリクエストが来たら、そのうちレスポンスを返す性質を保証していることがわかりました。</p>
<p><img src="/assets/fsp_ltl_result.png" alt="fsp_ltl_result.png" /></p>
<p>では、違反する例を見てみましょう。下記のコードでは、プライマリーの書き込みのすぐ後、セカンダリーへ書き込む性質があるかどうか調べます。</p>
<div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// プライマリーへの書き込みの状態とセカンダリーへの書き込みの状態を定義
fluent W_PRIMARY = <{write_primary}, {request_write, write_secondary, response_write}>
fluent W_SECONDARY = <{write_secondary}, {request_write, write_primary, response_write}>
// プライマリーの書き込みの次の処理は必ずセカンダリーへ書き込みを行うことを検証
assert DOUBLE_WRITE = [](W_PRIMARY ->X W_SECONDARY)
</code></pre></div></div>
<p><img src="/assets/fsp_ltl_result2.png" alt="fsp_ltl_result2.png" /></p>
<p>同じように検証を行うと今度は、「Trace to property violation in DOUBLE_WRITE:」と出て、今回の仕様では、プライマリーの書き込み直後にセカンダリーへの書き込みが行われない場合があることを指摘しています。エラーメッセージにはトレース(Trace)という、違反するまでに辿ったイベントが記載されているので、これを参考に仕様上のバグを見つけることができます。今回のシステムでは、プライマリーにデータが書かれた後、セカンダリーにデータが書かれる前に、セカンダリーは読み込みリクエストに対応できるのが違反の理由でした。</p>
<h2 id="まとめ">まとめ</h2>
<p>今回は形式手法の1つFSPを紹介しました。プログラミング言語とは異なる表記方法ですが、わりと直感的に書けるのと、小さいシステムであれば状態遷移図を描画させることができるので形式手法を学ぶ目的でもFSPがおすすめです。</p>
<p>最終的に、3つのイベントを経て見つかる簡単な仕様上のバグ(プライマリーの書き込み直後にセカンダリーへ書き込みされない)を検出しましたが、Amazon DynamoDBの場合は最低でも35イベント[1]を経ないと見つからないバグだったそうです。再現するのにそれだけ多くのイベントを必要とするバグの検出は、人間の頭では難しく、AmazonはTLA+という別の形式手法で、AWSの設計、検証を行っているそうです。</p>
<p>もし、もっと知りたいという方がいらっしゃいましたら、下記の本をおすすめします。</p>
<p><a href="https://www.amazon.co.jp/dp/0470093552/">Concurrency: State Models and Java Programs</a></p>
<h2 id="引用">引用</h2>
<ul>
<li><a href="https://cacm.acm.org/magazines/2015/4/184701-how-amazon-web-services-uses-formal-methods/abstract">How Amazon Web Services Uses Formal Methods</a></li>
</ul>形式手法(Formal Methods)は、AmazonやMicrosoftがクラウドサービスの設計・検証に利用している技術で、システムを数学的な記法で表現します。要件定義書や設計書を数学的な記法で表すことで、自然言語による曖昧さを回避することや、システムが期待通り動くか、専用のツールで検証することができます。Master of Software Engineering, Carnegie Mellon University2017-12-19T00:00:00-08:002017-12-19T00:00:00-08:00/2017/12/19/master-of-software-engineering-carnegie-mellon-university<p>授業を受けながら更新しようと思っていましたが、あまりに過酷な日々で結局一度も更新できずに終わりました。</p>
<p>日曜日(!!)に最後の試験が終わって、次の学期が始まるまで1ヶ月ほど時間があるので復習も兼ねて振り返っていきたいと思います。</p>
<p>各授業の話をする前に、私の所属する<a href="http://mse.isri.cmu.edu/software-engineering/index.html">Master of Software Engineering (MSE)</a> プログラムを紹介したいと思います。</p>
<h2 id="mseプログラムの目的">MSEプログラムの目的</h2>
<p>2〜5年の業務経験をもつ若手エンジニアが1つ上のステップに行くために必要なスキルを提供するプログラムです。実際、Software Developer IやSystem Adminといったポジションで数年経験を積んだ人たちが、卒業後、Software Engineer IIやSenior Software Engineer、Project ManagerといったポジションでIT業界に戻っていきます。</p>
<h2 id="mseプログラム構成">MSEプログラム構成</h2>
<p>MSEプログラムは <strong>Coreコース</strong> と <strong>Studioプロジェクト</strong> の2つからなります。Coreコースは講義形式で行われるので、宿題が多すぎるということを除けば、日本の大学の授業とそれほど変わりません。Studioプロジェクトは、Coreコースで学んだ内容を実践する場で、実際に、クライアントと要件定義から始めて、開発、納品を1年間で行います。修士課程では修士論文をゴールに置くプログラムも多いですが、本プログラムでは修士論文を書くことはなく、Studioプロジェクトでの納品と講師陣へのプレゼンテーションをもって修了となります。</p>
<h3 id="coreコース">Coreコース</h3>
<p>アカデミックな内容というよりは、ソフトウェア工学の中で実際の現場で役立つものを中心に勉強します。下記の5つのコースがCoreコースに指定され、必修科目となります。</p>
<ul>
<li>形式手法:17-651 Models of Software Systems</li>
<li>要件定義:17-652 Methods: Deciding What to Design</li>
<li>プロジェクト管理:17-653 Managing Software Development</li>
<li>ソフトウェア品質管理:17-654 Analysis of Software Artifacts</li>
<li>ソフトウェア設計:17-655 Architectures for Software Systems</li>
</ul>
<p>各コースの内容は別の機会に書きますが、全体的な特徴として、コーディングよりもリーディングやライティングが重視され、また個人課題と同時にグループワークが頻繁に行われます。</p>
<p>コーディングに関しては、既にできることを前提としているためCoreコースでは扱われないのだと思います。実際、MSEプログラムの入学試験にはコーディング試験が含まれており、そこでフィルタリングしていると考えられます。代わりに、リーディングやライティングが重視され、毎週100ページを超えるリーディング課題と、4〜5ページのエッセー課題が出されます。これは、プログラムの目的である1つ上のステップでは、技術スキルに加えて、読み書きなどのコミュニケーションスキルが重要であると考えられているためです。</p>
<p>また、Coreコースでは個人課題に加えて、グループ課題が出され、週2,3回学生ãちがチームミーティングを開いています。コンピュータサイエンス系の授業では個人でプログラミングを行うところが多いですが、就職後はチームで開発することになるため、MSEプログラムでは就職後スムーズにチーム開発に入れるよう、毎週のようにグループ課題がだされます。チームは国籍や勤務年数を考慮して、なるべく公平になるように決められます。</p>
<h3 id="studioプロジェクト">Studioプロジェクト</h3>
<p>Studioプロジェクトは、学生を4〜5名のグループに分け、ソフトウェアを必要としている組織・企業が割り当てられ、1年間そのクライアントのために開発を行います。公式サイトではクライアントの例として<a href="http://mse.isri.cmu.edu/software-engineering/web8-news/archive/20151115-MSENASA.html">NASA JPL</a>を紹介してます。</p>
<p>プロジェクトにはソフトウェア開発経験の豊富な2名のメンターがつき、毎週クライアントと打ち合わせをもち、メンターとの相談を通して進めていきます。私はまだチームが決まったばかりで実際に進めるのは来年からなのでまた後日アップデートしたいと思います。</p>
<h2 id="最初の学期を振り返って">最初の学期を振り返って</h2>
<p>渡米前に、Carnegie Mellon大学は大変だと聞いていましたが、予想よりもはるかに大変でした。イメージとしては、大学入試直前の高校3年生といった感じでしょうか。週末も含めほとんどの時間を宿題に費やさないとついていけない…という状態でした。</p>
<p>最初の1ヶ月は英語に慣れるのが大変でした。大量のリーディング課題が出るのに読むのが遅く、エッセーも日本語で下書きしたものを翻訳して書くため、いつも時間が足りないと思っていました。1ヶ月も経つと、エッセーにも慣れ、2時間で2ページぐらいのエッセーは書けるようになり、またスキミングもできるようになり、20ページぐらいの記事であれば1、2時間で読めるようになりました。</p>
<p>英語に慣れてきたと思った頃、グループワークが始まり、また大変な日々が始まりました。グループワークは課題のゴールはあるものの、どう進めていくかはチームで決められるので自由度が高く、徹夜してチーム全員で一緒にやるチームもあれば、たった2時間のミーティングで後は個人作業で進めるチームもあります。全員が他の宿題で忙しい中、どのようにタスクを割り振るか、また自分たちで決めた期限を守れないメンバーをどうするかなど…頭を悩ませることが多かったです。さらに、ほとんどが非ネイティブの学生であるためコミュニケーションに苦労し、締め切り間際になってミスコミュニケーションが発覚し、成果物に一貫性がないということもありました。</p>
<p>ただ、クラスメイトが40名程度と比較的小さく、毎日授業で顔を合わせるため、お互い励ましあえる良い環境でした。また、出欠を取るのがメインの日本のTA (Teaching Assistant)と異なり、こちらでは成績上位者のみがTAとして採用されるので、TAは非常に優秀で困ったときに頼りになりました。</p>
<p>次の学期も大変だと聞いていますが、しっかり休んで頑張っていこうと思っています。</p>授業を受けながら更新しようと思っていましたが、あまりに過酷な日々で結局一度も更新できずに終わりました。留学生向け英語プログラムを受講しました2017-08-13T00:00:00-07:002017-08-13T00:00:00-07:00/2017/08/13/language-bootcamp<p>カーネギーメロン大学(CMU)に入学する留学生を対象に、留学準備に役立つ情報を提供するプログラムLanguage Bootcampに参加したので、印象に残ったことを書きます。</p>
<ul>
<li><a href="http://www.cmu.edu/icc/programs/summer/index.shtml">プログラム概要</a></li>
</ul>
<h2 id="引用と盗作-citation--plagiarism">引用と盗作: Citation & Plagiarism</h2>
<p>事前課題として、<a href="http://www.cmu.edu/icc/languagetraining/videos.shtml">ビデオ</a>を見てエッセーを書くのですが、4本中3本が引用、盗作に関するもので、留学中に最も気をつけなくてはならないのが盗作なんだとわかりました。授業でも盗作を避ける方法として、 <strong>引用</strong> (原文をそのまま利用すること)と <strong>パラフレーズ</strong> (原文を言い換えて利用すること)の2つが紹介されました。いずれも、参考文献に引用元を明記する必要があります。</p>
<h2 id="名前-name">名前: Name</h2>
<p>学生生活で最初に大切なことは、相手の名前を覚え、自分の名前を覚えてもらうことですが、留学生の名前はアルファベットだけでは表現しきれないので、しばしば間違って覚えられたり、覚えてもらえないことがあります。そこで強調されていたのは、相手が名前を呼べない、覚えられない場合、それは <strong>あなたの責任</strong> であり、相手の責任ではないということでした。</p>
<p>名前を覚えてもらうコツとして3つが紹介されていました。</p>
<ul>
<li><strong>ゆっくり話す</strong> : 多くの人は自分の名前を名乗る時、早く喋りすぎているそうです。母国の人はそれでもついていけますが、英語圏の人には馴染みのない音なので、いつもよりもゆっくりとはっきり話すことが名前を覚えてもらう第一歩だそうです。</li>
<li><strong>母語の発音は諦める</strong>: 誰でも母語にない音については発音できず、近い音を探して発音します。この発音を無理に直そうとせず、許容することが大切だそうです。</li>
<li><strong>英語で近い発音を探す</strong>: 英語のスペルと音が若干異なる場合、近い発音の単語を探し、それを覚えてもらうという方法があるそうです。例えば、Naokiの場合、Now Keyとすると英語圏の人は発音しやすく、覚えやすいそうです。</li>
</ul>
<h2 id="アメリカの講義-us-classroom">アメリカの講義: US Classroom</h2>
<p>基本的に講義の仕方にスタンダードはなく先生によって異なるそうです。例えば先生の呼び方に関しても、Dr. Smithを好む人もいれば、Firstnameを好む先生もいるそうです。</p>
<p>日本の講義との大きな違いが、授業への参加方法(Participation)で、授業中質問をしたり、オフィスアワーにディスカッションしたりしない学生は、興味がないという印象を持たれてしまうようです。成績の中にはParticipationが含まれている講義もあるので、積極的に発言していくことが重要なようです。</p>
<h2 id="スピーキング-speaking">スピーキング: Speaking</h2>
<p>よく留学生が勘違いしがちなこととして、早く話すことがよいことだと思うことです。ネイティブでも重要なことを話すときや、プレゼンをするときはゆっくりと喋るので、常に早く話せばよいというのは間違いです。</p>
<h2 id="発音-pronunciation">発音: Pronunciation</h2>
<p>最近の研究で、大人になってから母音や子音の練習をして発音をマスターするのは時間がかかりすぎ、非効率的だとわかったそうです。代わりに、 <strong>ストレス</strong> と <strong>ボディランゲージ</strong> をマスターすることで、訛があっても伝わる英語が話せるようになるそうです。</p>
<p>例えば、非ネイティブが発音に苦労する単語として、15(Fifteen)と50(Fifty)があります。これは、fifTEEN、FIFty(大文字にストレスをおく)と発音することで正確に伝えることができます。また、ストレスを置いているところに手を水平に動かすなどボディランゲージを追加することでより伝わりやすくすることができるようです。</p>
<p>ストレスを置く方法としては3つが紹介されました。</p>
<ul>
<li><strong>Louder</strong>: 音量をあげる</li>
<li><strong>Longer</strong>: 長めにしゃべる。逆にストレスを置かないところはまとめて発音する(I’m…)</li>
<li><strong>Pause</strong>: ストレスの前後でポーズを置く。一つの単語の前後でもポーズをおく(math-MATICAL)</li>
</ul>
<h2 id="演じるスキル-drama-techniques">演じるスキル: Drama techniques</h2>
<p>人々の記憶に残る話やプレゼンをするには、 <strong>感情を伝える</strong> ことが大切だそうです。このような授業は日本で受けたことがなかったので面白かったです。</p>
<p>感情を伝える方法として2つを練習しました。</p>
<ul>
<li><strong>アイコンタクト</strong>: 話す前や話している間に、聴衆一人一人をしっかり見つめることで、相手を話に引き込むことができるそうです。<a href="http://dbp.theatredance.utexas.edu/node/29">Zip Zap Zop</a>という、アイコンタクトを繋いでいくゲームをしてみんなで練習しました。</li>
<li><strong>話すスピードや音量</strong>: 強調するところをゆっくり話したり、大きな声で話すこと、逆にそれ以外を素早く話をすることで感情を伝えます。<a href="https://www.poets.org/poetsorg/poem/crocodile">Lewis Carroll</a>の詩を読んで、感情をのせる練習をしました。</li>
</ul>
<p>他にもListening/Writing/Presentationの授業がありました。どの授業も講師の方の説明はわかりやすく、教材もよく準備されていました。英語の自信のない方は参加されることをおすすめします。</p>カーネギーメロン大学(CMU)に入学する留学生を対象に、留学準備に役立つ情報を提供するプログラムLanguage Bootcampに参加したので、印象に残ったことを書きます。DAY ONE2017-08-01T00:00:00-07:002017-08-01T00:00:00-07:00/2017/08/01/day-one<p>8/1本日、日本を出発してペンシルバニア州ピッツバーグに引っ越しました。といっても3つのバックを持ってきただけで、机とかベッドとか大きなものはアメリカで買い揃えるので、トラックで輸送するような引っ越し感はありません。</p>
<p>Amazon.comのCEO Jeff Bezosが会社を始めた日(Day One)を大切に思い、「Every Day is Day One」と企業理念においているので、私も今日は特別な気持ちになるかなぁと昨晩から思っていました。</p>
<p>残念ながら、人生が変わった!!というほど、大きな気持ちの変化はありませんし、もう背水の陣だから負けられない!!と思うこともなく、至って平常心というところが本音です。駄目だったら、日本に帰ってまた一からやり直そうと気楽に考えています。</p>
<p>振り返ったときに何か感じるものがあるかもしれないので今日やったこと、思ったことを羅列しておきます。</p>
<h2 id="午前中">午前中</h2>
<p>荷物を詰めながら、今日リリースのファイアー@ポケモンGoがでないかなぁとチラチラみて、ショッピングモールと駅前に2体出たので捕まえに行きました。無事1体捕まえられました。お昼ごはんはコンビニのおにぎり2つ、からあげ、サラダでした。家をでる時に、母親にマンションの前で写真を撮ってもらいました。</p>
<h2 id="空港への道中">空港への道中</h2>
<p>いろいろな方から、「今日渡米だねー」とメッセージをいただいたので、それを返しながら電車に乗っていました。また母親からさっき撮った写真をLINEで送ってもらいました。最近ガラホに変えたばかりですごく苦労して送ってくれたみたいで、うれしかったです。一方、ポケモンGoを一緒にやっている高校の友人のLINEグループにはファイアーの話があふれ、こいつらはホントに馬鹿だな,,,と笑いました。伝説評論家のOさんは既に3体ファイアーを捕まえていました。</p>
<h2 id="成田空港">成田空港</h2>
<p>搭乗まで時間があったのでラウンジに入って、Amazon.comで家具を注文しました。そのとき、日付指定で8/3にしたはずの空調がもうすぐ届くこと(7/31)がわかり、急いでマンションの管理会社に受け取って保管してもらうようメールしました。たぶん対応してくれたのかな…あと、ベッドのフレームを同じものを2個注文していたようで、1個は返品の処理をしました。残念ながら時間が遅くなってしまったので返送の送料として$30とられることになりました。ちょっと凹みました。</p>
<h2 id="飛行機の中">飛行機の中</h2>
<p>デルタ航空で成田からまずはデトロイトに飛びました。道中は飛ばしながらKindleで2冊読みました。</p>
<ul>
<li>
<p><a href="https://www.amazon.co.jp/dp/4121017323/">アメリカの大学院で成功する方法―留学準備から就職まで (中公新書)</a></p>
</li>
<li>
<p><a href="https://www.amazon.co.jp/dp/B01GDS0994/">SOFT SKILLS ソフトウェア開発者の人生マニュアル</a></p>
</li>
</ul>
<p>成功する方法については、大学の予習でたくさんのリーディングが課せられると知って、速読できるようにしなきゃなーと思いました。就活の話はどちらかというと大学教員向けの話であまり参考になりませんでした。SOFT SKILLSについては、投資あたりのトピックが未着手なのでこれをいつ始めるかなぁと考えました。</p>
<p>デトロイトからピッツバーグのフライトはほぼ寝ましたが、隣の人がNintendo DSでポケモンをしていたのが印象的でした。</p>
<h2 id="ピッツバーグ到着後">ピッツバーグ到着後</h2>
<p>まずはUberでAirbnbで予約した家に向かいました。Uberの運転手は英語があまり得意じゃなさそうでしたが、私にたくさん質問をしてコミュニケーションを取ろうとしていました。このバイタリティはすごいな…と思いました。家に到着後、ちょうどホストがいたので家の中を案内してもらいました。綺麗なアメリカ英語だったのに、ほぼ言ってることがわかりませんでした。なんででしょうね。まずいです。とりあえず、水とフルーツを買いに小売店にいきました。お店のオーナーが気さくな人で、ピッツバーグ初日だと言ったら、友達になってくれました。</p>
<p>あとは部屋に戻って、シャワーを浴びて、この記事を書いています。なんてことはない普通のDAY ONEでした。でも明日からの日々が楽しみでしょうがありません。</p>8/1本日、日本を出発してペンシルバニア州ピッツバーグに引っ越しました。といっても3つのバックを持ってきただけで、机とかベッドとか大きなものはアメリカで買い揃えるので、トラックで輸送するような引っ越し感はありません。クラウドビジネスの情報収集2017-07-27T00:00:00-07:002017-07-27T00:00:00-07:00/2017/07/27/keep-up-with-cloud-business<p>前職では、クラウドサービスに関する業務を行っていましたが、日々たくさんのニュースを消化するのに苦労していました。情報を得る手段も書籍やブログから、facebook、イベントなど多岐に渡り、毎日かなりの時間を割いてキャッチアップにつとめていました。情報収集に困っている方やこれからクラウドビジネスに関わり始める方向けに、私が実践していたそこそこ効率的な情報収集法をスライドにまとめてみました。</p>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/1oTpFKAK7OcR7F" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/TatsuyaNanjo/ss-171904186" title="変化の激しいクラウドビジネスで生き抜く情報収集法" target="_blank">変化の激しいクラウドビジネスで生き抜く情報収集法</a> </strong> from <strong><a href="https://www.slideshare.net/TatsuyaNanjo" target="_blank">Tatsuya Nanjo</a></strong> </div>前職では、クラウドサービスに関する業務を行っていましたが、日々たくさんのニュースを消化するのに苦労していました。情報を得る手段も書籍やブログから、facebook、イベントなど多岐に渡り、毎日かなりの時間を割いてキャッチアップにつとめていました。情報収集に困っている方やこれからクラウドビジネスに関わり始める方向けに、私が実践していたそこそこ効率的な情報収集法をスライドにまとめてみました。留学前の手続き2017-07-18T00:00:00-07:002017-07-18T00:00:00-07:00/2017/07/18/prepare-for-study-abroad<p>2017年8月より留学で長期間海外に滞在するので、その際に行った手続きについてまとめました。</p>
<h2 id="免許証の更新">免許証の更新</h2>
<p>海外渡航を証明する書類(パスポート)を提示することにより、 <strong>更新期間前更新</strong> ができます。更新日から誕生日までを1年と計算するので、通常の更新に比べて有効期限が短くなりますが、更新時期に帰国できるかわからないので更新しておきました。</p>
<h2 id="国外転出届の提出">国外転出届の提出</h2>
<p>住民票を抜く(国外転出届を出す)かどうか、意見がわかれるところです。国外転出を抜くと支出は減りますが、国民健康保険は加入できなくなります。私は下記の理由から2017年7月をもって国外転出することにしました。</p>
<h3 id="1-2018年6月より住民税の負担がなくなる">1. 2018年6月より住民税の負担がなくなる</h3>
<p>2017年1月1日に日本に居住し、2016年の所得もあったため、会社を辞職した後も納税の義務があります。(2017年6月〜2018年5月分)こちらは退職時に一括で支払いました。それ以降(2018年6月以降)については、2018年1月1日に日本に居住していないため、負担しなくてよくなります。</p>
<h3 id="2-2017年8月より国民健康保険料の負担がなくなる">2. 2017年8月より国民健康保険料の負担がなくなる</h3>
<p>健康保険に関しては、国外転出を行うと加入できなくなります。支出は減りますが、一時帰国時に病院に行った場合は <em>自己負担100%</em> になります。私の場合、所属する大学が提供する健康保険に加入するので、医療は米国で受けることにしました。</p>
<h3 id="3-2017年8月以降も年金は継続できる任意加入">3. 2017年8月以降も年金は継続できる(任意加入)</h3>
<p>年金に関しては、国外転出を行うと加入の義務はありませんが、 <em>任意加入</em> で継続することができます。仮に脱退しても、老齢基礎年金の受給資格期間に加算される <em>カラ期間</em> になるそうです。2017年7月現在、受給資格期間は10年となっています。ただ、障害基礎年金については、初めて診療を受けた <em>初診日</em> に年金に加入していない場合は受給できないそうなので、私は、任意加入で継続して加入することにしました。</p>
<h3 id="マイナンバーについて">※マイナンバーについて</h3>
<p>国外転出をすると、マイナンバーカードの返納手続きが必要です。通知カード/マイナンバーカードは失効しますが、帰国後再利用されるので保管しておく必要があるそうです。</p>
<h2 id="union-bankの口座開設">Union Bankの口座開設</h2>
<p>留学時に、授業料引き落とし口座として米国の銀行口座が必要でした。通常、米国の銀行口座を開設するには渡米し、米国の住所で手続きが必要となりますが、三菱東京UFJ銀行が提供するカリフォルニアアカウント・プログラムを利用することで、日本から米国の銀行口座を開設できました。</p>
<ul>
<li><a href="http://www.bk.mufg.jp/tsukau/kaigai/kouza/cali/index.html">海外口座ご紹介サービス《カリフォルニアアカウント・プログラム》</a></li>
</ul>
<p>プログラム申込み時にChecking Accountを選択するとCheckが使えますし、またデビットカードの発行依頼も行うことができ、かなり便利です。ただし、条件を満たさない場合、口座位置手数料がかかるので注意が必要です。もし、三菱東京UFJ銀行の銀行口座を持っていない場合は、先に三菱東京UFJ銀行の口座開設が必要になります。</p>2017年8月より留学で長期間海外に滞在するので、その際に行った手続きについてまとめました。TOEICの点数の上げ方2017-07-17T00:00:00-07:002017-07-17T00:00:00-07:00/2017/07/17/how-to-improve-toeic-score<p>前回は自己啓発的な内容だったので、今回は具体的に英語力をつけてTOEICスコアを上げる方法の話を書いてみました。長文になってしましました。。。</p>
<h2 id="単語">単語</h2>
<p>TOEICの単語は大学受験で要求される英単語に近いです。もし、大学受験時の単語帳があればまずはそれを復習するのがよいと思います。</p>
<p>単語を覚える際の注意として、下記3点が上げられます。</p>
<ol>
<li>復習を繰り返すこと</li>
<li>ランダムに復習すること</li>
<li>目で覚えるだけでなく、音としても覚えること</li>
</ol>
<p>日常的に使わない英単語を長期記憶にのせるには時間がかかり復習を習慣づけるしかありません。また、単語帳の問題点として、位置で単語の意味を覚えてしまうという問題があります。例えば、単語帳が下記のようになっていた場合、 appointment を 約束 と覚えるのではなく、1ページ目の1番上にあるから 約束 と覚えてしまい、テストで appointment と聞かれてもわからなくなるということがあります。</p>
<table>
<thead>
<tr>
<th>No</th>
<th>単語</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>appointment</td>
<td>約束</td>
</tr>
<tr>
<td>2</td>
<td>schedule</td>
<td>予定</td>
</tr>
<tr>
<td>3</td>
<td>meeting</td>
<td>会議</td>
</tr>
<tr>
<td>4</td>
<td>complaint</td>
<td>不満</td>
</tr>
<tr>
<td>5</td>
<td>office</td>
<td>職場</td>
</tr>
</tbody>
</table>
<p>さらに、大学受験の際はリスニングが出題されることがほとんどないので単語の発音を覚える必要はありませんが、TOEICではリスニングがありますので、単語の発音まで覚える必要があります。</p>
<p>月額利用料が千円程度かかりますが <a href="http://iknow.jp/">iKnow</a> というサービスを使うと、上記の3つの問題をクリアして効率よく単語を記憶できます。iKnow自体TOEIC用の単語セットを提供しているので、すぐに始めることができますし、自分で単語を登録することも可能です。復習に関しては、iKnowが各単語の正答率をみて、記憶しているものは低い頻度で、記憶していないものは高い頻度で復習できるように管理してくれるので、苦手な単語を重点的に勉強できます。また、出題は完全にランダム化されていますし、出題方法としてスペルから意味を答える問題もあれば、単語の発音を聞いて意味を答える問題もあるので、発音の暗記も可能です。</p>
<p><img src="/assets/iknow1.png" alt="iKnow1" /></p>
<p>各単語の記憶率を表したMap。exorbitantは79%で復習が必要な単語を表しています。</p>
<p><img src="/assets/iknow2.png" alt="iKnow2" /></p>
<p>意味から単語を当てる問題の例。この場合、「法外だ」に対応する単語を選択します。</p>
<p><img src="/assets/iknow3.png" alt="iKnow3" /></p>
<p>ヒアリングをして単語をあてる問題の例。スクショだとわかりませんが、、単語の音が流れています。</p>
<h2 id="文法">文法</h2>
<p>文法自体は、中学・高校で習ったものがそのまま使えるので、あらためて勉強する必要はないかと思います。ただ、Part5でに限っては、熟語やコロケーション(単語の組み合わせ)などを覚えていないと解答できません。下記の文法特急によくまとまっているので一読されるとよろしいかと思います。</p>
<ul>
<li><a href="https://www.amazon.co.jp/dp/B009AALO06/">1駅1題 新TOEIC(R) TEST 文法 特急</a></li>
<li><a href="https://www.amazon.co.jp/dp/4023308404/"> 新TOEIC TEST 文法特急2 急所アタック編</a></li>
</ul>
<h2 id="リーディング">リーディング</h2>
<p>時間内に読み終わらない…という話をよく聞きます。その場合、下記3点が足りないのかと思います。</p>
<ol>
<li>単語が足りていない</li>
<li>必要な情報に限って読んでいない</li>
<li>日本語の順番に直して読んでいる</li>
</ol>
<h3 id="単語が足りていない">単語が足りていない</h3>
<p>よくリーディングでは単語を推測しなさいと教わりますが、推測はあたるとは限らないし、周りの本文を読んで単語を推測するには時間がかかります。</p>
<p>例えば<a href="https://www.voanews.com/a/turkish-tech-start-ups-head-to-silicon-valley/3944869.html">VOA News</a>から引用した下記の文章にしばしば出てくる coup という単語の意味がわからなかったとします。 coup は3つの全てのパラグラフに出てくるので推測も不可能ではないと思いますが、推測した意味がすべてのパラグラフで正しく当てはまるか確認する必要があり、これはかなり時間がかかります。もし coup がクーデターと知っていれば、そんなことに時間を割くことなく読み進められるのです。よってTOEICの練習問題を解いている際にわからない単語がでてきたら覚えてしまったほうがよいです。</p>
<blockquote>
<p>SAN MATEO, CALIFORNIA —
Since the failed military coup in Turkey one year ago, it’s been harder for startups to attract foreign investment, said entrepreneurs at a recent tech conference in California.</p>
<p>After the July 15, 2016, coup attempt, the Turkish government cracked down on perceived opponents to President Recep Tayyip Erdogan. Many have lost their jobs and thousands have been imprisoned, including journalists, academics and activists.</p>
<p>For Mustafa Acet, an entrepreneur in Istanbul, the coup and its aftermath have been a setback for the burgeoning tech ecosystem in Turkey. He recently attended Etohum San Francisco, an event bridging the Turkish startup community with Silicon Valley.</p>
</blockquote>
<h3 id="必要な情報に限って読んでいない">必要な情報に限って読んでいない</h3>
<p>TOEICではしばしばチラシのような文章がでます。このような文章ではそもそも全ての文章を読む必要がないのに、丁寧に全部を読んでしまっている人がいます。</p>
<p>例えば、下記は有名な<a href="http://ec.alc.co.jp/lp/product/h4/">英語教材ヒアリングマラソンのキャンペーン広告</a>ですが、もし設問が「申込締切はいつか?」というものであれば、いろいろなヒアリングマラソンの紹介文を無視して、日付を探して6/25、7/25と見つけるでしょう。</p>
<p><img src="/assets/alc.png" alt="ALC" /></p>
<p>TOEICのチラシ問題でも同じように必要事項のみ読むことが可能ですし、そのようなスキルを試している問題なので、本文を丁寧に読んでしまっては時間がなくなります。TOEICの練習問題をやる際に、設問から読んで、それに対応する必要な箇所を見つける練習をすると良いと思います。</p>
<p>日本語の順番に直して読んでいる
英語は、①主語、②動詞、③目的語の順で文章が作られるのに対して、日本語は①主語、②目的語、③動詞の順なので日本語に訳そうとして本文を入れ替えようとしますが、TOEICのReadingの1文は長いので、入れ替えに試行錯誤したりして時間がかかります。英文を英文のまま理解しなくても、英語の順で日本語に訳して理解できるスキルが身につけば、スピードアップして読むことができます。</p>
<p>例えば先程と同じく、<a href="https://www.voanews.com/a/turkish-tech-start-ups-head-to-silicon-valley/3944869.html">VOA News</a>から長めの文章を引用してみました。</p>
<blockquote>
<p>Despite being a market of nearly 80 million people, Turkey is still limiting for companies ready to becoming bigger, said Elif Ceylon, U.S. program coordinator for ITU Gate, which is a program out of Istanbul Technical University trying to bring successful Turkish startups to the United States.</p>
</blockquote>
<p>これをきれいな日本語にするためには、並べ替えの並べ替えが必要なのでかなり大変ですが、ひとまずwhich節に限って並べ替えてみます。</p>
<ul>
<li>元の英文: ITU Gate, which is a program out of Istanbul Technical University trying to bring successful Turkish startups to the United States.</li>
<li>並べ替えた英文: “ITU Gate” “Turkish startups to the United States” “trying to bring successful” “Istanbul Technical University” “a program out of”</li>
<li>日本語訳: ITU Gateはトルコのスタートアップを米国に連れていくことに挑戦しているイスタンブール技術大学から生まれたプログラムです</li>
</ul>
<p>動詞と目的語を入れ替えるだけといっても、複雑な文では時間がかかりますし、何度もこの並べ替えで合ってるか、、、確認作業が入り時間がかかります。これを英文の順番の訳して理解すれば、そのような並べ替えや確認作業がなくなり、素早く読めるのです。例えば、上記の例では以下のようになります。</p>
<ul>
<li>元の英文: ITU Gate, which is a program out of Istanbul Technical University trying to bring successful Turkish startups to the United States.</li>
<li>英文の順の日本語訳: ITU Gate プログラムです イスタンブール工科大学から生まれた 挑戦している 連れていく トルコのスタートアップ アメリカへ</li>
</ul>
<p>もちろんすぐにできるようになるわけではありませんが、Readingの練習中に意識してやることで素早く習得できると思います。</p>
<h2 id="listening">Listening</h2>
<p>最後にリスニングです。リスニングが苦手な人は下記、2つが足りていない可能性があります。</p>
<ol>
<li>本文の一部の単語しかとれなかった</li>
<li>日本語の順番に直して理解しようとしている</li>
</ol>
<h3 id="本文の一部の単語しか聞きとれなかった">本文の一部の単語しか聞きとれなかった</h3>
<p>リスニングのスピードが速いと感じられたり、単語がわからなかったりという理由で本文の一部しか聞き取れなかったとします。これは、音質の悪い状況で電話をしているようなもので一部しかわからなければ、やはり誤解がうまれます。</p>
<p>先程の文章がリスニングで流れたとしましょう。ただし、下記のように一部しかわからなかったとします。これでは、失業などなにか悪いことがあったことはわかりますが、その原因は全くわかりません。もしTOEICの設問が「なぜ失業者が生まれたか」というものだったら、これでは解答できないのです。</p>
<blockquote>
<p>After the July 15, 2016, <strong>* attempt, the Turkish government *** down on *** *** to President Re</strong> Tay** Erd<em>**. Many have lost their jobs and thousands have been **</em>, including journalists, academics and activists.</p>
</blockquote>
<p>少しでも多くの単語を聞き取るために、聞き取った単語をすべて文字起こしできるようにすることが大切です。先程紹介したiKnowではSentence Trainerというものがあり、ヒアリングをして穴埋めをするトレーニングができます。</p>
<p><img src="/assets/iknow4.png" alt="iKnow4" /></p>
<p>まずは一部の穴埋めを始めて、慣れてくると一文丸々文字起こしする問題になります。このような地道なトレーニングをすることで、聞き取れなかった単語を少なくすることができます。</p>
<h2 id="日本語の順番に直して理解しようとしている">日本語の順番に直して理解しようとしている</h2>
<p>仮に全文章の文字起こしができたとしても、それを素早いスピードで理解できなければ、次の文章が読み上げられ、それを文字起こしして、、、となり結局、本文の意味が理解できません。これは先程のReadingでも鍛えられるスキルですが、英語の順番で理解できるようにして、素早く意味を理解できるようにすると良いと思います。</p>
<h2 id="最後に">最後に</h2>
<p>本文中ではあまり強く触れませんでしたが、練習問題をたくさん解くことがもちろん大切になります。公式問題集の他にたくさん問題がのっている韓国系の問題集を使っていました。</p>
<ul>
<li><a href="https://www.amazon.co.jp/dp/4053035287/">TOEICテスト完全攻略リーディング10回模試解説付き</a></li>
<li><a href="https://www.amazon.co.jp/dp/4053035279/">TOEICテスト完全攻略リスニング10回模試解説付き</a></li>
</ul>
<p>以上が、私がTOEICのスコアをあげるために役立った勉強法になります。一度実践されてみてはいかがでしょうか。</p>前回は自己啓発的な内容だったので、今回は具体的に英語力をつけてTOEICスコアを上げる方法の話を書いてみました。長文になってしましました。。。英語の勉強法を教えてほしい2017-07-15T00:00:00-07:002017-07-15T00:00:00-07:00/2017/07/15/how-do-you-study-english<p>よく周りからそんなことを聞かれます。</p>
<p>大学2年まで全く海外に行ったことはありませんでしたし、長期の海外経験も24歳までありませんでしたが、ちょこちょこ英語の勉強をしていて、TOEICでもそれなりのスコアを取得していました。</p>
<p>語学学校やフィリピン英会話、ヒアリングマラソンなど、色々な方法で勉強したので勉強法をアドバイスするのは(ちょっと)自信あるのですが、アドバイスした方の英語力をなかなか上げられていません。そこで今回は具体的な勉強法からは離れて、私が英語を勉強する上で大切にしている3つのことをご紹介したいと思います。</p>
<h2 id="1-ゴールを明確にする">1. ゴールを明確にする</h2>
<p>ただ漠然と英語をしゃべれるようになりたい!!と言う方がいらっしゃるのですが、多くはアドバイスした本を買って1週間程度で辞めてしまいます。本や勉強法が合わなかったということもあるでしょうが、私はいつまでに何をやるか、つまりゴールを明確化していなかったためではないかと考えています。</p>
<p>私自身も新しい英語の勉強法を取り入れては、長くても数週間でだんだんやらなくなってしまうという経験をしました。そんな中、就職活動の際に試した英語の勉強法はうまくいったのでご紹介します。就職するにあたってグローバルな仕事を就きたいと思い、就活が始まる少し前にTOEICの勉強をはじめました。その際は、できればライバルに差をつけたいので、 <strong>就活開始の12/1までに、950点以上のスコアを獲得する</strong> という期限とスコアが明確な目標をたてました。</p>
<p>9月より勉強を開始して、単調なTOEICの勉強は好きではなかったですが11月末まで…と決めたことで続けることができました。また、期限の1ヶ月前のスコアが910点だった知ったときは焦って1日の3, 4時間勉強して、なんとか目標を達成することができました。</p>
<table>
<thead>
<tr>
<th>日付</th>
<th>スコア</th>
</tr>
</thead>
<tbody>
<tr>
<td>2010/11/28(勉強開始前)</td>
<td>890</td>
</tr>
<tr>
<td>2011/10/30</td>
<td>910</td>
</tr>
<tr>
<td>2011/11/27</td>
<td>970</td>
</tr>
</tbody>
</table>
<h2 id="2-定期的に効果測定をする">2. 定期的に効果測定をする</h2>
<p>ゴール設定した後は、ゴールに近づいたか、変わっていないか定期的に効果を測定したほうがよいです。これには大きく2つの理由があります。</p>
<ol>
<li>効果の出ない勉強法を変えるため</li>
<li>モチベーションをあげるため</li>
</ol>
<p>勉強法の効果を見て、効果がでなければ変えればいいです。もし効果が出ない原因までわかれば、さらによい方法が見つかると思います。例えばテストに出る90%以上の単語がわかるのに単語の勉強を続けてもしかないですよね。また、単調な英語の勉強も効果がわかれば、頑張って続けるモチベーションになります。</p>
<p>上記の就活時の例では、週一回必ず公式問題集の問題を解いてTOEICの換算スコアを出し、自分の点数が上がったか下がったか把握するようにしていました。これにより、リスニングはミスが少ないのであまり勉強しても点数があがらないとわかり、リーディングの方を重点的に勉強し、スコアを上げることができました。</p>
<h2 id="3-楽しみながら学ぶ">3. 楽しみながら学ぶ</h2>
<p>教科書や問題集だけの勉強はストレスが溜まるし、誰だって楽しいものではないと思います。先の例では3ヶ月という短いスパンだから耐えられましたが、より長いものになれば続けられなかったと思います。</p>
<p>留学の準備で1年以上英語の勉強をしていたときは、Huluでよく海外ドラマを見ていました。日本語字幕をつけていましたが、それでも俳優が言ったセリフを丸々聞き取れたときには、成長を感じられましたし、最近覚えた単語が出てくるとうれしくなり、勉強の励みになりました。ポケモンGoを英語でやっていたときは、TOEFLで覚えた単語farfetched(こじつける)がそのままカモネギの名前に使われていることを発見したり、コダックの英名PsyduckがPsy(心理的な)+duck(アヒル)に分解できたときとかはよく考えられてるなぁ笑と感心しました。</p>
<p>教科書や参考書から離れてドラマやゲームなどの娯楽で実際に使ってみると気分転換にもなるだけでなく、自分の成長を実感できますし、まだまだ知らないことがいっぱいあるなぁと思えばさらに勉強する励みにもなります。</p>
<p>以上です。今回は英語を勉強する上で私が大切にしている3つのことを書きましたが、これらは他のスキルを習得する際も同じではないでしょうか。次回は、より実践的な英語の学習方法について書ければと思います。</p>よく周りからそんなことを聞かれます。