読者です 読者をやめる 読者になる 読者になる

MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

24. 変更を恐れない Mike Lewis:『プログラマが知るべき97のこと』

以下の記事は,オライリージャパン社から出版された

プログラマが知るべき97のこと』

の中から1つのエッセイを選び,

そのエッセイを,クリエイティブコモンズ3.0の条件の元で転載したものです.

Creative Commons ― 表示 3.0 アメリカ合衆国 ― CC BY 3.0

本書の内容は,オープンソースモデルに従い,

ほぼ無制限で利用が可能です.

クリエイティブ・コモンズ表示3.0の条件下で,

自由に使用することができるのです.

つまり,どのエッセイも,

著者の名前を明記すれば,自由に転載,改変が可能であるということです.

ーー"はじめに"から抜粋 pXII


もし,他のエッセイを読みたい場合には,

記事末のリンクを辿るか,

以下のリンク先のTwitterアカウントのつぶやきからお探し下さい.

Twitter Account: 97 Things Bot



また,元の英文によるエッセイを読みたい方は,

こちらを参照して下さい.

Contributions Appearing in the Book - Programmer 97-things


24. 変更を恐れない マイク・ルイス (Mike Lewis):『プログラマが知るべき97のこと』:

ソフトウェア業界で働いたことのある人なら,

ひどいプロジェクトに関わった経験が一度はあるはずです.

たとえば,どう見てもコードベースの品質が低すぎるようなプロジェクトです.

システムの構造自体に問題があり,どこかに変更を加えると必ず,

関連のないはずの別の箇所が壊れてしまう.

そんなプロジェクトにおいて新たにモジュールを追加する必要が生じた時,

担当者が考えるのは,できる限りどこにも変更を加えないことです.

リリースの時は,毎回固唾を飲む思いをします.

それはまさにソフトウェアで「ジェンガ」をやっているようなものです.

直方体のパーツを積んで作った高い塔が倒れないよう,

慎重にそっと手を加えていくのですが,

いつかは必ず崩れる運命なのです.



変更を加える度になぜそう神経質になるかというと,

それはシステムがいわば,

「病気にかかっている」からです.

医者に診てもらう必要があります.

そうしなければ,容態は悪くなる一方でしょう.

システムのどこが悪いのか,

自分ではよくわかっているのだけれど,

怖くて触れないのかもしれません.

しかし,何かを改善するためには痛みはつきものです.

外科手術をするには,

必ずどこかを切る必要がありますが,

痛みはあくまで一時的なことであり,

その傷は癒えるのです.

そして,患者の容態は手術の前より必ず良くなるはずです.



プログラムのコードでも同じことが言えます.

改良を加える間,

一時的にどこかが壊れていても誰が気にするでしょうか?

そもそも,

そういうむやみに変更を怖がるような態度のせいで

プロジェクトがひどい状況に陥っている可能性が高いのではないでしょうか.

リファクタリングをすれば時間と労力はかかりますが,

プロジェクトが進む中でその投資は十分回収できるでしょうし,

何倍もの利益となって返ってくるでしょう.

さらに良いことは,

「病気の」システムを治すことが

プロジェクトのメンバーにとって貴重な経験になるということです.

その経験によって,

システムは本来どうあるべきかを全員が理解することになり,

システムについてのエキスパートになるのです.

システムがひどいとただ怒るのではなく,

改良できる知識を身に付けるのです.

作っている人間自身がシステムを嫌っているようでは,

そんなものを使わされる側はたまらないでしょう.



システムの改良にあたってすべきこととしては,

例えば,内部インターフェースの再定義,

コピペしたコードのリファクタリングなどが挙げられます.

また,依存関係を減らして設計をシンプルにすることなども重要です.

コードをシンプルにするため,

機能の組み合わせ方が不適切な時に良く生じるコーナーケースを

減らすというのも有効でしょう.

一度に大幅な変更を加えるのは危険です.

それが元で大変な問題が起きてしまい,

結局,せっかく途中まで進めた改良を全部やめてしまおう

ということになりやすいからです.



大切なのは,外科医が身体を切ることを恐れずに病気を治すように,

コードに変更を加えることを恐れず,

積極的にシステムを改良していく姿勢です.

そういう姿勢は人から人へと伝播しやすいものです.

同じような人が増えれば,

延び延びになっていた改良プロジェクトが実施に移される

ということもあるかもしれません.

チームのメンバの意識が高まれば,

日々,気づいたことをリストアップして

みんなと共有する,ということもできるでしょう.

これもシステムの質の向上につながります.

改良プロジェクトを実施するには,

会社の上層部を説得することが必要になるかもしれません.

「改良してもすぐに目に見える利益が

生まれるわけではないが,

将来のコスト削減につながり,

リリースに要する時間の短縮もできる」

ということを説明して納得してもらうのです.

このように,

システムの「健康」への留意は

常に怠らないようにしましょう.



■著者データ

[マイク・ルイス (Mike Lewis)]

Lutron Electronics社のソフトウェアエンジニア

勤務時間外には,

フリーのソフトウェアのコンサルタントの仕事もしている.

ソフトウェア工学に関する10年以上の経験を活かし,

エレガントで直感的に理解できるソフトウェアソリューションを

設計することに注力している.

また製品改善にも熱心に取り組み,

特にすべての操作における

「ユーザエクスペリエンスの改善」を重視している.

ロチェスター工科大学でコンピュータ工学の理学士号,

理学修士号を取得,

ニューヨークやフィラデルフィアに近い,

ペンシルベニア州アレンタウンで暮らす.


関連記事

1.分別のある行動 Seb Rose:『プログラマが知るべき97のこと』 - MY ENIGMA

2.関数プログラミングを学ぶことの重要性 Edward Garson:『プログラマが知るべき97のこと』 - MY ENIGMA

3.ユーザが何をするかを観察する (あなたはユーザではない) Giles Colborne:『プログラマが知るべき97のこと』 - MY ENIGMA

4.コーディング規約を自動化する Filip van Laenen:『プログラマが知るべき97のこと』 - MY ENIGMA

5.美はシンプルさに宿る Jorn Olmheim:『プログラマが知るべき97のこと』 - MY ENIGMA

6.リファクタリングの際に注意すべきこと Rajith Attapattu:『プログラマが知るべき97のこと』 - MY ENIGMA

7.共有は慎重に Udi Dahan:『プログラマが知るべき97のこと』 - MY ENIGMA

8. ボーイスカウト・ルール Robert C. Martin:『プログラマが知るべき97のこと』 - MY ENIGMA

9. 他人よりまず自分を疑う Allan Kelly:『プログラマが知るべき97のこと』 - MY ENIGMA

10. ツールの選択は慎重に Giovanni Asproni:『プログラマが知るべき97のこと』 - MY ENIGMA

11. ドメインの言葉を使ったコード Dan North:『プログラマが知るべき97のこと』 - MY ENIGMA

12. コードは設計である Ryan Brush:『プログラマが知るべき97のこと』 - MY ENIGMA

13. コードレイアウトの重要性 Steve Freeman:『プログラマが知るべき97のこと』 - MY ENIGMA

14. コードレビュー Mattias Karlsson:『プログラマが知るべき97のこと』 - MY ENIGMA

13. コードレイアウトの重要性 Steve Freeman:『プログラマが知るべき97のこと』 - MY ENIGMA

14. コードレビュー Mattias Karlsson:『プログラマが知るべき97のこと』 - MY ENIGMA

15. コードの論理的検証 Yechiel Kimchi:『プログラマが知るべき97のこと』 - MY ENIGMA

16. コメントについてのコメント Cal Evans:『プログラマが知るべき97のこと』 - MY ENIGMA

17. コードに書けないことのみをコメントにする Kevlin Henney:『プログラマが知るべき97のこと』 - MY ENIGMA

18. 学び続ける姿勢 Clint Shank:『プログラマが知るべき97のこと』 - MY ENIGMA

19. 誰にとっての利便性か Gregor Hohpe:『プログラマが知るべき97のこと』 - MY ENIGMA

20. すばやくデプロイ,こまめにデプロイ Steve Berczuk:『プログラマが知るべき97のこと』 - MY ENIGMA

21. 技術的例外とビジネス例外を明確に区別する Dan Bergh Johnsson:『プログラマが知るべき97のこと』 - MY ENIGMA

22. 一万時間の訓練 Jon Jagger:『プログラマが知るべき97のこと』 - MY ENIGMA

23. ドメイン特化言語 Michael Hunger:『プログラマが知るべき97のこと』 - MY ENIGMA