コンピュータやソフトウェアのあれこれ@道民(&元道民)
きのこ97
[きのこ97][ソフトウェア開発][Planet] 00-実践する、コツコツと、少しづつ
4月 10th
@shokos さんのブログのすすめからバトンを頂き、新卒準備カレンダー 2011春のエントリーをお届けします。自分がブログを書き始めたのは2007年です。ブランクはあるものの、業界経験は約11年ですから、まあ半分くらいの期間はブログを書いていることになります。先日まで、きのこ本関連のエントリーを毎日書くという目標の下、なんと106日間継続を達成しました。 他の方々が素晴らしいエントリーを書いているので、いまさら「これやった方がいいよ」的なエントリーでは面白くありません。なので、自分は「どうやってや ...
[きのこ97][ソフトウェア開発][Planet] 97-ステートに注目する
3月 27th
「プログラマが知るべき97のこと」の97個目のエピソードは、ステート(状態)に関する話です。学習を怠っていないプログラマであれば、「ステート」という言葉を聞いて「ステートマシン(図)」と「ステートパターン」などを連想すると思います。このエピソードにも書かれているように、プログラムの中では「ステート(状態)」は重要な要素で、注意深く扱わなければなりません。 仕事をしていると、必要なチェックが抜けているコード、冗長なチェックをしているコードは頻繁に目にします。 自分もこれはよく目にしました。ヒアリング ...
[きのこ97][ソフトウェア開発][Planet] 96-テストは正確に、具体的に
3月 26th
「プログラマが知るべき97のこと」の96個目のエピソードは、ユニットテストに関する話です。 先にも書いたとおり、ユニットテストにおいては、実装コードの「偶然の仕様」への合致を確認するのではなく、コードの動きが本来の要求に合っているかを確認することが大切です。だからと言って、それを言い訳にテストが曖昧なものになるようでは困ります。テストはあくまで正確で厳密なものでなくてはなりません。 このエピソードの著者であり、きのこ本の編者でもあるケブリン・へニー氏のソースコード・ユニットテストに対する思想は、「 ...
[きのこ97][ソフトウェア開発][Planet] 95-ペアプログラミングと「フロー」
3月 26th
「プログラマが知るべき97のこと」の95個目のエピソードは、ペアプログラミングに関する話です。ペアプログラミングとは、文字通り2人1組でプログラミングをする事です。1つの事を2人でやるのですから、倍の時間を費やすことになると感じ、そんな非効率な手法はあり得ないと感じるのは、特別なことではありません。しかし、その理論は1つの暗黙的な了解があるのです。それは、その作業は誰が行っても効率に大きな差がなく、作業手順も決まっており、品質に関しても平準であるという事です。工場のラインであれば同じ作業を2ラインで作 ...
[きのこ97][ソフトウェア開発][Planet] 94-リンカは魔法のプログラムではない
3月 24th
「プログラマが知るべき97のこと」の94個目のエピソードは、リンカに関する話です。最近はJavaを初めとしてコンパイルは行われてもモジュール(ライブラリ)は動的に解決されたり、スクリプト言語のようにそもそも動的に実行される言語が多くをしめており、リンカと聞いても教科書レベルの知識しか持ち合わせていないプログラマは増えていると思います。 コンパイルが必要な言語においては、ソースコードを静的にリンクされた実行ファイルに変換するプロセスが発生します。愕然とするのは、そのプロセスについてごく浅い知識しか持っ ...
[きのこ97][ソフトウェア開発][Planet] 93-エラーを無視するな
3月 23rd
「プログラマが知るべき97のこと」の93個目のエピソードは、エラーとエラーハンドリングに関する話です。完璧なシステムを作ることはできません。時にはプログラム上の問題ではなく外的要因でも発生する可能性があるエラーは厄介なものです。しかし、エラーはソフトウェアになんらかの問題が発生している可能性があることを通知してくれるものです。時には無視できるような通知もあるかもしれませんが、大きな障害が発生する前触れであったり、無視できるようなエラーが積み重なって無視できないエラーになったりすることもあるため、楽観視 ...
[きのこ97][ソフトウェア開発][Planet] 92-顧客の言葉はそのまま受け取らない
3月 22nd
「プログラマが知るべき97のこと」の92個目のエピソードは、顧客とのコミュニケーションに関する話です。ソフトウェア開発に慣れてきて自分がどんなソフトウェアを作れるかという事が解ってくると陥りがちな事に、「顧客が要求を提示してくれない」と勘違いする事があります。要件がまとまらず開発したソフトウェアは、要求を満たしていないと評価されません。状況によってはトラブルとなり、大きな仕様変更を招くこともあるでしょう。それは顧客の問題ではありません。ほとんどの場合は、開発側が顧客から正しく要求を引き出せていないだけ ...
[きのこ97][ソフトウェア開発][Planet] 91-良いプログラマになるには
3月 21st
「プログラマが知るべき97のこと」の91個目のエピソードは、良いプログラマの条件に関する話です。きのこ本に書かれているエピソードは97+10本ありますが、大きくテストに関する話とプログラマとしてどうあるべきかという話がかなりの割合を占めています。このエピソードでは、良いプログラマの条件を次のような事を常に意識していると定義しています。 ・どんな場合でも、「とりあえず動きそう」というだけのコードは決して書かない。 ・わかりやすいコード、保守しやすいコード、正しいコードを書く。本当に正しいと言えるかはあ ...
[きのこ97][ソフトウェア開発][Planet] 90-コードを見る人のためにテストを書く
3月 21st
「プログラマが知るべき97のこと」の90個目のエピソードは、テストに関する話です。きのこ本には本当に多くのテストに関するエピソードがあります。テストの書き方、目的、心構えなど様々なテストに関する重要なトピックがありますが、このエピソードでは「誰のためのテストか?」という点について書かれています。56ー未来へのメッセージなどでも書かれていますが、プログラムを現在の自分の自己満足にしてはなりません。テストも同様であり、自分の為や製品の品質の為ではなく「コードを見る人のため」にテストを書く事が良いテストの条 ...
[きのこ97][ソフトウェア開発][Planet] 89-関数の「サイズ」を小さくする
3月 20th
「プログラマが知るべき97のこと」の88個目のエピソードは、関数の「サイズ」に関する話です。このエピソードで述べられている関数の「サイズ」とは、コードの量という意味ではなく、そのコードが表現している数学関数のサイズという意味です。関数というものは入力と出力の組み合わせと言えます。内部状態を変えないと仮定した場合、その関数は全入力パターンに対し、どれか1つの出力パターンが対応する写像です。したがって、入力出力パターンが多ければ多いほど、その関数は複雑と言えます。 次に示す加算関数をみてみましょう。 i ...