すもぎのめも

いろいろあったことをメモしています

TypeScript では実装したインターフェースのメソッドより少ないパラメーターでメソッドを定義できる

TypeScript 実践プログラミングより

TypeScript実践プログラミング (Programmer's SELECTION)

TypeScript実践プログラミング (Programmer's SELECTION)

クラスのメソッドでは、インターフェースで指定されているものよりも少ない数のパラメータを定義できる。それにより、そのメソッドを実行する上で必要のない引数をクラスが無視できるようになる。

とのことなので試してみた。

interface Phone {
    call(target: string);
}

class RakurakuPhone implements Phone {
    constructor(private target: string) { }
    call() {
        console.log('Calling...');
    }
}

使うときはこんな感じで、変数の型に合わせたパラメーターでのみメソッドを呼び出せる。

var rakuraku = new RakurakuPhone('xxx-xxxx-xxxx');
rakuraku.call();
// Error
// rakuraku.call('xxx-xxxx-xxxx');

var phone = <Phone>rakuraku;
phone.call('xxx-xxxx-xxxx');
// Error
// phone.call();

不要なパラメーターを引き継ぐ必要がないのは便利。インターフェースの継承には適用されないのが勿体ない。

SIer 勤務の社会人が大学編入試験を受けた話

結果から言うと落ちてるんだけど。2014年も終わるし、そろそろ時効だと思うので。あと自分が受けたときは全く情報がなかったので、今後受験される人の参考になればとも。

動機

気づけば業務のための勉強ばかりになっていて、自分のやりたい方向に進めていなかった。会社勤めでは時間も限られてしまうため、時間をとって大学に行こうと考えた。もちろん、学歴コンプレックスが無かったといえば嘘になる。弊社の社長は親会社からの出向者が就任するのだが、現社長が就任したとき、最初に聞かれたのが学歴だった。「まぁ学歴低くても仕事できてればええわな」といったことを言われたので正直印象が悪い。(ちなみに就任時、親会社の役員からは "阪大卒" と紹介されていたが、実際は大阪府立大学出身だった。府大はいい大学だとは思うけど)

とはいえ、学部で学べることは大したレベルではないと知っていたので、大学院まで行くつもりで編入を希望した。

編入

東京農工大学 工学部 情報工学科を志望することにした。理由は社会人向けの編入試験があったこと、学びたいことを研究している教授がいたこと。一般的な編入試験では現役の高専生に勝てそうになかったので、他の大学は候補から外した。お金があまりないので私立は考えなかった。

農工大

多分、東工大よりも名前が知られていないと思われる大学。なんだけど、調べてみると研究や就職先の面から優秀な大学だとわかる。工学部の割に女子が多いのは……個人的にはどうでもいい。140周年記念会館(エリプス)は学生じゃなくても利用できる。受験前日には、近所に住んでいると思われる子連れの方々が食事をしていた。

工学部のキャンパスは東小金井にある。東小金井は大した都会ではなく、地方出身者でも住みやすそうな印象を受けた。農学部のことはよくわからないけど森らしい。

受験対策

社会人編入学は、英語の筆記試験と面接のみだが、一般編入学とは異なり「志望理由書」「業務報告書」の提出が課せられる。調べてみると、社会人入試では提出資料の出来が合否を分けるとのこと。 英語は赤本と ALL IN ONE をメインに勉強した。他にも買ったけど、この 2つが一番役に立った。志望理由書を書くために 理科系の作文技術 (中公新書 (624)) を読んで、何度も添削した。面接で何を聞かれるかわからなかったので、志望理由は確実に答えられるようにした。専門知識についても問われる可能性があったので、大学の教科書として採用されている 入門 コンピュータ科学 ITを支える技術と理論の基礎知識 も読んでおいた。

会社には内緒

所属証明も提出しなければならないのだが、会社には「資格を受けるために必要」と言って所属証明を書いてもらった。「弊社に所属することを証明する 会社印」と言った簡単な書式だったが特に問題なかった。

受験当日

社会人の受験者は自分を含めて 4名。情報工学科志望は自分だけだった。自分を含めて 20代が 3人だと思う。

英語の筆記試験はすべて長文読解だった。理系の大学なので、理系の英文が使用されると聞いていた。今回は「仕事が遅い人についての論文の概要」「論文の構成」「記憶法」の引用が使用されていた。「理科系の作文技術」を読んでいたことがここでも役に立った。大学受験の英語がどんなレベルか知らないが、農工大の赤本と比べても特別差は無いように感じた。 面接では、以下のことを聞かれた。

  • 志望理由
  • 数学はできるか
  • 学費のやりくり
  • 卒業後どうするか
  • 大学院に行く気はあるか
  • 直接大学院を受けないか (後述)
  • 英語はできるか
  • 落ちたらどうするか

その他、少し雑談もしたが、自分の能力云々よりは、入学後について懸念があるように感じた。認定できる単位数や、在校生とうまくやっていけるか、といったこと。

ちなみに面接を担当されたのはこちら(http://www.cs.tuat.ac.jp/study/interview/)の 3名。次回も同じとは限らないけど、情報工学科を受験する方は事前に確認しておくと緊張しなくて済むかも。

受験後

出張先で不合格を知った。のだが、後日、大学院の受験案内が届いた。面接中に、君には大卒以上の能力があるように見える。大学院を直接受ける気はないか、と聞かれた。自分としては、いきなり大学院に入って研究できるような下地が出来ていないと認識していたので、まずは学部に編入したいと答えていたにも関わらずだ。不合格の理由は定員オーバーとのこと。確かに高専生の情報工学科希望者は多かった。

自分のような人間に受験案内を届けてくれたのは、恐らく優秀な大学生は他大の院に進学してしまうからではないか、と推測しているが、仮に自分に大卒以上の能力があるとすると、大卒ってこんな程度のものか、と思ってしまった。Twitter で目にするような大学生は一握りの存在なのだろう。

大学院は受験しなかったし、今後もしないつもりだ。かといって、来年学部を受け直す気もない。最近読んだ漫画にも描かれていたけど、多分僕は、受験したことで気持ちを収めてしまったのだと思う。もしくは、大卒以上と認められたことで満足してしまったか。いや、それよりも、本当にやりたいことが大学ではできない、ということに気づいたからかもしれないけれど、大学はひとまずいいかな、というのが今の正直な気持ち。今は MOOC もあるしね。

もちろん、受験を考えている人を貶めるつもりはないし、どんな理由でも頑張ってほしいと思っている。周りの意見など気にせず、思うように振る舞えばいいんじゃないかな。

アドバイス

落ちた人間からのアドバイスはあまり役に立つものではないけど。僕が失敗だと認識していることについて、ひとつは受験番号。これは暗記して答えられるようにしておくこと。というのも、面接の最初に受験番号と氏名を答える必要があったからだ。大学受験では普通なのかもしれないけど。もうひとつは、面接官の先生方と自分との距離が結構あるので、大きな声で話すこと。何度か聞き返されてしまった。これは僕の声が元々小さいのと、聞き取りにくい声質というのもあるんだけど、先生方もそんなに若くないので、若干耳が遠いように感じた。 志望理由書・業務報告書は個人情報が含まれているのでアップはしないけど、受験される方には公開してもいいと思っている。

Real-World Functional Programming を読んだ

Real-World Functional Programming: With Examples in F# and C#

Real-World Functional Programming: With Examples in F# and C#

概要

この本は F# enthusiast であらせられる Tomas Petricek 氏による、現実世界で直面するであろう数々の問題に関数プログラミングで立ち向かうための本である。出版は 2009年なので、F# の歴史の中では若干古い本ではあるが、本書のテクニックは現在でも有用だ。ちなみに、氏は [Client-side scripting using meta-programming] という卒論を 2007年に、 [Reacitve programming with events] という修論を 2010年に執筆している。ということは、この本は氏が修士のときに書かれた本なのだ。末恐ろしい修士がいたものだなぁ……。

面白かった点

氏は特に宣言的な記述を勧めている印象を受けた。宣言的に記述するために、型と関数を定義して組み合わせる。またその要素それぞれは、極めてシンプルなものだ。シンプルなものを組み合わせて複雑なものをわかりやすく作る。その哲学こそが関数プログラミングの根幹を成していると感じた。 サンプルコードでは代数的データ型がふんだんに使われていた。F# を含め代数的データ型をサポートしている言語を使うときは、代数的データ型を多用していきたい。代数的データ型とパターンマッチは強力な武器だ。 また、状態モナドに頼らずに状態を保持する方法も実用的で F# らしいと感じた。Haskell way がいつだって正しいわけじゃない。

仕事で使えるところ

本書は F# だけでなく、C#関数プログラミングを習得するための本でもある。特に注目すべきは、クエリ式をモナドの構文として使用しているところだ。Option のようにモナドな型を作ったらクエリ式での宣言もサポートすべく、Select と SelectMany を追加するといい。