今までに読んできた本、そして読みたい本について紹介していきます。
本屋で立ち読みしていてあついなぁと思った一冊。まとまった時間が取れる時に本を買ってがっつりしくみを勉強したい。
SEの出世物語を描いた双六。キャリアパスを選んで進めていくことが出来、資格を取得しながらコマを進めていく。ITスキルがなくても楽しめるので、技術者と一緒でなくても出来るところがよいかもしれない。実際にやってみたが、ポイントがある程度ないとうまく前に進めない。そして後は運のみが左右されるようになっているようだ。
Adobe Flex 2: Training from the Source
Flex2の書籍が現在まったくといって良いほど言ってない。インターネットドキュメントも皆無に等しく、この書籍は洋書でありながら期待するところは多い。
取り出したデータがNULLのとき、「-」表示をしたい場合などはどのようにされていらっしゃるだろうか?たとえばプログラム側でデータを取り出してきて、NULLだったら代わりに「-」を出力するというロジックが思いついた場合には、COALESCEというSQL92の関数の利用を検討すると良いと思う。
たとえば、hogehogeフィールドからデータを取得したい場合には、
SELECT COALESCE(hogehoge, '-')
FROM table_name;
とすることでhogehogeがNULLだった場合に-が返るようになる。SQL92対応なので、基本的にはどのRDBMSでも対応しているはず。COALCESEは無限大の引数をとるので、COALESCE(a, b, c)ならばaがNULLならbが、bがNULLならcが利用されるといった形になってとても便利である。
このようなテクニックが数多く掲載されているプログラマのためのSQL 第2版はSQLを日ごろ利用している人でも一見の価値があると思う。
「ソフトウエア開発プロジェクト遅れたからといって人員を増やせば、チームの規模は肥大化して内部コミュニケーションが指数関数的に複雑化し、プロジェクトがさらに遅れる」と指摘している本『人月の神話―狼人間を撃つ銀の弾はない』。実は1975年に出版されており、26年経った今でも同様のことが議論されているなんて言うのは驚きである。開発しているものはどんどん進化(?)しているが、そのやり方にはあまり進歩が見られないという、ソフトウェア工学の難しさでもある。
多くのプログラミング言語でも正規表現は実装されているが、実はかなり奥深い。そして、普通の人が聞いたら間違いなく「性器表現」と勘違いする不思議な言葉だ。現在、Oreillyから出版されている『詳細 正規表現 第2版』を読んでいて改めて正規表現について認識する必要があると考え、以下のとおりまとめてみた。これは今後順次改訂していく予定です。
正規表現の種類
正規表現にはPerlやPHP, Java, .NET, Python, Ruby, sedに実装されているNFAとawk, egrep, MySQLで実装されているDFAというものがある。NFAは従来からある正規表現であり、記述方法で動作速度が決まる。つまり、どれだけでも遅い正規表現を書くことが出来る(ひどい場合ではSegumentation Faultとなり、実行できない)と言うことになる。NFAで正規表現を記述するにはそれなりの知識と経験が必要になる。
一方で、DFAは最適化される正規表現であり、効率の悪い正規表現も実行動作前(コンパイル時)に最適化されて実行することになる。
文字クラス
リテラルをグループ化して、いずれか1つをあらわす。
[a-z] 小文字のアルファベットすべて
[^a-z] 小文字のアルファベット以外(「^」を最初におくと文字クラスが否定される)
[0-9] 数字すべて
[a-zA-Z] 大文字小文字を含むアルファベット
[a-zA-Z&[^mM]] 大文字小文字を含むアルファベット。但しMおよびmは除外される。
グループ
複数のパターンを表す。
(a|bc) aまたはbc
(?!a|bc) aでもbcでもない(否定形)
量子指定子
前に付くリテラルならびに文字クラス、グループを修飾する。
* 0文字以上
+ 1文字以上
? 0または1文字
{2,5} 2文字以上5文字以下
{,5} {0,5}の省略
{3,} 3文字以上
NFA拡張(Perl拡張)
NFA拡張にはキャプチャなし括弧(?: ...)、先読み(?= ...)、戻り読み(?<= ...)がサポートされている。
(?:aaa|bbb) aaaまたはbbb。但し(aaa|bbb)と異なり、括弧の中は$1で取得できないようにする(つまりメモリを節約することができる)。
(?<=aaa)bbb 直前にaaaがくるbbbにマッチ(先読み)。
(?<!aaa)bbb 直前にaaaがこないbbbにマッチ(否定先読み)。
aaa(?=bbb) 直後にbbbがくるaaaにマッチ(戻り読み)。
aaa(?!bbb) 直後にbbbがこないaaaにマッチ(否定戻り読み)。
・モード修飾子
多くの言語の場合には、大文字小文字の区別なしや改行を無視するiやxのモードを言語側で用意している。たとえば、Perlでは
$a =~ /a-z/i; #大文字小文字のアルファベットにマッチ
$a =~ /abc
def/x; #abcdefにマッチ(正規表現内の改行とタブを無効化する)
だが、正規表現内でもこれが利用できる。
(?i:[a-z])、(?:x:abc
def)で代用できる。iモード修飾子の場合には、正規表現内で大文字小文字を区別しないケースとするケースを混在させられる便利な修飾子といえる。
・欲張り型と非欲張り型
NFAにはバックトラックと言う機構によってパターンマッチングを行っている。バックトラックを抑止する方法が欲張り型であり、後続のマッチ文字列に配慮することなくマッチングする。逆に量子指定子の働きを最大限抑制する方法が非欲張り型である。いずれもNFAでサポートされている。
.++または(?>.+) 任意の文字列を欲張り型でマッチ(この場合はほとんど全ての文字列にマッチすることになり、後続するマッチ文字列の指定があれば失敗することになる)
.+? 任意の文字列を非欲張り型でマッチ。.+?aは[^a]+と同義となる。また、.*?aは[^a]*と同義。バックトラックが起こらない分だけ、それぞれ同義のマッチ文字列の方が早い。
Symfonyに関する解説本が出版される見込みです。まだ日本語版なんて遠い先ですが、Symfonyは少しずつ定着しつつあるフレームワークのひとつになりそうな予感があります。
今後のWebプログラミングにおいては、フレームワークに対する理解もまた重要なスキルのひとつになることは間違いなさそうです。(クライアントアプリケーションプログラミングにおいては、フレームワーク(ロジックとビューを分離して、コントローラーで制御する)はRADにおいて当たり前のように使われているわけで、ようやくWebプログラムもそれに追いついたのかもしれない)
プログラマ主役型プロジェクトのススメ ~ソフトウェア開発現場で本来の力を発揮するために~
職場の人から薦められて読んだ本。
端的に言えば、プログラマは取って代わることのできる工場労働者、プロジェクトマネージャーを筆頭に組織的な仕事をしているというのが一般的な考え方とされているが、この本では、納品物を製作するプログラマこそ不確定要素をどんどんつぶしてプロジェクトを成功させることができる唯一の職種であると説いている。
ソフトウエア開発は、製造業ではなく、サービス業とされる理由は、無形というあまりに納品物が不確定なのものをいかにしてエンドユーザーに満足してもらうかというところにあると思う。なぜ工場労働者であってはいけないか、そして明日からの仕事の仕方について考えさせられる一冊である。
京セラ会長の稲盛さんの著で、松下電器創業者の松下幸之助さんの影響を強く受けた本です。
なぜ会社は福利厚生や待遇を充実させるのか?
企業は最大利潤追求が目的でなければならないと考えていた僕は、この理由がよくわからなかったが、この本を読んでよくわかった。
経営者ならびに従業員は私利私欲のために仕事をしてはならないからだ。
私利私欲を持たないようにするには、現状に不満を持たないような心のゆとりが必要だ。心のゆとりを持つようにするためには、(他人を思いやれるような)人間らしく生きていくための最低限の待遇が必要だ。だから成熟した会社は従業員に多いくらいの福利厚生と待遇を与えているのだと。
仕事をするということはどういうことなのかを考えさせられる一冊です。
一見、ITとは関係のない本のようにも思えるが、技術ならびに運用面においては非常に参考になる一冊。
トラブルが発生した場合、多くの日本人はなぜトラブルが発生したのかではなく、誰がトラブルを起こしたのかということに注目する傾向がある。
人間は必ずエラーを起こすものであり、そのエラーが発生しないようにコンピューターシステムによってエラーを未然に防いだり、エラーが発生したとしても、安全な方向に制御するのが本来のシステム設計の考え方である。
しかしながらエラーが発生したときに犯人探しを行うようではそこに改善を行う余地がないことにこの本は警鐘を鳴らしている。
リバースエンジニアリングの手法を中心に前半は説明が続いており、興味のある人には詳しく説明されいて良いと思う。
自分がこの本を読んでよかった点は、当たり前が当たり前でないという別の認識ができたことだと思う。
たとえば、「ソフトウエアのライセンスキーを入力するような場面では、製造元は適当に入力しても正しいライセンスキーが入力されないようにロジック開発に苦心しているが、そもそもライセンスキーを比較するというロジックが無効にされてしまうようなことがあれば、まったくもってそれらは無意味であるということである」などです。
4,800円とかなり高価な書籍ではあるが、読んでも損はないと思います。