英検1級受験2016年度第1回、TOEIC210、TOEIC-SW 2016/5/15の結果

留学が終わって、各種英語のテストを一通り受験してみました。
結果ですが受験した順番で、TOEIC-SWがS:120 W:140、TOEICは835、英検1級の方は不合格でした。
思い起こすと、2年で英検1級を合格するという目標を立てましたが残念ながら未達成でした。ただ、得点が一次:2014点で合格点が一次:2028点ですので、後14点ということで、このまま精進すれば次回は合格するかと思われます。
TOEIC-SWとTOEICの結果がちょうど2年前と同じで、『わざわざ留学してこれか?』と思い愕然としました。普段ならあまりこういうことで崩れるメンタルではないのですが、さらに英検1級の学校で行ったテストのライティングの点数が低く、さすがにモチベーションを保つことができなくなり最後の頑張りが出来なかったです。もっとも、調子が良ければよかったで勉強しなくなるから実力どおりと言えばそうなのかもしれないが。
ただ、TOEICとTOEIC-SWの点数が低いのはさすがに、勉強していかなかったからのようで、TOEICに関しては今月も受験しましたが、先月よりも出来は良かったです。TOEICですが英検の前後であと1,2回受験したいともいます。
TOEIC-SWの方は、何をすればよいのか今一つ良く解らない感じで料金も高いので、気が向けば年1回のペースで受験しようかとおもとります。
ちなみに、通訳案内士の登録も終わりガイドデビューもしましたが、やはり実践に勝る経験はないようで、仕事となるとやる気が格段に違ってきました。のでガイドの仕事を続けて行けば英語力の維持は可能だと思います。

(1)英検
 今年の1回目からシステムが変わりCSEというスコアで結果が出るようになった。これにより合格・不合格という尺度ではなくTOEICのようにスコアで比較が出来るようになったようです。つまり理論的には、英検準1級と1級を同時に受験すれば同じスコアが出るということらしいです。ということでいつか英検準1級と1級をダブル受験しようかと思います。CSEですが満点が4000点ですが、英検1級で取得できる最高得点は3400点らしいです。
とまぁ、英検の回し者のようにCSEの説明をしていますが、ただ個人的には前の方が良かったという思いが拭えません。例えばTOEICの場合、問題の中には簡単なものもあれば難しいものもあり、それにより得点を10から990へとスケーリングが可能かと思いますが、英検の場合、問題の難易度は1級のモノに集中しておりその難易度から外れたスコアの正しさが今一つ解りません。また自分の過去の得点の推移を見て感じたことは、学習時間と得点が比例関係になく同じような点数をずっと続けるた後にぽっと点数が上がるという感じになるので細かく点数を出されても学習者にとってはどうだろうという印象もあります。
もっとも単に1級合格といってもギリギリで合格の人と余裕で合格の人とはやはり英語力には差が出てくるでしょうから評価する人にとっては使いやすいかもしれません。
という訳で、ここでは一次試験の結果を従来の得点ベースで換算して出します。換算方法ですが作文以外は正確に出せるのですが、作文については満点が変わった(28→32)ので比較の為に従来の点に換算(0.875を掛けて四捨五入)しています。

英検1級一次得点推移(2016年からは換算値)
 2014/12014/22014/32015/12016/1
語彙・熟語1110111114
読 解1315101019
リスニング1819181721
作 文413161623
合計4857555477,2014(CSE)

 全体的に1年前と比べて得点は上がっています。作文が高め(得点率81%、合格者の平均点と同じ)でリスニングが低め(得点率55%、受験者の平均以下)です。リーディング(語彙・読解)は若干低い(得点率63%、受験者の平均)になります。リスニングが低いのは単純に疲れが出たからだと思われます。主にPart2の得点が低いのですが(10問中3問正解)完全に休んでいました。Part1が10問中6問正解で、Part3が5問中4問正解、Part4が2問中2問正解ということでリスニング対策というより持久力をつける方向で精進したいと思います。具体的には英語のドラマを見たりとかになります。
作文については評価が難しいです。というのも英検の予備校での模試の点数はあまり高くなく10点とかでしたが本番では26点でした。作文は前回から評価方法が変わったらしく以下のとおり詳細が出ているのですが、
内容:7点
構成:8点
語彙:6点
文法:5点
(それぞれ満点が8点)となっています。構成の点が高いような気がしますがその他はこんなもんだろうとも思います。
実はエッセイは留学中に何回か書いており結果もそう悪くなかったので模試で10点というので『やっぱり英検の1級は違うのか?』とも思ったでのですがどうも文章の評価は主観が入るので模試の採点者と合わないということでもう予備校にはいかないでおこうかと思ってます。一応本場でそれなりに勉強してきましたからそれを信じることにします。もっとも勉強自体は続けた方がいいので代わりとどうするかは思案のしどころではあります。が、日ごろから積極的に英語を使っていけば大丈夫かなとも思ってます。


(2) TOEIC
 TOEICもちょうど、210回目から試験のシステムが変わりました。リスニングのPartIが少なくなり、PartIIIとPartIVで図が入ってきたり、『この発言の意図はなにか?』的な問題が出たりしました。リーディングでは文章が3つ出くる問題が追加されました。個人的には変わった後の方が解きやすい気がします。
TOIECの成績推移(210回まで)
 190191192193194195196198199200201202210
L445395420360405415395445420430400425440
R390370385340370410380350435390375335395
T835765805700775825775795855820775760835

 210回の結果と190回(2年前)の結果が同じで、『留学の結果がこれか?』と一瞬、眩暈を覚えたのですが、2年前は比較的必死で勉強したのに対して今回はまったく準備をしなかったのでそれにしては良くできた方かもしれないと思いなおすことにした。アビリティーメジャーを見ると『フレーズや文から話しての目的や暗示されている意味が理解できる』というのが追加になり、それの得点が悪いです(得点率50%)。確かにいきなり『どういう意図でこれを言ったか?』という趣旨を問う問題が何問かあり『おっ』とした記憶があります。ただ問題数自体がそう多くなかったので(確か2,3問)、特段対策等は考えなくてもよいかとも思います。強いて言えば前もって問題文を読んだ時に意図の問題だと解れば、そのフレーズを覚えておけばリスニング中に意図を取るのは私にとっては難しくはないかと思います。実際に211回はそんな感じで対応しました。
リーディングは、塗り絵(でたらめにマークしたもの)が9問ありました。最後の2つのパッセージが出来なかったです。こちらの方は完全にペースが掴めなかったようです。ただ正答率は高かったようで、留学前はだいたい5問程度塗り絵で同じぐらいの点数だったのでまぁ回を重ねたら元に戻るかと思う。ただ、前からの方針でTOEICの受験に際して読み飛ばしとかPart??からやるとかを行わないで馬鹿正直に先頭からきちんと読んでやっているのであまり点数は伸びないかもしれない。が、せっかくなので過去最高点(435)は超えたい。ちなみに211回は受験済みでこちらは塗り絵が2問でした。ので少しは点数が伸びているかと思われる。

(3) TOEIC-SW
 一年振りに受けたTOEIC-SWの結果は以下のとおり、
TOIEC-SWの成績推移
 2014/5/182015/5/172016/5/15
S120110120
W140130140

 こちらもTOEICと同様2年前と同じ点数になった。準備をしていなかったのもあるが、そもそも論として自由度が高いので今一つコツが掴めない。実はスピーキングは15秒で答える問題が1問まるまる落としたのだが(無回答)、結果にはあまり関係ないとも思う。このテストだが、発音とイントネーションの評価をそれぞれ3段階で行ってくれる。今まではそれぞれMediumで今回も変わりないがこれをHighが取れるように頑張りたい。ちなみに留学で変化なしというもの凹む。ちなみに最初のリーディングが留学前は22,3秒前後でパッセージを読んでいたが、留学後は12,3秒になった。読むスピードが速くなったのが実感できた。ライティングは最後のエッセイが270ワード書いた。こちらは留学前が240ワードだったので少し伸びた(得点にはあまりつながらなかったが)。TOEIC-SWも続けて受験したら点数が伸びるとは思うが、毎年誕生日前後に受験しているので恒例行事にしようかとも思う。毎回勉強せずに受験すれば素の実力が図れるのでちょうどよい。

帰ってから意外にやることがあり、ブログの更新をサボっていたのですが、溜めるとやっぱり良くないということにちょっと気が付いた。
2016-06-28 | コメント:0件



語学留学28週目(4/29)終了 TOEIC-SW 2016/05/15の受験

 早いもので、留学が終わって日本に帰国して2週間が経ちました。
留学の方は無事(?)に卒業しまして、その足で帰国しました。帰国後、バタバタしておりましてブログの更新が滞ってましたのが、ここいらでアップデートしておきます。
 10.15
1学期目
11.15
2学期目
12.15
3学期目
01.16
4学期目
02.16
5学期目
03.16
6学期目
04.16
7学期目
Level106107108109110111112
GPA3.32.93.23.13.02.62.6

 最後に成績が振るわなかったのは110からリーディング・ライティングクラスに変わった関係でしゃべりの方がおろそかになりそのおかげで今一つスピーキングが上達しなかったようだ。7ヶ月で何処まで上達したがが気になるところではあるが、とりあえず各種資格試験を受けることにする。ちなみに1年振りにTOEIC SWを受けた。結果は良く解らないが音読が前回より早く読めるようになった。前回は25秒程度でパッセージを読んでいたが今回は13秒位で読めるようになった。3倍になれば大佐に褒められるが2倍なので残念ではある。
帰国後の英語力の維持をどうするかだが、ちょっと思案のしどころではある。とりあえず、通訳案内士の登録の方を済ませたのでいよいよ実戦で使っていくのがよいかと思われる。後は、
さらに長期プランになるが、ADPのマニュアルの英語化を進めたいし、一回外資系の企業に勤めてみたい気もしている。悩ましいところではある。

 さて、一通り、留学が終わったので今後の為に反省を行いたい。当初2,3ヶ月の予定で始めたが、結局7ヶ月留学したことになる。帰国して改めて感じるのは何やかんやで会話力は上がったようだ(繰り返しになるがその会話力の維持をどうするかが問題であるが)。一番の反省点だが、発音については日本にいるときにしっかりとやっておいた方がよかった。ネイティブの方は日本語訛りを聞いて、『違う』とは言えるが何処をどう直せばいいかまでは解っていないようであった。そういう意味ではホストファーザーが一番為になった。中国人・韓国人・台湾人の中で悲しいくらいに日本人の発音が一番わるかった。一旦日本に帰国したときにみっちりと発音を練習したらだいぶ治ったようだが、それで他の事(ライティングの練習)を行うとまた発音がおろそかになってもとに戻るという繰り返しだった。
日常生活はあとで振り返ると信じられないくらいストイックだった。4月の後半に日本に帰るとなったら一気にやる気がなくなった。まぁ、テレビもないし7時までには帰宅しなければならないし朝の8:30から授業が始まるわでよくやったかと思う(まぁ、それだけ英語力を伸ばしたかったらしい)。
さて、語学留学ということで語学学校に通った訳ですが選択肢としては大学に通うというのもあったかと思う。これが悩ましいところだが、純粋に語学力を高める場合はやはり一度は語学学校に行って正解だと思った。ちなみに大学となるとコンピュータサイエンスを受講することになるが知っていることをやる場合は何も勉強にならない上に知らないことを学習する場合は英語力がついていかないのでボロボロと聞き損じが出てしまう。知らないことで英語の勉強も兼ねてやればよいのだろうが英語の勉強だけでヒーヒー言っていたのでまぁ英語力に集中してよかったかと思う。ちなみに語学学校でもレベルが110になると基本的な文法は卒業して応用的なことを行ったのだが、応用的なことになると例えばプレゼンテーションの場合、英語力以外の能力の勉強になるため英語の方がおろそかになった。プレゼントとかは充分なので個人的にはもう少し文法等の強化を行いたかった。
クラスメートがほとんどが20歳前後の人になるのでやはりジェネレーションギャップを感じた。大学院とかになるともう少し近い年齢の方と勉強することになるかと思う。もっとも大学院に行く程の英語力が無かったのだが、次回、渡米する場合は大学院か仕事で行きたい。
2016-05-22 | コメント:0件



オブジェクト指向再考(メッセージ4、メソッドと関数3)


今月も月末に向かって地味に忙しくなって更新が遅れてしまいました・・・。

 前回と前々回に分けてダブルディスパッチについて説明しました。前回の繰り返しになりますが、この考えをさらに進めると複数のオブジェクトに対してポリモーフィズムを効かせればどうなるか?という話になります。一般化ですね。もっとも残念ながら、3つ以上のオブジェクトに対してポリモーフィズムを効かせる具体例が思いつきません。まぁ、『3者面談をやった時の先生と生徒と保護者の性格別の対応策』というのも考えられなくはないですが、今まで3つ以上のオブジェクトに対してポリモーフィズムを働かせた実戦経験はありません。ただ、この一般化-マルチディスパッチとかマルチメソッド-というアイデアを頭の隅に置いておくといつか使える日が来るかもしれません。

n体のオブジェクトに対してポリモーフィズムを働かせる。

と考えた場合、『n=0の時はどうなるか?』という考えが湧いてくるでしょう。そうです。n=0の時はメソッドに関係するオブジェクトが無いと考えられます。従来の関数がそれにあたります。
C++は自然に関数が定義できるのですが、JavaやC#は悪名高いpublic staticメソッドを使って関数を定義します。

以上が前回の復習になりますが、さて『関数が必要となる場合』の具体例をあげましょう。こちらもC++のライブラリからになりますが、一般的に以下のようなアルゴリズムの実装はオブジェクトと関係ないということで関数(正確にはテンプレート関数)で実装されています。

・合計値を求める
・ソートを行う
・検索を行う。

JavaやC#のみ知っている方はこの事実に驚かれるかもしれません。が、アルゴリズム+データ構造=プログラムという古典を知っている方なら逆に納得してもらえるかもしれません。つまり、データ構造に対して独立した手続き-アルゴリズムを考えた場合、関数での実装が上手くいくということになります。
それでもまだピンとこない人がいるかもしれません。そういう方はジェネリックプログラミングについて調べてみるのも良いかもしれません。この連載でジェネリックプログラムを扱うのは話が発散するので今は避けますがJavaにしてもC#にしてもジェネリックプログラミングをサポートしていますが、オブジェクト指向プログラミングとは必ずしも相容れるものではありません。

ということで関数(手続き)は、アルゴリズムの実装と相性がいいという話をしました。他には、実はかのstaticおじさんと揶揄されているみながわさんが指摘した、通常の手続きにも関数が使えるという話をします。
さて、みなさんがあるアプリケーションの実装時に、あるURLで指定されたHTMLファイルを取得する必要があった場合、以下の2つのライブラリのうちどれが便利に使えるでしょうか?

関数 gethtml を使う。
URLクラス、URLConnectionクラス、InputStreamクラス、BufferedReaderクラスを使う。

もし、各種クラスを使う方が便利と思うなら、あなたを『オブジェクト指向おじさん』に認定しましょう。
gethtml関数の方が良いのは自明でしょう。もし疑問があるのならコメント欄に質問してください。

さて、次回は変数の共有との関係で関数とメソッドを比べてみます。
2016-04-22 | コメント:0件



オブジェクト指向再考(メッセージ3、メソッドと関数2)

 連載も5回目になりましたが、まだモチベーションが維持できています。前回はダブルディスパッチの説明と共にメソッドと関数について本質的な違いはないという説明をしましたが、もう少し突っ込んで話をします。
もともと
object.method();
という表記は、methodがobjectのクラスに属しているという意味合いが強いかと思います。言葉を変えるとクラスとはデータと、そのデータを扱うコードが合わさったものという発想です。これはこれで一つの考え方で構いませんが、問題は全てをメソッドにするのも間違いだということです。その一例がダブルディスパッチということになります。以下のように加算演算子+を考えた場合、

object1 + object2

+演算子は
 1.object1に所属するのか?
 2.object2に所属するのか?
 3.両方か?
 4.どちらでもないか?等々
1-4の内どう考えるのが自然なのか?という問題に突き当たります。Javaは演算子のオーバーロードを禁止することによりこの問題から背を向けました。つまりこの問題を避けているとも言えます。ちなみにこのような仕様を見たときにJavaは補助輪が付いた自転車のような印象を受けました。C++は『どちらにも属さない』書き方ができます。正確にいうと『object1に属する』の書き方も場合によってはできますが、例えば、

10 + object

のような場合は、『どちらにも属さない』書き方でしか書けません。つまり関数を使ってオーバーロード演算子の定義を行います。C#はある意味『どちらにも属さない書き方』で書きます。つまり、多くのオブジェクト厨が忌嫌うpublic staticメソッドでオーバーロード演算子の定義を行います。

ダブルディスパッチの話を終える前にマルチディスパッチ(マルチメソッド)の話を軽くします。前回、2つのオブジェクトに対してポリモーフィズムを働かせる仕組みをダブルディスパッチと説明しましたが3つ以上のオブジェクトに対してポリモーフィズムを働かせる考え方もちろんあり、マルチディスパッチまたはマルチメソッドと言います。マルチメソッドをいつ使うのか?と言われたらそれはそれで考え込んでしまうのですが、それでも、メソッドが何処かのクラスに属するという考え方に固執するとこのようなパラダイムを受け入れることは難しいでしょう

さて、このようなある種の一般化を行った後は、今度は全くクラスに属さない手続き=関数という存在も自然に受け入れることができるかと思います。つまり、

y = sin(x);

のような式において、文字通りの関数、sinはどのクラスにも属さないと考えた方がよいでしょう。「Mathクラスに入れたらいいだろう」と反論を受けそうですが、実際にsin関数はJava厨が忌嫌うpublic staticで定義されており、C++でも関数として定義されています。先の演算子の例でも出てきましたが、public staticメソッドとは手続型言語での関数定義に相当するものになります。ちなみにかのεπιστημηさんは私との議論で、

Java/C#はどのクラスにも属さないメソッドが作れないため、
当たり障りのないクラス(たとえばMathあるいはModuleC)をでっちあげてそいつに押し込まざるを得ない。
「いかなるクラスにも属さない」という"思い"を表現できません。
僕にはそこが(C++と比べて)不自由に感じます。

というふうに本質的に関数であるものを仮のクラス(Math)に入れることには難色を示されています、これについては私も同感です。

さて、『そんなに関数が重要ならsinとかではなくもっと幅広く使える例を出せ!』と言われそうです。その答えは来週に行うということで。
2016-04-10 | コメント:0件



オブジェクト指向再考(メッセージ2、メソッドと関数1)

 なんやかんやでかろうじて連載も4回目になりまして、モチベーションも維持できてよかったです。語学留学もあと一カ月で、最近、仲良くなった大学生にC++を教えています。といっても最初はポインタを教えていたのですが次にリファレンスを教えることになって、思わず、「混乱の元だからリファレンスは最初は無理して覚えなくてよくてポインタを先に覚えましょう。」と言ってしまった。もっとも「リファレンスの方が簡単だから軽く覚えてガッツリポインタを勉強しよう。」とも言ったが、この連載のターゲットは『オブジェクト指向しか知らない世代』としていますが、JavaやC#しか知らない方たちはポインタの概念が理解できているか怪しい限りです。興味深いのは、私の半径3メートルの範囲、クパチーノ近辺ではC++をマスターすることがステータスになっているようです。

 という訳(?)で今回はメソッドと関数について話します。なぜか知らぬがネットの界隈ではどうも、

メソッド>>>どうしようもない壁>>>関数

という図式が成り立っているようです。でこのどうしようもない壁なんて無いというのが今回のテーマです。もっとも1回で説明するのは難しいので何回かに分けて説明します(しかも飛び飛びになるかも)。

先ず、最初に以下の2つの表現

object.function();

function(object);

ですが、C++でみると生成される機械語コードは同じになります。例外はfunctionが仮想関数(ややこしいので以下、オーバーライドメソッドと呼びます)の場合になります。オーバーライドメソッドを除いて、C++でみると上記の2つのコードは同じということになります。『カプセル化があるだろ』という突っ込みがあるかもしれませんが、それは他のキーワード(friend)を使うことによって同等にできます。
もし、あなたには『どうしようもない壁』が見えるというのならどうぞ具体例とともにコメントをください。

ということで、ADPでは上記の2つのコードは同じように解釈されます。というか上のコードは下のコードとして解釈されます。『同じなら一つの書き方で良いだろ!』とお叱りを受けそうですが、表記上の重要な違いがあります。つまりobject.function()の記述はメソッドチェーンを実現できます。

object.function1().function2().function3();

もしこれを関数の形式で書くと

function3(function2(function1(object)));

となりますが、どちらが良いかは一目瞭然だと思います。ただ、これはあくまでも表記上の話でもしこれがどうしようもない壁というのならオブジェクト指向というのは表記上の問題ということで話が付きますし、そもそもメソッドチェーンの見た目はもはやメッセージパラダイムとは異なるでしょう。

さてfunctionがオーバーライドメソッドの場合の話ですが、簡単にオーバーライドメソッドについて話ますと、呼び出されるメソッドが実行時に決定される点です。C言語の関数は呼び出される実体がコンパイル時に決まりますが、オーバーライドメソッドの場合は実行時にオブジェクトの型によって呼び出される実体が決まります。

object.add(1);

とあった場合、objectがInteger型ならIntegerクラスのaddが呼び出され、objectがFloat型ならFloatクラスのaddが呼び出されるということになります。これはポリモーフィズムと呼ばれるもので、オブジェクト指向病にかかっている人たちはまさにポリモーフィズムが手続き型言語との差別化を図っていると信じています。ポリモーフィズムについては連載の後の方で詳しく説明しますが、関数ポインタを使うとこによりCやアセンブリ言語でも同様の機能を実現できます。こう言うと『ならアセンブリ言語で全部書けや!』と意味不明な切り返しをされるのですが、それに答ますとLinuxの記述では主にCが使われているというのは有名な話ですが、でデバイスドライバの実装等ポリモーフィズムと同様のことが行われています。つまりCでもある程度はオブジェクト指向を実用レベルでシミュレートできるということです。ちなみにADPはC++で記述しておりポリモーフィズムもバリバリ使っていますがパフォーマンス上の理由からCでリライトしようかと思案中です。

さて、話が横道にそれましたので元に戻しますとaddの例ですが、何か変なことに気付かないでしょうか?例えば以下の例はどうでしょうか?

object1.add(object2); // ・・・・・(A)

このaddメソッドですが、object1に対してはポリモーフィズムが効きますがobject2に対してはどうでしょうか?JavaやC++ではobject2にはポリモーフィズムは働きません。まぁ関数の例でもそうでしたが引数にはポリモーフィズムは働かないと考えてもしようがない面もありますが、もし引数にポリモーフィズムが働かないのが当然だというのなら(A)は以下の例と動作が異なることになります。

object2.add(object1); // ・・・・・(B)

加算(add)というのは通常交換法則が成り立ちますのでもし(A)と(B)の動作が異なるということならその実装は不完全としか言いようがないですね。ので通常addがポリモーフィズムであるならそれはobject1,object2双方に対してポリモーフィズムでなければならないことになります。2つのオブジェクトに対してポリモーフィズムを働かせることをダブルディスパッチと呼びます。私はダブルディスパッチについて16年程前に『More Effective C++』で知ったのですが、以前、といっても2,3年程前にJavaが得意で自称オブジェクト指向をマスターしている彼が『オブジェクト指向をマスターしている人は日本にはほとんどいない。俺を除いて』と言っていたので『ダブルディスパッチって知っている?』と聞いたら『なにそれ?』と返されたことがある。ということで知ったかのJava厨の検出にはダブルディスパッチは今のところ効果的かと思われる。ちなみにC#4.0以降の場合、dynamicキーワードを使うことにより(A)の記述でもobject2に対してもポリモーフィズムを働かせることができるのでC#プログラマにダブルディスパッチの技を繰り出すのは返り討ちにあう可能性があるので注意したい。話を戻してC++やJavaの場合はかの有名なデザインパターンの一つビジターパターンがダブルディスパッチの実装方法の一つとなる。
ダブルディスパッチの使いどころですが、二項演算子でポリモーフィズムを使いたいとき(もっともパフォーマンス上の問題があり二項演算子でポリモーフィズムは使わない場合が多い)や2つの物体の衝突を計算する場合(More Effective C++)があるでしょう。ADPではユニフィケーションの実装にビジターパターンによるダブルディスパッチを使用しています(これがしたいが為にC++を使ったがもっと効率的な記述をしたいからCで組みなおそうかと考えている)。

つまりこういうことになる。

object.method()



function(object)

において表現上の違いやプログラミング言語のサポート状況による違いはあるが本質的には両者を同等物とみて構わないということである。つまりどうしようもない壁はないということになる。

長くなったので続きは来週に持ち越します。
2016-04-03 | コメント:0件
Previous Page | Next Page