[Photograph]The Beauty of Programming
それにしてもいいケツ、いや、引き込まれてしまいます。これって広告ですよね。
getStringFromObj()が何なのかわかりませんが、この広告に文字はいらないってことですかね。
Objこの人FromからString紐をget取っちゃったら、()裸になってしまいますよ。ってストリップかい!!
[Programming][Books]コンピュータサイエンスの基礎固めに突入
そろそろ頃合か。
ここの推薦図書とは別に基礎固めとして、 いくつかリストアップしている本がある。推薦図書は会社とかプロジェクトとか比較的スケールの大きな話にテーマが偏っているのだが1*、私がリストアップしているものはコンピュータサイエンスの核になるもの、それらは主にアメリカのコンピュータサイエンス学科の学生が授業などで使用しているものがほとんどである。
1テーマにつき、一殺。いやいや、一冊。
プログラミングに関しては、勇み足的にPerlを選んでしまったのだが、なぜ私がPerlを選んだのかはここに書いてある。
(本当はこんな不純な理由じゃなかとです。ただ、エロい、いや偉い人にはそれがわからんのです。)
まず、第一関門は
アルゴリズム。そして、選んだのはこれ。
MIT Pressから出版されていて、海外のアマゾンでもアルゴリズムの中で、圧倒的カスタマーレビュー数を誇る本である。
ページ数は1184。ひぃえ~恐ろしか。てか、こんな分厚いのを勉強しているの?
嫌よ、嫌よのも好きの内ってか。
まあいい。どうせ、茨の道を選んだのだから。はやる気持ちを抑えるのも大変だ。
[Books]では、この本の進捗具合などを適度に混ぜつつ、引き続き、推薦図書の所感や他に面白かった本などを書いていこうと思う。
1*すでに、ある程度この業界のバックグランドがある人を対象にしていると思われる。
[Programming][Perl]続・うるう年かどうか判断するプログラム
このエントリーの続き。とその前にこれをやってみた。
・ Beginning Programming in Perl
このうるう年かどうか判断するプログラムはDay6 and Day 7の例題で取り上げられていたし、プログラミングPerl〈VOLUME1〉(単行本)のP123にも載っていた。orz
基本中の基本なんだね。まだまだ遠いなあ。
でも、とりあえず、Perlで書いてみたので晒して置く。
#!/usr/local/bin/perl
print “Enter the year “;
$year = <STDIN>;
chomp($year);
if($year%400==0 || ($year%100!=0 && $year%4==0)){
print “$year is the leap year\n”;
}else{
print “$year is not the leap year\n”;
}
前回はchompっていうのがなかったので、うまくいかなかったのだ。このchompは”文字列の終端からリターンキーを剥ぐ”ものらしい。英語の意味はTo chew loudly and greedily(私の和訳:音を立ててむさぼるように噛む) 。
白ヤギさんたらお手紙食べた♪ これって何か関係あるのかいな。
それにしてもubuntuの辞書は役に立つな。
Cといくつか違う点がある。
・変数を宣言しなくてもいい(特に型をあまり気にしなくてもいい)
・main関数がない
・冒頭のおまじない(これでPerl interpreterを呼び出すんだとさ)
ここで覚えたもの
while構文、open関数、do~while構文、last if。
より暗示的なコーディングにすることも出来るみたいだが、それは今後の課題。
last if文でループを抜けるのに、正規表現を使っていたが($line =~ /^\n/;)、ムスカがラピュタ語を読めた時なみに「読めるぞ~」って、高揚してしまった。まだ、正規表現の本は読んでる最中なんだけど。
それにしてもemacsでメタキーの位置って押しにくい。!、#、_もShiftとCtrlと間違って訳わかんないことになるし。おまじないも何度も入力したくね~。zshのautohistoryのコマンドってあるんかいな(矢印キーでやりたくねえ)。
サブルーチンとモジュールを使ったプログラムはまた今度。今日はここまで。ふう~
[Programming]うるう年かどうかを判断するプログラム
今年はオリンピックイヤーですね。ということは今年はうるう年であり、2月は29日まであります。しかし、正確には、4で割り切れる年でもうるう年にならない年があります。以下のサイトに定義がされています。
お分かりでしょうか?私も詳しくは知りませんでしたが、400で割れる年あるいは、4で割り切れて100で割り切れない年がうるう年になります。さらには4000で割り切れる年はうるう年ではないということまで、書かれています(4000年って生きてはいないよね。)
ここで、入力された年がうるう年かどうかを判断するプログラムを書いてみます。4000年って当分先で関係ないと思われるかもしれませんが、ここはより正確にしました。
とりあえずC言語で(少しだけかじったことがあります)。
#include<stdio.h>
int main(void)
{
int year;
printf(”年(西暦)を入力してください: “);
scanf(”%d”,&year);
if(year%4000 != 0 && (year%400 == 0 || (year%100 != 0 && year%4 == 0)))
{
printf(”%d 年はうるう年です。\n”,year);
}
else
{
printf(”%d 年はうるう年ではありません。\n”,year);
}
return 0;
}
次は勉強中のPerlで真似てやろうとしたが、デバッグでつまずく。くそ〜断片的に情報は揃っているんだけど、うまくいかない。とりあえず後回し。まだ、ラクダ本は読み終えていないしいいか。
emacs寺のみならいである私が Cソース/Perlスクリプト作成中に覚えたemacsコマンド一覧。C-x C-s, C-f, C-b, M-x shell, M-C-\, M-x c-mode, M-x c-set-style, M-x cperl-mode, M-x cperldbなど。まだ手つきがおぼつかない。emacs本もラクダ本と同じく、格闘中。う〜む、免許皆伝は遠い。 本を眺めてはエディタに打ち込んではみるんだか、脳に刷り込みがされないんだよね。どうしたものか。やっぱ悩まないとダメね~。
参考
[Books]How to Solve it(和訳)を読んでみた
How to solve it(和訳:いかにして問題をとくか)を読んだ。
amazonの書評では、数学が好きな人だとか、プログラマーが読むべきだとか書かれていますが、すべての社会人が読んでもいいのではないかとそれぐらい思っている本です(少なくとも私と同じ経験をしたことがある人は。以下で説明)。
それはなぜか?というと表紙と裏表紙の裏にこう書かれています(核心だと思うけど、引用をお許しください)。
・問題を理解すること(第1に問題を理解しなければならない)
・計画を立てること(第2にデータと未知のものとの関連を見つけなければならない。関連が~省略)
・計画を実行すること(第3に計画を実行せよ)
・振り返ってみること(第4にえられた答えを検討せよ)
これってもろ、PDCAサイクルじゃね~の。
つまり、Plan(計画),Do(実行),Check(検証),Action(改善)のサイクルを回すことは、数学や科学の世界で行うプロセスと似ているということだ。
PDCAという言葉は、私が、社会人になったばかりの新人研修の一環としてマネージメントの講座を受講した時に聞いた言葉だ。「社会人としての仕事の進め方」みたいな項目で説明されていたように思うが、小難しいビジネスや社会の言葉で説明されるより、こっちの方がずっと分かり易かった。なぜなら、学生の時にやってきたこととほとんど変わらないからだ。
私が社会人になった時に、学生と社会人との間には断絶があるみたいなことをよく言われたが、これに関して言えば、まったくないように思う。
むしろ、「この本に書いてあることを理解して下さい。社会人になってもやっていることはあまり変わりません。ただ、特殊な条件はいろいろありますけど。それは、皆さんがゆくゆく勉強すればいいだけのこと。」って言われた方が、ずっと気が楽だし、肩肘を張らずに済む。(社会の厳しさを教えるという意味ではいいのかもしれませんが)
という訳で、私と同じような講座を受けた方はぜひ読んでみてはいかがでしょうか。もちろん、私はコンピュータに関連する本として読んでいたに過ぎませんし、本当の意味でのPDCAを理解しているわけではありませんので、あしからず。(PDCAでの検索結果)
参考
・いかにして問題をとくか
追記
本を紹介するときに、amazonのイメージが利用できないかなと思って、アソシエイトプログラムに参加したが、どうもWordPress.comでは、イメージリンクを受け付けてもらえないみたいだ。それで、参考のリンクはそのときの名残であるため、直接にはamazonサイトにいけないようになっています。ちょっとした実験のつもりなので、今回だけはそのままにさせてもらいます。別Windowで開いた先の画像を選んでもらうと、amazonサイトにいけるようになっています。
追記:2008/02/04
やっぱり、面倒なので、直接リンクできるようにしました。