2010年11月16日火曜日

HowとWhatの手続き指向/オブジェクト指向

プログラミングにおいては、コーディングテクニックよりもアルゴリズムのほうがよほど好きで、アルゴリズムを楽しんでいますが、なんだかんだでコーディングも教えることが多く、その説明を考えていたときに思いついた話です。

手続き指向とオブジェクト指向の説明は現代のプログラミングにおいて、特にCとJavaを扱う人間としては避けて通れないものでしょう。私もCを教えつつ、適宜オブジェクト指向の話をするのですが、いつも考えるのは「どう教えるか」です。例えで説明するときが多いのですが、例えはあくまでも例えであって、本来的な説明の噛み砕き方も考えねばなりません。

色々と考えていて思いついたのが、データ構造+アルゴリズム=プログラムということです。少し意味は異なりますが、プログラムは データ(オブジェクト) を 処理 するものということです。英語で言えば
Programs treat objects.
ということですね。この時、プログラムとは何かという問に対して、二つの質問が考えられます。
What objects does the program treat?
How does the program treat the objects?
この、前者を定まったものとし、後者を主として記すのが「手続き指向」、前者後者をまとめて、何をどう扱うかまとめて記すのが「オブジェクト指向」であるという説明です。

それがなぜ有効か、どのように有効かという話は後に回すとしても、オブジェクト指向と手続き指向が相反するものではないということを説明するには、まずこの程度の(厳密性は欠きますが)噛み砕いた説明から入っていくのが妥当ではないかと思います。

2010年11月14日日曜日

パソコン構成を考慮

今使っているノートパソコンは、2年半ほど前に中古で購入したWindows Vista。メモリは2GBでToshibaのDynabookのその前の年の夏モデルで(できてから3年)、載っているCPUは1.6GHzのCeleronM。ノートにしないと不便かな?と思っていたのですが、ノートにする意味を感じなくなり、結局、ただの能力の低いパソコンでした。当時このPCを購入したときはマルチコアプログラミングについて無知であり、まだまだ生かせないと判断したからでしたが、現在はマルチコアプログラミングを学ぶための資料も整ってきているので、キーボードの調子も大変悪いということで(左カーソルキーは反応せず、右カーソルキーも効きが悪く、zキーは内部パンタグラフが破損しています)、来月のボーナスを待って購入することとしました。

ひとまず、いくつかの店でオーダーの見積もりを出しました。最近の猫も杓子も補助記憶装置大容量化を叫ぶ風潮は好きではないので、HDは小さくていいから安いものを…と探した結果、かなり良いものが、それなりの価格で作れそうだということがわかりました。
CPU: PhenomII X6 1090T BE(3.2GHz)
メモリ: 8GB
HDD: 500GB
office:Kingsoft Office
セキュリティ:G Data
キーボード:Cherry社黒軸
OS:Windows7 Home(これに後はVine LinuxとChrome OSのトリプルブート予定)
パーティション:自分で分けるか分けてもらうか…
と、これでしめて10万強。なかなかの性能です。勿論スクリーンも付いています。

問題は引越し。データを移すのが特に大変です。最も面倒なのは仮想マシン化して利用している現在のVine Linux5.1をデュアルブートに移すことでしょうか。

とにかくいろいろな資料を当たり
1.トリプルブート及びHDのOS共有部の作成
2.Linuxの強固な環境作成(Live messenger互換IP Messengerを始めとした導入)
3.e-mobileのLinuxにおける設定
4.Windows7のプログラミング環境構築
5.マルチコアプログラミングの環境設定
あたりのハードルをクリアしないといけません。

さらに、引越しのデータ準備や、必要なプログラムの整理等、やること山積です。

このあたりの準備で、Blogにこの関連の記事が増えるかもしれません。どうかご容赦ください。良いパソコンが出来るように努力します。

2010年11月12日金曜日

programming day

昼から授業がない日があったので、課題等を含めてプログラミング関連の勉強、もとい、趣味に近い内容を学ぶこととしました。ひとまず、Javaの勉強で、課題を組みますが、前もって立てた計算式のミスか、はたまたプログラムのミスか、正しい値が出ません。ちょっと一呼吸。

何とかかんとか誤りを見つけ、そのあたりを戻して、Javaの課題は終了。無事に動くようになりました。

残りの時間は、最近FortranとJavaばかりなので久しぶりのC。半旬の計算やら二十四節気の計算やら、簡単な練習問題をドキュメントに追加しようと考え、ひとまず解くことにしました。問題の設定をいつも悩みますが、適度な問題が出来れば、ちゃんと解説を書いていっちょあがり、というわけです。

#include
int main(void){
  ...
}
などと書いているうちに、少しづつCの感覚を取り戻してきます。やっぱりCが一番打ちやすいのは、それだけ長く親しんでいるからですが、新しい言語の誘惑も尽きることはありません。

少しづつ増えていくソースは、整理しないとあっという間に大量に。どう整理しようか、書き散らかしたソースのうち、見ないものは捨てないとと思うことも多くあります。

プログラミングで一日を過ごすのも、目が悪くならない程度なら楽しいものですね。

2010年11月10日水曜日

Fortranの本を書く

色々な機会でプログラミングをして、CほどではないですがFortranを使う機会が増えています。自分で書きためたドキュメントもあるので、それらを利用して、また、TeXのさらなる技術向上も目指してFortran90/95の入門書をつくって公開しようと考えました。

今回のスタイルは
1.プログラミング経験のない人がFortranを学ぶが、基本的なLinuxやWindowsの操作は知っているものとする。
2.例題や演習を多く取り入れて、十分多くのソースを書いて身につけることを意図する。
3.アルゴリズムを初め色々な例を取り上げて「組める」ようにプログラムを記す。
4.例題には十分に解答例・解説を記して一つの手本となるように記す(手習い志向)。演習にはおおざっぱな解答あるいは自力で組める程度の解説をつけておく。
5.数学に関する補足などを付録に書いて、コンピュータ以外の知識は高校卒業程度にあれば読めるように工夫する。
といったあたりです。

Fortran90/95の日本語で書かれた入門書は数冊しかなく、演習が十分と思えるものは翻訳版のものしかありません。その翻訳版も、訳はいいのですが、問題はアメリカのものなので日本にそぐわない感がして好きではありません。日本語の、演習が十分ある解説書として自分の本を書きたいと思います。その意味で、類書と解説は代わり映えしないのかもしれませんが、演習の面で類書と違うものをかければ、と思います。後は、無料公開で、少しでも多くの人に活用してもらえれば、自分のノート+アルファではありますが、うれしい限りです。

2010年11月9日火曜日

Googleグループの終了

Googleグループのサービスが終了することとなりました。メーリングリストにプラスアルファしたような機能のあるサービスでしたが、使いにくいという声もあり、Googleのサービスとしては失敗だったのかもしれません。寧ろ、もっとメーリングリストに特化していた方が正解だったのでしょう。

私はGoogleグループの利用者で、グループオーナーでしたが、メンバーからは使いにくいと言う声が少なからずあり、今年の9月に使用をやめました。残しておいたのですが、それも消えるということでメールが来たので知った次第です。オーナー自身も(あまり考えずの使用だったこともあり)難しいと思いましたので、メンバー側からはもっと難しかったのかもしれません。

万年筆に関するデータ集サイトの作成について、Googleグループの使用も検討案でしたが、終了ということで検討案が減りました。Googleサイトなど、考えることはまだまだありそうですが、時間に応じて検討したいと思っています。

訂正:ファイルやページの使用をなくすとのことです。いずれにせよ、多機能さが良くなかったと思っているので、良い方向への修正だと思います。

2010年11月8日月曜日

言葉を大切にするということ

kammyさんのコメントにありましたが、「言葉を大切にする」というのはどういう事なのか、自分なりにも考えてみました。

言葉を大切にするというのは
1.フレーズの意味をきちんと捉える
2.言葉の意味や語源を理解して適材適所に使う
3.言葉を無尽蔵に散らかさず吟味する
あたりのことを言うのでしょうか。

言葉選びは悩むこともありますが、無意識なものもあります。私の日常的なシーンとして、後輩をお茶に誘う機会がありますが、その時のフレーズは以下のとおりです。
A:〇〇君、よかったら今日、お茶を飲みに来ないかい?
B:〇〇君、今日、お茶でも一緒に飲まないかい?
C:〇〇君、今日都合がつけば、ちょっと一杯お茶でもどうだい?
冗談とかもろもろ考えるともっと多くのフレーズがありますが、ひとまずこの3つとしてみます。どれもおんなじようなことを言っているのですが、ニュアンスは全然違いますよね。
Aはお茶を飲みに来ることを最も推奨しているという感じを受けます。お茶を飲むということをして欲しい、という「お茶」に焦点を当てた勧誘です。
Bはお茶でも一緒に、ということから、一緒にいる、ということに重点を置いています。「お茶でも」いいから、とりあえず一緒に何かやらないか?という、勧誘です。
Cはほんとうに軽い、談話への誘いです。ちょっと一杯お茶でも、という言葉から「ほんの少し、軽く寄っていかないか」という感じを受けます。
これらのフレーズを選ぶとき、メールに何気なく書いていますが、自分の気持がよく出ていることに気づきます。無意識のうちにフレーズを選んでいます。

言葉遊びなども含めて、私はいろいろな言葉を選びます。時には古語を用いることもあります。解説文はかなり畏まります(古い本を多く読んでいるため、その影響もあります)。

可愛いと単に言うことが多いですが、あえて「ろうたし(苦労したい、苦労してもいいというほど可愛い。労したしから)」や「いとけなし(幼くあどけなくて可愛い)」を使うことがあります。詳しくと書かず詳らかにすると書くときがあります。なので、と言わず、しからば、というときがあります。

言葉選びは細かいニュアンスを知り、語源を知るほどに多くなり、それが増えるに従って語彙が増えていくものだと思います。語彙力推定テストを受けると、平均的に5万語超(大学生水準の少し上)をマークしますが、それは色々な本を読んで、気に止めたフレーズを使いたがる私の性格ゆえかもしれません。

日本語に関する書籍も面白く、特に「日本語を使いこなす言葉の実用辞典(小学館)」楽しく読めます。日本語をきちんと使いこなすことは単純ではなく、敬語を始め、色々な間違いを犯します。
でも、その間違いを大切に見て、なぜ間違いなのかを考えることで、言葉を大切にできるのだと思います。そして、言葉の本来の役目である、コミュニケーションも、言葉を大切にすることでより潤滑になります。

言葉を大切にすること。それは言葉を無碍に扱わないことだと思います。良く吟味して言葉を選ぶことが大切なのだと思います。

色々な本を読み、色々な詩を聞いて、造語などで遊んだりしているうちに、言葉を大切にする態度が備わってくるというのはよく言われる意見であり、私自身、言葉に触れる機会を多く持っています。そして、誤用については、自分の出来うる範囲で、なぜ誤用と思うのかを説明できるようにしています。それが、私の「言葉を大切にする態度」なのだと思います。

2010年11月7日日曜日

紅茶を飲もう その3

紅茶を飲むのは私にとって日常的なことですが、しかしながら、その中には色々なことがあって紅茶を飲むと一口にいってもそれだけでエッセーを書けそうな気がします。そこで、それを少し書いてみよう、と思います。

--私の好きなお茶はなんですか--
食事に何度も行くと、相手の好みが分かってきます。しかし、紅茶は、意識して飲まないからでしょうか、それぞれの好みが見つかりません。そして、かくいう私も好きな紅茶が一貫していません(勿論、一貫して好きなものはありますが)。

私の好きな紅茶はなんなのでしょうか。
最近、ダージリンファーストフラッシュが嫌いになりました。あれをなぜか、中途半端に渋いと思う。逆に、もっと強いはずの紅茶のほうが飲みやすい。それは私がミルクティーばかり飲むから?
数年前まで、Twiningのプリンス・オブ・ウェールズが好きでしたが、最近は苦い感じがして嫌いです。
ニルギリは昔からずっと好きです。シッキムが最近好みになりました。
出雲紅茶のような、少しパンチの弱い紅茶も好きですが、アフリカの紅茶やウバといったミルクで飲むべき紅茶も好きです。
アッサムは変わらず好きです。

友人や後輩に一家言あるとして聞かれます。「紅茶は何がおこのみですか」と。しかし、私には定まった好みがなく、いつも返事に窮します。とりあえずはニルギリと答えているのですが、しかしながら、千変万化する自分の好みの紅茶を捉えるのは難しく、それ故、また紅茶を買ってしまう自分がいます。