私の盟友(?)こと
みながわさんの日記が更新されたので覗いてみた。2016年1月29日の記事によると、とあるWEBの記事
「staticおじさん」はなぜ自信満々なのかというのが目につく。
この手の記事に対しての警鐘は以前にも行ったのだが、未だにこういう煽り記事が出てくるということは出版業界はよっぽど不景気なのか?と邪推したくなる。
アメリカに留学して習った単語にobjectiveというのがあり日本語訳は客観的で、反対語はsubjective(主観的)になります。論文を書くときは客観的であれといわれます。といっても何が主観で何が客観か分からないでしょう。本当かウソか分かりませんがアメリカではこのobjectiveということを子供の頃から教わるらしいです。もっとも子供の頃にそんなことを習ったことのない日本人は文章を読むときに、何が主観的か客観的かが判断がつかないこともあるでしょう。ちなみに何の説明もなしに『普通はこうだ』とか、他にも記事を読んで『俺の意見を代弁していてくれる』と思ったら、その記事は主観的である可能性があります(主観的の定義に従えば自明ですよね)。
さて、元の記事にあるこの部分
Javaでメソッドを呼び出すときにはクラスからインスタンスを生成してインスタンスのメソッドを呼び出すのが普通です。一方、staticメソッドはインスタンスを生成しなくてもクラスから直接呼び出せます。このため、オブジェクト指向プログラミングを理解していない古いタイプのプログラマは、Javaでもstaticメソッドを多用します。これを揶揄して「staticおじさん」と呼ぶのです。
これは、
インスタンスメソッドを使う→普通
staticメソッドを多用する→プログラマがオブジェクト指向を理解していない可能性あり
と読み取れます。思わず普通ってなんやねん?と突っ込みたくなるのですが、
そろそろこのインスタンスメソッドを使うのが普通という誤謬を解きたいのですが、staticメソッドは場合によっては推奨されています。
期待するコードを期待するように書こうという本から引用させていただくと
クラスのメンバへのアクセスを制限するもう一つの方法は、メソッドを出来るだけstatic にすることだ
このReadable codeという本は私は英語版を購入したのですがそこでも同様のことが書かれています。
また、英語が読める人は、static methodで検索をかければいろいろ議論を見ることができます。たとえば以下のQAたち
https://www.quora.com/Why-is-using-statics-Static-method-block-variable-in-Java-programming-bad-programming
http://programmers.stackexchange.com/questions/98083/cant-i-just-use-all-static-methods
ここでは、インスタンスメソッドを使うのが普通とか訳のわからん理由ではなくきちんと事実に則って議論がされています。
事実(fact)に則って議論するということは客観的(objective)な議論ができているということになるでしょう。
ざっくりとまとめますと、staticメソッドを使うと
欠点:継承ができなくなる。ポリモーフィズムも使えなくなる。
利点:メンバー変数へのアクセスを制限できる。パフォーマンスが上がる。
ということです。他のものは自明として、利点のところで『パフォーマンスが上がる』かは検証の必要があるのですが、ポリモーフィズムはオーバヘッドを発生させるのでそれを使わなければパフォーマンスがあがる可能性はあります。
また欠点の中で、『ややこしくなる』という意見もあったのですが、これは主観的な意見でしょう。たとえばstaticメソッドを使いなれた人はむしろすっきりとすると考るかもしれません。
さて、継承もポリモーフィズムも使わないということであれば、staticメソッドを使ってもよいということになるのですが、この反論として、『オブジェクト指向でなくなる』というのがあります。もはや手段と目的が混同されているとしか言いようがない意見でいやはや疲れます。
まぁ一介の無名なエンジニアが何をいっても仕方がないのでもっと説得力のある例を出しましょう。
επιστημη さんという著名なライターさんがいらっしゃいますが、彼は思い切りstatic メソッドを使っておられます。
http://blogs.wankuma.com/episteme/archive/2012/12/28/310396.aspx
のコードのrefereeクラスがそれに当たります。refereeクラスには3つのメソッドがありますが、すべてstaticメソッドになっています。
つまり、事実としてstaticメソッドは使うときは使うのです。ちなみにもちろんですが、επιστημη さんがオブジェクト指向を理解していないということはないでしょう。
という訳で、
ただ、現実に年齢を重ねると、どうしても守りに入りがちなのは事実です。「自分はstaticおじさんなのではないか」という問いは、常に忘れてはならないのでしょう。
というヒマがあったら自身が思わぬ誤謬をしていないか記事の検証を行うことを勧めます。
2/4追記
コメント欄で文意を汲み取っていないという指摘を受けましたが、まぁ充分文意を汲み取って反論をしているのですがどうも分かりづらいかもしれないので、補足します。
ただ、現実に年齢を重ねると、どうしても守りに入りがちなのは事実です。「自分はstaticおじさんなのではないか」という問いは、常に忘れてはならないのでしょう。
こういう教示的な文章は一見ごもっとなことのように受け取れますが、冷静に読めば分かりますとおり、ど素人でも同様のアドバイスができるでしょう(例を出すとサッカーや野球観戦をしているおっさんが野次っているさまと同じと言えば納得できるでしょうか?)。
社会人としては自分を律したり反省することは歳をとろうが若かろうが、技術者であろうがなかろうが、常に必要でいちいちアマチュアに指摘されることではないです。
そうはいっても100歩譲って、プログラミングに携わるプロが
『(引用先の記事に書かれてるニュアンスでの)自分はstaticおじさんではないか?』
と自問するということはどういうことでしょうか?
つまり、『staticは使えるのか?使えないのか?』という正に私がここで行っている議論をすることです。
そしてまさに
インスタンスメソッドを使う→普通
staticメソッドを多用する→プログラマがオブジェクト指向を理解していない可能性あり
こういう意見が20年前はともかく今となっては偏見に基づく誤謬でしかないということを認識することが重要だと言いたいわけです。プロなら気づきましょうということと、素人なら知ったかぶりをするのはやめましょう、という話です。
時が流れるのは早いもので8週間が過ぎ去った。で、もう4週間(1セッション)滞在を伸ばすことにした。
という訳で、6,7,8週目のレポートですが、ハロウイン(10/31)やら、クラスメートとサンフランシスコに行ったり、ペイントボールで遊んだりやらで、ブログも書けずじまいで、いい感じに勉強に集中できなかった。
前回まではミュージアムめぐりをしたが今セッションは週末はクラスメートと過ごすことが多かった。かなり年下になるが意外に大丈夫なもんだ(まぁ、仕事モードになって気合を入れると変わってくるかもしれないが)。
さらにどうでも話を続けるとアメリカに来て体重を10Kg落とした(それでも結婚前と比べると7Kgほど多い)。普通にダイエットをした結果だが、なぜか中国人(および台湾人)にモテるようになった。日本人ブランドはまだ健在なのか複数の人から、かっこいいねとか言われて『あー20年前に台湾に住みつけば・・・・』と若干後悔をしてしまった。
とまぁそんなアホなことを考えているうちに2セッション目のファイナルテストが終了した。GPAは2.9だった。残念ながら3.5は取れなかった。パスはしたがスキップはできなかった。ので残念ながら上級クラスを卒業することはできなくなった(年末には帰らなければならない)。
ただ発音については大分良くなった。先生が「ゆっくりしゃべれ」とアドバイスをくれたがその通りにして乗り切り発音の評価は上がった。
さて、せっかくなので発音についてコメントします。
-
日本人の発音はアメリカ人には割と通じない。あまりの通じなさに凹むので、意識して治す必要がある(出来れば日本を出発する前に)。
-
英会話の日本人の先生方は多分、かなり努力して直している。ちなみに同じぐらいを目指す必要がある(それが普通であることを理解する)。
-
発音記号をマスターする。lとrの違いはもちろん、母音は5種類ではなく、十数種類あることを理解しマスターする(違いが判る男になる)。
-
音読する時は単語を直接読むのではなく、発音記号を書き出してそれを読む(これは意外に効果的)
-
自分の声を録音して聞き比べる
-
最終的には個々の単語の発音を一つずつ丁寧に直していく作業を行う(手間がかかるが仕方がない)
ここまでは自分自身で訓練ができる。あとはネイティブの前で音読をしてコメントを貰えばかなり改善できると思う。
偉そうに書いているが私もまだまだ道半ばです。
ちなみにファイナルテストの結果があまり良くなかったので詳細を聞いてみた。リスニングが半分ぐらい間違えていた。
ただダイアログの大筋の流れは把握しているし、最近発音を治したせいか割と細かいとこまで聞き取れるようになった(毎度おなじみのNHK RADIO JAPANはほぼ何を言っているか判るようになった)。
ただそれを処理する能力が追いついていないようで、イマイチ細かなニュアンスで勘違いがあるようだ。
次のセッションで直したい気もするがこちらはそのうち改善すると信じて授業と発音をきっちりとこなすようにしたい。
5週目に入った。ホストファミリーを変えた。当初、変える気はなかったが他のルームメイトとホストマザーが衝突し彼らが部屋を出ると言い出し、気分を害したホストマザーが荒れ出して居心地が悪くなり変えてもらった。どうも何処へ行ってもトラブルに巻き込まれる。
私いホストファミリーは、私と同い年の親切なカナダ人で私の発音を逐一チェックしてくれるので大変ありがたい。もちろん若干ショックを受けるが、朝夕と会話をするので、これぞホームステイと満喫している。
4週目の週末にインテルミュージアムに行ってきた。今までの中でなぜかテンションが一番上がった。
<img src="http://www.ohfuji.name/img/20151024/intel_musium.jpg" border="0">
<img src="http://www.ohfuji.name/img/20151024/4004.jpg" border="0">
新しいクラスになった。前回のクラスは日本人が私だけだったが、今回のクラスは私を入れて日本人が5人いる。
上級クラスとやらに入ったが確かに文法がややこしくなってきた。週末には大分発音の訓練をしたのでちょっとはマシになったみたいだが、長年バリバリのジャパニーズイングリッシュを話していたせいもありまだまだ精進が必要みたい。
日本にいるときは『発音が悪くても』という意見も聞いたが、現実にアメリカに来て自分の訛りが強くて相手に伝わらないケースが多々あると治した方が手っ取り早いと感じるようになる。
とりあえず次回のファイナルテストはGPA3.5を取りたい。
4週目に入って、大分慣れた感があるがそろそろ日本に帰りたくなった。詳しくは来週書くが今週はファイナルテスト以外にちょっとしたことがあった。3週目の週末にサンノゼにある The Tech Museumに行った。
<img src="http://www.ohfuji.name/img/20151017/tech_2.jpg" border="0">
Tech Museumは体験型のミュージアムで色々な設備がある。以下はシーザー暗号の暗号器で上のものが暗号化後、下が下の文章になる。
<img src="http://www.ohfuji.name/img/20151017/tech_1.jpg" border="0">
今週は最終週ということでファイナルテスト&評価ということで結果が返ってきた。
評価は、0.5刻みの4.0満点で
SSP が3.0
ボキャブラリーが3.5
カンバセーションとアメリカ文化が3.5
GPA(平均)が3.3だった。ということで次のクラス(上級の下)にいけることになったが、
残念ながらクラスのスキップはできなかった。
どうも発音が悪いとのことでこの週末はテコ入れをしようかと思う。
3週目が終わった。来週はセッションの最終週になり、最終テストを受ける。
こちらの生活にもだいぶ慣れたみたいで、最近、「あーココはアメリカなんやなー」と実感しだした。まぁトロイ話ですわ。
2週目の終わりの日曜日にコンピューターヒストリーミュージアムに行ってきた。
受付のおばちゃんとは会話ができたが、学生であることを伝えて、ミュージアムの説明を受けた。「日本語のパンフレットがいるか?」と聞かれたので『勉強中だからいらない』といったら「あなた英語が上手だからねー」と言われて、悦に入っていたが、中のガイドさんの説明ではいまいち理解できなくてショックだった。リベンジしたい。
写真はIBMの1401(上)とバベジのディファレンシャルエンジン(下 未完成のものを後に完成させた)。特にディファレンシャルエンジンの説明がわからなかったので1ヶ月後にリベンジしたい。
<img src="http://www.ohfuji.name/img/20151010/1401.jpg" border="0">
<img src="http://www.ohfuji.name/img/20151010/deferencialengine.jpg" border="0">
学校の方だが、SSPクラスとボキャブラリーのクラスでテストがあった。
SSPクラスでプレゼンテーションの評価では、発音と文法が標準以下らしい。詳細を聞くと、発音については発表中に「アー」と変な音が入っていると言われた。普段はそんな音は入っていないとも言われたので緊張すると日本訛りがでるようだ。文法については can use と言わなければならないところを can using といってしまったところでまぁこちらについても注意するしかない。
ボキャブラリーのテストは88点、3問ミスだった。満点を狙っていたので残念だった。ただ、解ったことは、私はどうも形容詞の使い方が苦手らしい。
a [] answer
と[]の単語を選択しろと言われても「むしろそれが俺の知りたいところや!」となる。前後の文で適切なものを見つけるのだが、いまいちである。
どうもこの辺りが誤読につながるようでまぁ精進するしかない。