スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

匂うコード

 デジタルデータであるソースコードが異臭を発するわけはないですが、
リファクタリングの「きっかけ」を匂いの比喩で表す言葉です。

リファクタリングとは
ソフトウェアの外部的振る舞いを保ったままで、内部の構造を改善していく作業

マーチン・ファウラー(児玉 公信)『リファクタリング プログラムの体質改善テクニック』ピアソン・エデュケーション、2000年

 上記の書籍では、この匂うコードの不吉な兆候について次のものだとしています。
・重複したコード
・長すぎるメソッド
・巨大なクラス
・多すぎる引数
・変更の発散
・変更の分散
・属性、操作の横恋慕
・データの群れ
・基本データ型への執着
・スイッチ文
・パラレル継承
・怠け者クラス
・疑わしき一般化
・一時的属性
・メッセージの連鎖
・仲介人
・不適切な関係
・クラスのインタフェース不一致
・未熟なクラスライブラリ
・データクラス
・相続拒否
・コメント

 既に存在する匂うコードをいつリファクタリングすればよいのでしょうか?
臭いものに蓋をする」という言葉もありますが、何の解決にもならず状況は悪化するでしょう。
割れ窓の原理」というのがあって、窓ガラスが1枚割れて放置していると、
どんどん割れていく現象を匂うコードを放置すると状況がさらに悪化することに例えています。

 私が愛用している言葉に「ボーイスカウト精神」というものがあります。
私はボーイスカウトではありませんが、ボーイスカウトはキャンプなどで行った先では、
元の状況より綺麗にしてその場を去る教えがあるそうです。
これにならって、コードを追加したのならば、一ヶ所でもいいからリファクタリングをしてコミットするようにしています。
これにより「割れ窓の原理」を防止しています。

テーマ : プログラミング
ジャンル : コンピュータ

35歳定年説

一人前になる前に技術の第一線から退いてしまい、新たな技術を学ぶのをやめたり、創造する活動をやめたりしてしまう人が多いのではないでしょうか。

柴田芳樹『プログラマー現役続行』技術評論社、2007年、第1章

 一人前のプログラマになるには一生懸命に努力して10年を要するといわれています。
大卒で22歳、ここから10年で32歳、死に物狂いで勉強できますか?

 殆どの一流といわれる人は、天才ではなく、努力の積み重ねで築いた地位です。
しかし、彼らは、努力を努力と思っていないのでしょう。
新しい技術を習得するのが楽しくて仕方ないのです。

 では、どうしたら新しい技術を習得するのが楽しくなるのでしょうか?
それに、まず基本的な技術をしっかりマスターすることでしょう。
いきなり新しい技術を得ようとしても、理解できないことばかりで面白くありません。
基本的なことが分かっていれば、理解できるものが多くなり、創造を刺激して楽しくなります。
上辺だけの技術ではなく、しっかりとした基本技術を身につけましょう。

 厳しい言い方をすれば、
 「Love It or Leave It」 (情熱を持ちなさい、さもなければ、去りなさい)

苦しい思いを定年までするより、新しい道を探した方が得策だと思います。

テーマ : プログラミング
ジャンル : コンピュータ

プレッシャーの代償

リスターの法則
 人間は時間的なプレッシャーをいくらかけられても、早くは考えられない

トム・デマルコ(伊豆原弓)『ゆとりの法則 誰も書かなかったプロジェクト管理の誤解』日経BP社、2001年、第7章

 知的労働者にとってプレッシャーほど悪なものはない。
考える速さが変わらないとしたら、労働者は次の方法を取るだろう。

1.無駄な時間をなくす
2.クリティカルパスにない仕事を後回しにする。
3.夜遅くまで仕事をする

 この方法は全て健全にみえますか?

私はどの方法も取りたくないと思っています。

「1.無駄な時間をなくす」について
現状の作業で無駄な時間がありますか?
知的労働者であれば、遊んでいるわけがありません。
トイレや喫煙所でさえも仕事のアイディアを模索しているのではないでしょうか。

「2.クリティカルパスにない仕事を後回しにする。」
これも、知的労働者であれば、自然とやっていることです。

「3.夜遅くまで仕事をする」
最悪です。そのうち優秀な人材から履歴書を作成し始めるでしょう。

 これでも部下にプレッシャーを与えますか?
適度な緊張感は必要です。人間、直ぐにだらけてしまいます。
しかし、上司のエゴで部下にプレシャーを与えることはパワーハラスメントです。
立派な犯罪です。今すぐにやめましょう。

テーマ : プログラミング
ジャンル : コンピュータ

ハドソン湾スタート

 カナダ北東部にあるハドソン湾会社の1600~1700年代の習慣に由来している。当時のハドソン湾会社は毛皮商人に遠征のための物資を提給していた。毛皮商人たちが必要なものを忘れていないか確認できるように、会社は商人たちにハドソン湾を出て数マイル先の地点でいったん野営させていた。商人たちは、ほんの数マイル先で野営することにより、文明を離れる前に道具や消耗品の忘れ物がないか確認していただけだ。旅を小さく始めることで、遠征を耐え抜く能力を確認していたともいえる。

Johanna Rothman(でびあんぐる)『Manage It!現場開発者のための達人式プロジェクトマネジメント』オーム社、2008年、第4章

 自分にもプロジェクトチームにもまったく経験がないプロジェクトを管理する場合、プロジェクトを見積もる方法にハドソン湾スタートで検討しよう。
 プロジェクトチームが実際のプロジェクトの環境で物事を試行する技法で、試行できるのはできるかぎり小さなものにする。("Hello World"プログラムでも十分かも)4時間以内で完了できることから始め、何かを作ったら、必要なタスクをどうやって見積もるか、前よりも理解しているだろう。理解が少ししか増えていなかったら、短いイテレーションを開始してから決める。
 有利な点として次のものがある。
・自分たちが何かを達成できるという確信をチームが得られる
・いくつかのタスクをどうやって整理すればいいかについても理解が深まる

 プロジェクトマネージャーであれば誰もが、やっている技法ですが、私が気に入ったのはネーミングです。技法に名前を付け、組織で共通言語にまで育つと、組織のスキルも上がり、コミュニケーションも良くなります。

テーマ : プログラミング
ジャンル : コンピュータ

アセンブリのすすめ

 コンピュータはなぜ動くのでしょうか?

 高級言語しかやってこなかったプログラマの解答は、「プログラミングでCUPに命令することによって動く」などでしょう。
しかし、求めている解答は、もっと低レベルでCUPに命令している動作を説明できるかなのです。
要するに、「あなたはアセンブリレベルでプログラムを理解していますか?」ということなのでしょう。

 何故このようなことを聞くのでしょうか?

 今の時代、高級言語ができれば仕事はできます。
よく考えてみてください。高級言語プログラマにとってアセンブリはブラックボックスです。
そのブラックボックス部分が技術者として気になりませんか?

 そのブラックボックスを知ってどうするのでしょう?

 これは基本的な技術になるので高級言語を勉強していくときに理解が深まります。
例えば、配列のサイズを動的に確保できない言語仕様があったとします。
これをただ「そんなもんなんだ!」と思うのと、スタックをアセンブリレベルで知っているので「当たり前」と解釈するのは全然違います。
 特に原因不明のバグを解決するには、低レベルな技術は必要不可欠ではないでしょうか。

 アセンブリが書けなくても読めるようになるだけで理解力が全然違います。

次に紹介する本は、アセンブリができるようになるための本ではありませんが、
CPU、メモリ、I/Oを紙上ではありますが線で結んで結線し、CPUの動作メカニズムを知ることができます。

矢沢久雄『コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識』日経BP社、2003年

テーマ : プログラミング
ジャンル : コンピュータ

プロフィール

夢追

Author:夢追
芸術プログラミングの世界へようこそ

検索フォーム
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリースペース
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。