SlideShare ist ein Scribd-Unternehmen logo
1 von 13
ソフトウェア開発の格言
目次
❏ DRY原則
❏ プレイン・テキストの威力
❏ ボーイスカウトルール
❏ 割れ窓理論
❏ 偶発的プログラミング
DRY原則
Don’t Repeat Yourself(繰り返しを避けるこ
と)
すべての知識はシステム内において、単一、かつ明確な、
そして信頼できる表現になっていなければならない。
「達人プログラマー」より
DRY原則
要は情報の一元管理
だけど、必ずしも守れるものではない
❏ 設計書とコード
❏ コードとコメント
❏ パフォーマンスを上げるためのキャッシュ
とは言え、極力この原則を守った方が良い
やむを得ない部分では、メンテナンスに注意す
る
プレイン・テキストの威力
達人プログラマーが取り扱う素材は木でも鉄でもありませ
んー知識です。我々は要求を集めて知識とし、設計、実装、
テスト、ドキュメントの中でその知識を表現するのです。
プレイン・テキストを使えば手作業、自動的な作業を問わ
ず、事実上すべてのツールを使って思い通りに知識を操作
することができるようになるのです。
「達人プログラマー」より
プレイン・テキストの威力
プレイン・テキストのイイトコ
❏ diffが取りやすい(バージョン管理しやすい)
❏ コードの自動生成ができる
❏ コードから自動生成ができる
できたらいいなと思うプロセス
❏ 設計レビュー用仕様書はwordでもexcelでも
良い
❏ 設計が固まった後の仕様書(メンテナンス
用)は、プレイン・テキストで作成する
❏ 仕様書とコードの両方に現れる情報は、一方から他
方を自動生成できるようにする
❏ 外部インターフェース、内部インターフェース、
etc...
できたらいいなと思うプロセス
❏ プログラムにおける唯一の真実はコード
❏ 仕様書になんと書いてあっても、実際の動
作はコードが全て
❏ コードがコミットされると、コードからド
キュメントが自動生成されたら、少なくと
もコードとそのドキュメントに乖離はなく
なる
プレインテキストの威力+DRY原則
ボーイスカウトルール
アメリカのボーイスカウトの以下のルールを、コーディン
グにも適用すること:
キャンプ場を、来た時よりも綺麗にして帰ること
チェックアウトした時よりも、少しでも綺麗に
してチェックインする
「Clean Code」より
ボーイスカウトルール
チェックアウトした時よりも、少しでも綺麗に
してチェックインする
❏ 「解読に苦労した部分にコメントを追加する」
これだけでも、次に読む人の工数を結構削減できる
かも。
❏ 変数の意味
❏ 関数コメント
❏ etc...
割れ窓理論
「建物の窓が壊れているのを放置すると、誰も注意を払っ
ていないという象徴になり、やがて他の窓もまもなく全て
壊される」という考え方
コード中のささいなtypoやちょっとしたスパゲッティが放
置されると、「このコードの品質はこの程度でいいんだ」
という感じで新たなtypoやスパゲッティを呼んでしまう
Broken Windows: The police and neighborhood safety
「達人プログラマー」
ボーイスカウトルールと割れ窓理論
ボーイスカウトルールを適用して、割れ窓を発
見したら自分の変更に加えて是非窓の修理を!
偶発的プログラミング
コードを書いてみて、テストしてみて、動いた
からOK、は危険!(偶発的プログラミング)
❏ たまたまテストした時の条件がうまく合致していた
だけかもしれない。
❏ もし何らかのルーチンを呼び出す場合には、ドキュ
メント化されている振る舞いのみを前提とする
❏ ドキュメント化されていないルーチンを呼ぶ必要が
あるときは、自分の仮定をドキュメント化しておく
「達人プログラマー」

Weitere ähnliche Inhalte

Andere mochten auch

[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)masashi takehara
 
International php conference 2016 参加レポート
International php conference  2016 参加レポートInternational php conference  2016 参加レポート
International php conference 2016 参加レポートRyosuke Miyahara
 
月刊ライトニングトーク 2014/05 イントロダクション
月刊ライトニングトーク 2014/05 イントロダクション月刊ライトニングトーク 2014/05 イントロダクション
月刊ライトニングトーク 2014/05 イントロダクションSeiya Konno
 
勉強会に行こう
勉強会に行こう勉強会に行こう
勉強会に行こうKosuke Ogawa
 
ブロガーズフェスティバル2015 ライトニングトーク
ブロガーズフェスティバル2015 ライトニングトークブロガーズフェスティバル2015 ライトニングトーク
ブロガーズフェスティバル2015 ライトニングトークKazuhiro Maehara
 
月刊ライトニングトーク 2014/08: 前回からのダイジェスト
月刊ライトニングトーク 2014/08: 前回からのダイジェスト月刊ライトニングトーク 2014/08: 前回からのダイジェスト
月刊ライトニングトーク 2014/08: 前回からのダイジェストSeiya Konno
 
スタートアップできなかった話
スタートアップできなかった話スタートアップできなかった話
スタートアップできなかった話MontBlanc. Tsukuda
 
ブロフェス2016 LTスライド(公開用)
ブロフェス2016 LTスライド(公開用)ブロフェス2016 LTスライド(公開用)
ブロフェス2016 LTスライド(公開用)Susumu Kataoka
 
IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針Ken Morishita
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~Kenji Hiranabe
 
テーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyoテーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyoHidekazu Ishikawa
 
Ltサンプルスライド
LtサンプルスライドLtサンプルスライド
LtサンプルスライドTsukasa Saeki
 
WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPythondrillan
 
Lecture 4 measuring the cost of living
Lecture 4 measuring the cost of livingLecture 4 measuring the cost of living
Lecture 4 measuring the cost of livingGale Pooley
 
Daniel goodwin real estate law 150414
Daniel goodwin   real estate law 150414Daniel goodwin   real estate law 150414
Daniel goodwin real estate law 150414Gale Pooley
 
Mau menikmati hidup ? Begini caranyaaaa ... !!
Mau menikmati hidup ? Begini caranyaaaa ... !!Mau menikmati hidup ? Begini caranyaaaa ... !!
Mau menikmati hidup ? Begini caranyaaaa ... !!Bintang Fajar
 

Andere mochten auch (20)

[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
[Slide]闇アジャイラーvs光アジャイラーforDevLOVE(EnergizedWorkLT祭)
 
International php conference 2016 参加レポート
International php conference  2016 参加レポートInternational php conference  2016 参加レポート
International php conference 2016 参加レポート
 
Team geek感想LT
Team geek感想LTTeam geek感想LT
Team geek感想LT
 
月刊ライトニングトーク 2014/05 イントロダクション
月刊ライトニングトーク 2014/05 イントロダクション月刊ライトニングトーク 2014/05 イントロダクション
月刊ライトニングトーク 2014/05 イントロダクション
 
勉強会に行こう
勉強会に行こう勉強会に行こう
勉強会に行こう
 
ブロガーズフェスティバル2015 ライトニングトーク
ブロガーズフェスティバル2015 ライトニングトークブロガーズフェスティバル2015 ライトニングトーク
ブロガーズフェスティバル2015 ライトニングトーク
 
月刊ライトニングトーク 2014/08: 前回からのダイジェスト
月刊ライトニングトーク 2014/08: 前回からのダイジェスト月刊ライトニングトーク 2014/08: 前回からのダイジェスト
月刊ライトニングトーク 2014/08: 前回からのダイジェスト
 
スタートアップできなかった話
スタートアップできなかった話スタートアップできなかった話
スタートアップできなかった話
 
ブロフェス2016 LTスライド(公開用)
ブロフェス2016 LTスライド(公開用)ブロフェス2016 LTスライド(公開用)
ブロフェス2016 LTスライド(公開用)
 
IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針IOS/Androidアプリの3つの大事な設計方針
IOS/Androidアプリの3つの大事な設計方針
 
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
アジャイル開発の現在・過去・未来~今を知り、源流を訪ね、先を見据える~
 
テーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyoテーマ・プラグイン開発の光と闇 #wctokyo
テーマ・プラグイン開発の光と闇 #wctokyo
 
Ltサンプルスライド
LtサンプルスライドLtサンプルスライド
Ltサンプルスライド
 
WindowsでPython
WindowsでPythonWindowsでPython
WindowsでPython
 
quiz
quizquiz
quiz
 
Lecture 4 measuring the cost of living
Lecture 4 measuring the cost of livingLecture 4 measuring the cost of living
Lecture 4 measuring the cost of living
 
Daniel goodwin real estate law 150414
Daniel goodwin   real estate law 150414Daniel goodwin   real estate law 150414
Daniel goodwin real estate law 150414
 
Fotos antigas
Fotos antigasFotos antigas
Fotos antigas
 
Mau menikmati hidup ? Begini caranyaaaa ... !!
Mau menikmati hidup ? Begini caranyaaaa ... !!Mau menikmati hidup ? Begini caranyaaaa ... !!
Mau menikmati hidup ? Begini caranyaaaa ... !!
 
A arte de Olbinski
A arte de OlbinskiA arte de Olbinski
A arte de Olbinski
 

Ähnlich wie ソフトウェア開発の格言

06.超初心者向けセキュリティ入門(.netの解析と対策)
06.超初心者向けセキュリティ入門(.netの解析と対策)06.超初心者向けセキュリティ入門(.netの解析と対策)
06.超初心者向けセキュリティ入門(.netの解析と対策)Study Group by SciencePark Corp.
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則増田 亨
 
20130603 aspnet勉強会 実践的debugging
20130603 aspnet勉強会 実践的debugging20130603 aspnet勉強会 実践的debugging
20130603 aspnet勉強会 実践的debuggingkumake
 
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法de:code 2017
 
ベンチマーク勉強会#01
ベンチマーク勉強会#01ベンチマーク勉強会#01
ベンチマーク勉強会#01milk hanakara
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう増田 亨
 
今、おさえておきたい DevOps
今、おさえておきたい DevOps 今、おさえておきたい DevOps
今、おさえておきたい DevOps 智治 長沢
 
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」Fujio Kojima
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)Masayuki Kanou
 
非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門Kiro Harada
 
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...Rakuten Group, Inc.
 
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...tkawashita
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方Hiroyuki Tanaka
 
プロジェクトリーダに必要な3つのこと
プロジェクトリーダに必要な3つのことプロジェクトリーダに必要な3つのこと
プロジェクトリーダに必要な3つのことYuji Okazawa
 

Ähnlich wie ソフトウェア開発の格言 (20)

Coderetreat
CoderetreatCoderetreat
Coderetreat
 
06.超初心者向けセキュリティ入門(.netの解析と対策)
06.超初心者向けセキュリティ入門(.netの解析と対策)06.超初心者向けセキュリティ入門(.netの解析と対策)
06.超初心者向けセキュリティ入門(.netの解析と対策)
 
現場で役立つシステム設計の原則
現場で役立つシステム設計の原則現場で役立つシステム設計の原則
現場で役立つシステム設計の原則
 
20130603 aspnet勉強会 実践的debugging
20130603 aspnet勉強会 実践的debugging20130603 aspnet勉強会 実践的debugging
20130603 aspnet勉強会 実践的debugging
 
CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介
CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介
CND(認定ネットワークディフェンダー / Certified Network Defender)公式トレーニングのご紹介
 
Certified network defender
Certified network defenderCertified network defender
Certified network defender
 
【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介
【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介
【セミナー講演資料】CND(認定ネットワークディフェンダー)公式トレーニング紹介
 
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
[SC12] あなたのチームのセキュリティスキルは十分ですか?DevSecOpsを見据えたセキュリティ人材の育成方法
 
ベンチマーク勉強会#01
ベンチマーク勉強会#01ベンチマーク勉強会#01
ベンチマーク勉強会#01
 
良いコードとは
良いコードとは良いコードとは
良いコードとは
 
「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう「ドメイン駆動設計」の複雑さに立ち向かう
「ドメイン駆動設計」の複雑さに立ち向かう
 
20130320 agile pm
20130320 agile pm20130320 agile pm
20130320 agile pm
 
今、おさえておきたい DevOps
今、おさえておきたい DevOps 今、おさえておきたい DevOps
今、おさえておきたい DevOps
 
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
Developers Summit 2014 【13-D-7】 コミュニティLT - Story 5. 「新人技術者にどうプログラミングを教えたか」
 
20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)20100324 勉強会資料(ドメイン駆動)
20100324 勉強会資料(ドメイン駆動)
 
非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門非開発者のためのアジャイル開発入門
非開発者のためのアジャイル開発入門
 
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten,  core skills  neede...
楽天市場で使われている技術、エンジニアに必要なコアスキルとはTechnology used in Rakuten, core skills neede...
 
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
 
GCSアジャイル開発を使ったゲームの作り方
 GCSアジャイル開発を使ったゲームの作り方 GCSアジャイル開発を使ったゲームの作り方
GCSアジャイル開発を使ったゲームの作り方
 
プロジェクトリーダに必要な3つのこと
プロジェクトリーダに必要な3つのことプロジェクトリーダに必要な3つのこと
プロジェクトリーダに必要な3つのこと
 

ソフトウェア開発の格言