Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

タグ:Ruby

今日、Macのダウンロードフォルダを整理したところ、誤ってUbuntuの仮想ハードディスクまで消してしまいました。Ubuntuの仮想ハードディスクをダウンロード後、ダウンロードフォルダに置いたままセットアップしていたのが原因です。

Ubuntuは開発環境(というか、学習環境)の構築と、多少のファイルの移動はしていたものの、本格的に開発に使っていたわけではなかったので、それほど痛手にはなりませんでした。が、一歩間違えたら恐ろしい事態になっていたことでしょう。ファイルの置き場には十分に気をつける必要があると再認識しました。

バックアップをとっていないため、復旧も無理そうなので再セットアップを行いました。そこで、以前LAMP環境を構築する記事で書いた内容と齟齬が生じました。Ubuntuに、PHPが入っていないのです。前回は気づいたら入っていたのですが、恐らくセットアップ初期の段階でインストールしていたのでしょう。

再セットアップの今回は、userフォルダの中に作ってあるtoolsフォルダに入れました。これで誤って消すことはないはず。TimeMachineによるバックアップのためにも、外付けHDDを早く買わねば。



『たのしいRuby』は第2部の基礎編を終え、第3部に入りました。第2分では変数、配列、制御構造、ループといった、「伝統的」なプログラミングの基礎が説かれています。とはいえ、メソッドあたりからは「Rubyらしい」話題になりますし、クラスを自分で定義する、といった話題は本書で初めて読みました。

第3部からは各クラスごとのメソッドを掘り下げ、今までに身につけた内容をテストする練習問題も収録されています。第2部の感想は「まあまあたのしい(でもクラスの辺りはよくわからん)」、第3部は、まだ序盤ですが、ようやく「たのしい」感じになってきましたね。

練習問題にあった素数を判定するプログラムは、PHPを覚えたての頃(今年の3月)に書こうとして上手くいかなかったのですが、今回は書き下ろすことができました。

def prime?(num)
    count = 0
    i = 1

    while i <= num
        if num % i == 0
            count += 1
        end
    end

    if count == 2
        print num, " is prime.\n"
    end
end

3月の段階でも、FizzBuzzは書けていたので、当時でも書くことはできたはず。が、当時は、「2回割り切れたら素数、3回以上割り切れたら素数ではない」という発想ができませんでした。ちなみに、『たのしいRuby』のサポートページにはエレガントな解法が載っています。

先週の記事では、terminal内で使用するエディタとしてはnanoを使ってるよ、と書きました。が、viに乗り換えました。

nanoは、確かに覚えるべきことが少なく(参考)、初心者にはわかりやすい。その反面、機能に乏しいのが弱点です。ちょっとした直し程度ならnanoでもいいのですが、ある程度の長さのテキストを編集するとなると、nanoでは限界があります。

そこで、やはり本格的なエディタに取り組もう、と選んだのがviです。参考にしたのは、エディタ特集をやっているSoftware Designの2012年7月号。単なるユーザーにとってはvi(vim)、自分でカスタマイズ(プログラム)するならemacsに軍配が上がる、という印象を受けました。

viの習熟度の現状は、モードの切り換えやhjklでの移動に慣れた程度です。挿入モードメインで普通のエディタみたいな使い方をしています。もう少しコマンドを覚えれば、コマンドモードの方が高効率になるんでしょうが…。

あと、初歩的なテキストファイルの編集に関してはMacのterminalでもUbuntuのterminalでも大差ないので、最近はMacのterminalで作業するほうが多いです。ApacheとMySQLはUbuntuにしか入れてないので、PHPを書くときはUbuntuです。


また、言語に関してはRubyを始めました。今月からRubyの勉強会に参加する予定なので、その準備です。参考書としては『たのしいRuby 第3版』を選びました。理由は、

(1) 3版目である(=間違いが混入している可能性が低い)
(2) まつもとゆきひろ氏の推薦文がある
(3) 2色刷りで紙面が見やすい
(4) 2010年刊と比較的新しい

といったところ。今日は第1部、約60ページを終えました。感想は、

(1) Rubyの構文はシンプル
(2) 基本的な部分が説明不足(オブジェクトって何?)
(3) あまりたのしくないかも…(比較対象は『Perl言語プログラミングレッスン』)

Rubyでまず驚いたのは、文末のセミコロン(;)やif文の{}を使わないこと。短いif文を私の知っている言語で書いてみると、以下のようになります。

PHP(if文の中身が1行だけなら波括弧は省略可):

$a = 10;
if ( $a >= 10) print "$a";


Perl(波括弧省略不可):

$a = 10;
if ($a >= 10) {
    print "$a";
}

ただし、Perlで実行部分が1行の場合は、

print "$a" if ($a >= 10);

という書き方もできる(if修飾子)。


Ruby(セミコロン不要、波括弧の代わりにthen~endという文字列を使う)

a = 10
if (a >= 10) then
    print a
end

なお、『たのしいRuby』の第1部の段階では触れていないが、RubyでもPerlと同様にif修飾子が使えるので、

print a if (a >= 10)

と書くこともできる。


また、『たのしいRuby』では、オブジェクト指向言語の用語に慣れさせるためか、「オブジェクト」「メソッド」等の用語を多用します。しかも、これらの用語に関する詳しい説明はありません。プログラミング初心者を対象としているにも関わらず!

オブジェクト指向は直感的な書き方ができるので、「習うより慣れろ」式でも良いのかもしれませんが、納得感が得られないのが気になります。

『たのしいRuby』を、並行して進めている『Perl言語プログラミングレッスン』と比べると、構成もかなり違います。

『Perl言語プログラミングレッスン』は、数と文字列、変数、配列とハッシュ、条件判断とループ、といった具合で、基礎的な概念から順番に説明していく「伝統的」なスタイルです。これに対し、『たのしいRuby』は、最初にその本で紹介するトピックを概説し、その後各トピックを深く掘り下げるスタイル。

目次だけ見ると、『たのしいRuby』の方が見通しが良いように感じるのですが、実際にやってみると、『Perl言語プログラミングレッスン』の方が、「たのしい」。一歩ずつ前進していく(各項目をきっちり理解していく)感覚が心地よいのです。

『たのしいRuby』は、今日読み終えた第1部の段階では、地図をじっくり眺めただけ。一歩も進んでない。2部以降は各論に入っていくので、この先が楽しめるといいな、と思います。

最近PHPを少しずつやっているのですが、その際にどこかの記事で「GREEの藤本氏はPHPの神」というフレーズを見ました。他にも、優秀なPHPプログラマーの例として藤本氏を挙げている人もいたり。ということで、GREE CTOの藤本真樹氏とPHPの関わりについて調べてみました。


結論として、藤本氏はPHP言語の開発者の1人ではあるけれど(すなわち、PHPの創造主=神 のうちの1人)、PHPを使いこなしてすごいプログラムを書いてる人、と言えるのかはよく分かりません。

もちろん、藤本氏はすごいプログラマーです。文学部出身でプログラムは独学で、一線級の技術力を身につけているのは、素直に尊敬します。

ただ、GREEのシステムのコードのどの程度がPHPで書かれていて、その内のどの程度が藤本氏の手になるものなのか分からない以上、「藤本氏のPHPプログラミング能力は未知数(相当に高いのは確か)」としか言いようがありません。


実際、まつもとゆきひろ氏との対談には、「たしかにPHPメンテナーではありましたが、実はあまりPHPではプログラムを書いていなかったんですよ。」という発言があります(「(以前の会社では)書いていなかった」なので、GREE入社後にはPHPも書いているんだと思いますが)。


ちなみに、この対談には興味深い問答があります。

──エンジニア採用でも、これからはRubyの使用経験を重視しますか?

藤本 Rubyの経験というのは直接の判定基準ではないんですが、「一つの言語しかできません」という場合よりは面白いのでは、と思います。複数の言語に精通というか、チャレンジしているのは一つの評価軸かもしれませんね。

「複数の言語の使用経験があることが採用時に評価される」という点はもちろんですが、それ以上に個人的に注目したのが「面白い」という言葉。新人を採用するときに「この人は面白いか、面白くないか」という基準で見てるんですね。

こういう文脈では、「複数言語の経験がある方が生産性が高い」という方向に持っていく(実際、この記事の見出しはそうなっている)のが普通ですが、実際の評価軸は「生産性」よりもむしろ「面白さ」にある、と。


他にも、藤本氏関連の記事は色々読んでみましたが、出自が近い私には、非常に参考になりました。

1つは、情報工学について。大学の情報系学部で教わる情報工学は、知識・ツールとして強力ではあるものの、必要不可欠なスキルというわけではない、とのこと。

2つ目は大学の位置づけで、「大学は職業訓練校ではない」と。もちろん、医学系のように、大学での職業訓練を経ないとその職に就けない分野はあります。が、少なくともweb開発の世界では、畑違いの出身者でも、十分な好奇心と意欲があればやっていけるということです。

また、webの仕事をする上で数学が必要になる場面は限られてくるのですが、大規模なWeb開発では統計の知識が必要になるというのも重要なヒントだと思います。


というわけで、「PHPプログラマーのスゴイ人」の代表例として藤本氏を挙げるのはズレている気もするのですが(藤本氏は「PHP書くスゴ腕プログラマー」である。「PHPしか書けないプログラマー」ではない)、藤本氏がスゴイ人であることは十分に理解できました。

このページのトップヘ