おんがえしの blog

作ったプログラムと調べた技術情報

English Grammer in Use が全体の1/3位終わったのでここまでの知見をまとめる

f:id:tuto0621:20150106112726p:plain

57/145Unit終わった。残り84Unit。画像はofrubyで作った進捗をグラフ表示してくれるスクリプト(ソースは最後に置いた)。毎日淡々とやるのでは無く盛り上がったらガーっとやってしばらく空いてまたガーっとやる感じになってる。

進め方

  • English Grammar in Useの左側のページを読む
  • 読みながら理解したことをノートに書き出す(Unitによって量はばらつく)
  • English Grammar in Use ActivitiesのFIRST EXERCISEを解く
  • SECOND EXERCISEはやりたいと思ったものだけ、ほとんど解いていない

これで1Unit大体20〜40分位かかる。全て解くには72時間。1日平均2Unitこなすとあと2ヶ月かからずに全て終わりそう。

練習(Practice) > 勉強(Study)

英語を学ぶ上で、とにかく慣れに勝るものは無いと感じた。読み続ければ段々と速く理解出来るようになっていくし、読むのをやめれば段々と読解力は低下していく。なのでどれだけ興味のある英文を探して読み続けることが出来るかが大切だと感じた。

大量に英文を読む練習のための教材としてEnglish Grammer in Useはとても良く出来ていて、まず難しい単語が出てこない(語彙力不足というまた別の問題に悩まされなくて済む)、英文が文法的に綺麗(なはず、だって教科書だし)、最後に英文法という英語を学習したい人だったら割と興味のある知識について書いてあるので内容理解へのモチペーションが保ちやすかった(物語とかニュースだとつまらなそうと思った時点でモチベーションがだだ下がりする)。そしてEnglish Grammer in Useが教えてくれる英文法はとても分かりやすくて面白かった(後述)。

教科書を読んで基本的なルールを理解したらそれを装備出来るようにひたすら演習を解く(英文を読んで理解する)。日本語に訳す必要はなくて自分の頭の中のイメージで理解出来ればよい、日本語に訳しながら読むと遅い。語彙力はまた別途強化しようと思っているので、演習中であっても分からない単語があったらその都度辞書を引くようにした。

最初は日本語を読むのに比べて大量のエネルギーと時間を使うのでしんどかったけど、数日頑張っていると目に見えて読むスピードが上がって楽しくなってきた(日本語の読解力と比べて能力が上がりやすいのだと思う)。今はEnglish Grammer in Useと平行してHacker Newsに上がるような記事も簡単なものなら読めるようになってきた。あとYou Tubeのコメントとか。コメント欄の荒れ具合は日本語でも英語でもたいして変わらなかった。

読む際のイメージ補完の順番が日本語と違うことに慣れる

日本語に訳さずにイメージで理解する。ネイティブの人は前から読んで理解しているので後ろ読みとかしない。などは色々な人が言っているけど日本語をネイティブで話す人が大変なのはイメージの補完順が違う、ということだと思う。

つたない文章で申し訳ないけど

  • 私は ペンを 持ちます。

日本語の場合はまず主語(Subject)が来て次に目的語(Object)、最後に動詞が(Verb)が来る。登場人物が一通り登場した後それらに対する行動が決定される。最後まで持つのか、捨てるのか、渡すのか分からない。

  • I have a pen.

比べて英語の場合は主語(Subject)、動詞(Verb)、目的語(Object)の順で来る。"私が持つ"ことが最初に決定して最後まで何を持つのか、ペンなのか、パンなのか、ボールなのかが分からない。最初のうちはこの補完順の違いを意識していなかったので苦労した。無意識的になると日本語に適したイメージで理解してしまうのでここは意識的にコンテキストスイッチを切り替えるようにしている。

調べてみたら日本語のように主語(Subject)、目的語(Object)、動詞(Verb)の語順を取る言語をSOV型、英語のように主語(Subject)、動詞(Verb)、目的語(Object)の語順を取るものをSVO型というらしい(VSO型とかもあるアラビア語とか)。世界の言語の45%はSOV型だけど、英語と中国語がSVOなので人口比率でいったらSVO型の方が多そう。まあ両方使えるに超したことはない。

will と going to の肌感覚

English in Grammer in Useは簡潔で明確に英文法を教えてくれるので今までふわふわと使っていた部分が大分すっきりした。例えば"will"と"going to"はどちらも未来のことを表すのに使うけどこれら分かりやすい英文で教えてくれる。

(willの例) 引用 Unit24

SARAH: Let's have a party.

HELEN: That's a great idea. We'll invite lots of peopel.


will('ll): We use will to announce a new decision. The party is a new idea.

(going toの例) 引用 Unit24

Later that day, Helen meets Dan:

HELEN: Sarah and I have decided to have a party. We're goint to invite lots of people.


(be) going to: We use (be) going to when we have already decided to do something. Helen had already decided to invite lots of people before she spoke to Dan.

ざっくり訳すと

サラ: パーティしようよ

ヘレン: いいアイデアだね。We'll invite lots of peopel.


will('ll): willは新しい決断に使う。パーティは新しいアイデアです。

going to

何日かのち、ヘレンはダンに会う:

HELEN: サラと私でパーティすることにしたの。We're goint to invite lots of people.


(be) going to: すでに決断されたことに (be) going to を使う。ヘレンはたくさんの人を招待することをダンに話す前にすでに決断している

とても明確だ。教科書では時間軸を使った表や図を交えながら教えてくれるのでさらに分かりやすい。willとgoing toには他にもいくつかの用途があるのだけどそれも教科書の中で説明してくれる。

現在(Present)、過去(Past)、完了(Perfect) の使い分けなんかもEnglish Grammer in Useのおかげで大分すっきりした。

肯定的質問であれ、否定的質問であれ返答の仕方は同じ

Unit 49 より。

Do you want to go?

Don't you want to go?

のどちらの質問でも、

Yes. (= Yes, I want to go)

No. (= No, I don't want to go)

になる。日本語の場合はひっくり返るので注意。

おまけ: ofrubyで作った進捗をグラフ表示してくれるスクリプト

前回は文字を表示するだけだったけど大幅にパワーアップした。

TEXT_WIDTH = 8

def setup
  @out = [
    4, 5, 
    0, 0, 1, 0, 0, 0, 4, 
    0, 5, 6, 4, 8, 4, 3,
    8, 3, 0, 0, 2, 0, 0,
    0, 
  ] # 01/05
  @num = @out.reduce(141) { |a, e| a - e }
  # @num = @out.reduce(0) { |a, e| a + e }
end

def update
end

def draw
  push_matrix do
    set_color 0, 0, 0
    set_color 255, 0, 0 if @num < 0
    translate width / 2, height / 2
    scale 5, 5

    offset_x = -@num.to_s.length * TEXT_WIDTH * 0.5
    text "#{@num}", offset_x, 0

    text "day #{@out.size}", -18, -13
  end

  draw_graphs(@out, 0, 400, 10, 15)
end

def draw_graphs(ary, x, y, gx, gy)
  ary.each_with_index do |num, i|
    set_color_hex 0xe266ff
    set_fill true
    rect(x, y, gx, num * -gy)

    set_color_hex 0x000000
    set_no_fill
    rect(x, y, gx, num * -gy)

    if (i+1) % 10 == 0
      text (i+1).to_s, x, y + 20
    end

    x+= gx
  end
  
end