2008-03-19(水); Apple Store Sapporo                                         Ruby Sapporo Night vol.5何故そんなにもImplementationPa...
Our initial success using a pattern language for user interface design      has left us quit enthusiastic aboutpossibiliti...
しまだこうじhttp://iddy.jp/profile/snoozer05✓ ふつうのフリーランスプログラマ✓ 日本Rubyの会 ✓ Ruby札幌 運営 ✓ RubyKaigi 2007 当日スタッフ ✓ るびま、るりま✓ プログラミングの楽し...
しまだこうじhttp://iddy.jp/profile/snoozer05✓ Implementation Patterns Group ✓ Implementation PatternsとSBPPを味わ   うためのグループです       ...
Implementation Patterns
Implementation Patterns  Kent Beck待望の新刊
Kent Beckhttp://www.flickr.com/photos/improveit/1574912686/
Kent Beck          ✓ パターンhttp://www.flickr.com/photos/improveit/1574912686/
Kent Beck          ✓ パターン          ✓ CRCカードhttp://www.flickr.com/photos/improveit/1574912686/
Kent Beck          ✓ パターン          ✓ CRCカード          ✓ XPhttp://www.flickr.com/photos/improveit/1574912686/
Kent Beck          ✓ パターン          ✓ CRCカード          ✓ XP          ✓ TDDhttp://www.flickr.com/photos/improveit/1574912686/
Kent Beck          ✓ パターン          ✓ CRCカード          ✓ XP          ✓ TDD          ✓ JUnithttp://www.flickr.com/photos/impro...
キーマン(鍵的じゃない意味で)
Implementation Patterns  Kent Beck待望の新刊
パターン?What is Pattern?
オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン✓   Abstract Factory          ✓   Decorator✓   Adapter                   ✓   Facade✓   Bridge  ...
オブジェクト指向における再利用のためのデザインパターン✓   Abstract Factory          ✓   Decorator✓   Adapter                   ✓   Facade✓   Bridge  ...
パターン?What is Pattern?
http://noplans.org/product/t-shirt/
パターンの起源 Origin of Pattern
オブジェクト指向プログラムのためのパターン言語の使用     Using Pattern Languages   for Object-Oriented ProgramBy Kent Beck, Ward Cunningham
角征典さんによる翻訳http://capsctrl.que.jp/kdmsnr/wiki/transl/?UsingPatternLanguagesForOOP
オブジェクト指向プログラムのためのパターン言語の使用
オブジェクト指向プログラムのための パターン言語の使用✓ オブジェクト指向プログラミングのための適 切な方法論の探索
オブジェクト指向プログラムのための パターン言語の使用✓ オブジェクト指向プログラミングのための適 切な方法論の探索✓ 旧来の方法論はオブジェクト指向プログラミン グに最適していない
オブジェクト指向プログラムのための パターン言語の使用✓ オブジェクト指向プログラミングのための適 切な方法論の探索✓ 旧来の方法論はオブジェクト指向プログラミン グに最適していない✓ 最も重要な設計事項であるユーザ・インタ フェースに重きを置...
オブジェクト指向プログラムのためのパターン言語の使用
オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ
オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき
オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき
オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか...
オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか...
オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか...
オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか...
時を超えた建築の道    The Timeless Way of          BuildingBy Christopher Alexander
時を超えた建築の道
時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず
時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能 にすること
時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能 にすること✓ パターン言語を建築家と依頼主の共通言語 として機能させることでこれを実現すべき
時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能 にすること✓ パターン言語を建築家と依頼主の共通言語 として機能させることでこれを実現すべき
パターン言語Pattern Language
パターン言語のカテゴリ✓ 町(1-94)自立地域、農業渓谷、田舎町、田 園、小高い場所、環状道路、都市の魔力...✓ 建物(95-204)複合建物、小さな駐車場、通り抜け街路、繋がった建物、座れる階段...✓ 施工(205-253)生活空間に従...
パターン言語
パターン言語✓ パターン:ある形態を生み出すためのルール
パターン言語✓ パターン:ある形態を生み出すためのルール✓ 言語:様々な大きさ・種類の部品が有機的に 繋がることによって多様な意味が生まれる構造
パターン言語✓ パターン:ある形態を生み出すためのルール✓ 言語:様々な大きさ・種類の部品が有機的に 繋がることによって多様な意味が生まれる構造✓ パターン言語:建築において繰り返し登場する形を生み出すルールを、言語的な構造として表現したもの
パターン言語のカテゴリ✓ 町(1-94)自立地域、農業渓谷、田舎町、田 園、小高い場所、環状道路、都市の魔力...✓ 建物(95-204)複合建物、小さな駐車場、通り抜け街路、繋がった建物、座れる階段...✓ 施工(205-253)生活空間に従...
パターン言語     抽象                                                   「町」    (戦術タクティクス)パターン言語                                   ...
パターン?What is Pattern?
時を超えた建築の道✓ 依頼主が望む建築をどのようにすべきかを一 番理解しているのは、本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能に すること✓ パターン言語を建築家と依頼主の共通言語と して機能させることでこれを実現すべき
オブジェクト指向プログラムのための パターン言語の使用✓ 利用者が望むプログラムをどのようにすべき かを一番理解しているのは、利用者自身のはず✓ プログラマの役割は、利用者を設計に参加可 能にすること✓ パターン言語をプログラマと利用者の共通言...
オブジェクト指向における再利用のためのデザインパターン✓   Abstract Factory          ✓   Decorator✓   Adapter                   ✓   Facade✓   Bridge  ...
オブジェクト指向における再利用のための   パターン言語のカテゴリの一つデザインパターン✓   Abstract Factory          ✓   Decorator✓   Adapter                   ✓   F...
オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
オブジェクト指向プログラムの   完全なパターン言語  A Pattern Language for OOP
オブジェクト指向プログラムの  GoF本の現在の立ち位置とは   完全なパターン言語      ちょっと違う   A Pattern Language For OOP
オブジェクト指向プログラムの どこへいってしまったんだろう?   完全なパターン言語   A Pattern Language For OOP
パターン言語の行方Where did a pattern language go?
ヒント
ヒント✓ パターンの後にKent Beckが生み 出したもの
ヒント✓ パターンの後にKent Beckが生み 出したもの✓ 利用者の設計への関与を促すもの
ヒント✓ パターンの後にKent Beckが生み 出したもの✓ 利用者の設計への関与を促すもの✓ まるでパターンで構成されたパター ン言語のように、形を生み出すルー ルを一定の形式でまとめたもの
エクストリーム プログラミング   eXtreme Programming
eXtreme Programming
eXtreme Programming✓ 5 個の価値✓ 14 個の原則✓ 14 個の基礎プラクティス✓ 11 個の応用プラクティス
eXtreme Programming     抽象            「価値」    (戦術タクティクス)エクストリーム                   「原則」プログラミング     具体    (戦略ストラテジー)     「プラ...
eXtreme Programming     抽象            「価値」    (戦術タクティクス)   とても良く似ているエクストリーム                   「原則」プログラミング     具体    (戦略ストラ...
伏線foreshadowing
パターン コミュニティ   Hillside Group
活動の記録Pattern Language of Program Design
開発プロセスの生成的  パターン言語A Generative Development - Process Pattern Language  By James O. Coplien
開発プロセスの生成的パターン言語
開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ
開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ✓ 組織は市場に従う
開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ✓ 組織は市場に従う✓ 開発者がプロセスをコントロールする
開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ✓ 組織は市場に従う✓ 開発者がプロセスをコントロールする✓ 顧客を引き込め...etc
開発プロセスの生成的パターン言語
開発プロセスの生成的パターン言語
PLoPがXPを生んだ XP is a Pattern Language too.
XPとパターン                 Ralph Johnsonの見解http://capsctrl.que.jp/kdmsnr/wiki/transl/?UsingPatternLanguagesForOOP
XPには「信頼性」や「理解容易性」に直接関連するパターンが無いにも関わらず、「プラクティス全体」が結びついて、信頼が高く理解が容易なシステムを生成してしまいます。
…パターン同様、一つ一つのプラクティスには名前があり、それ自身を学ぶことができます。パターン同様、プラクティス全体が結びつくことで、個々の単純な足し合わせよりも大きな効果が得られるのです。…
…結論としての私の意見は、XPはAlexanderスタイルの開発をソフトウェアにどうやって適応するかを示す、ソフトウェアのためのパターン言語である、というものです
パターン・ムーブメントから      アジャイル・ムーブメントへ               平鍋さんによる解説http://blogs.itmedia.co.jp/hiranabe/2005/10/post_dc1e.html
パターン・ムーブメントからアジャイル・ムーブメントへ  From Pattern To Agile
オブジェクト指向プログラムの   完全なパターン言語  A Pattern Language for OOP
パターンとは Pattern is
パターン言語の全体像    抽象    (戦術タクティクス)パターン言語    具体    (戦略ストラテジー)
Implementation Patterns  Kent Beck待望の新刊
Implementation Patterns  なぜ今パターンなのか?
A Short Introduction To  Pattern Language     Smalltalk Report, Feb, 1993       By Kent Beck
発想の原点Origin Of Idea
コードに込められたプログラマの意図をどうやって  それを利用する人に  伝えることが出来るか
一つの答えOne Answer
文芸的プログラミング Literate Programming
プログラミングは  芸術であり 文学でもある
文学であるということは人のためのコードを書く   ということ
問題点Problem
特別なシステムを使うとなると   その分の負荷がプログラマにかかってしまう
構造が直線的であるため複雑で多層な構造の情報を  表現するのが難しい
http://noplans.org/product/t-shirt/
時を超えた建築の道    The Timeless Way of          BuildingBy Christopher Alexander
確認Point
発想の原点Origin Of Idea
コードに込められたプログラマの意図をどうやって  それを利用する人に  伝えることが出来るか
Implementation Patterns    何故書かれたのか?
Implementation Patterns     何故重要なのか?
This is a book about programming -     specifically, about programmingso other people can understand your code.    本書はプログラ...
Dave Thomas says...
ソフトウェアエンジニアリングという言葉はありません.       少なくともまだないです. これ以上ないところまで削るのがエンジニアリング.  これ以上削れないところまで削るということは    どこまで削るとそれが壊れてしまうか      わか...
僕らがしているのは プログラミング
大切にしなければいけないのは プログラミングという作業    そしてコード
それらを大切にするための   具体的な方法論
...a programmer’s job is too communicatewith other programmers, not just a machine.    Programming, then, is a human task ...
Implementation Patterns  読んでみると良いと思う
それともう一つ... One more thing...
パターン言語の性質Element of Pattern Language
パターン言語の性質✓ 利用者が開発者でもあることを許容する✓ そのための利用者側の負荷を低減する✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意 味を生み出せること
パターン言語の性質✓ プログラマにオープンであり✓ そのための利用者側の負荷を低減する✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意 味を生み出せること
パターン言語の性質✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意 味を生み出せること
パターン言語の性質✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 豊富なライブラリを備えていて✓ それらの有機的な結びつきにより多様な意 味を生み出せること
パターン言語の性質✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 豊富なライブラリを備えていて✓ 動的で柔軟な繋がりによって、それらが多様な意味を持ちうる
どうみてもRubyです
パターン言語とRuby Ruby As Pattern Language
きっかけ
Design Patterns In Ruby
デザインパターンを  Rubyで
だけでなく
Rubyならではの パターンの探索 Patterns For Ruby
Patterns For Ruby
Patterns For Ruby✓ DSL
Patterns For Ruby✓ DSL✓ メタプログラミング
Patterns For Ruby✓ DSL✓ メタプログラミング✓ 設定より規約
ドメイン特化言語Domain Specific Language
特定の問題領域の解決に特化してデザインされた言語
class CreateEvents < ActiveRecord::Migration def self.up   create_table :events do ¦t¦    t.string :title    t.string :url...
class Manager < ActiveRecord::Base belongs_to :department has_one :office has_many :committeesend
ドメイン特化言語
ドメイン特化言語✓ 問題に対して言語を最適化するアプローチ
ドメイン特化言語✓ 問題に対して言語を最適化するアプローチ✓ 問題を利用する人のわかる言葉で
ドメイン特化言語✓ 問題に対して言語を最適化するアプローチ✓ 問題を利用する人のわかる言葉で✓ RubyはDSLの良いプラットフォーム
メタプログラミング Meta Programming
メタプログラミングでオブジェクトを柔軟に拡張するということ
class BankAccount attr_accessor :balance def initialize(opning_balance)  @balance = opning_balance endend
class Car extend Forwardable def_deligators :@engine, :start, :stop def initialize  @engine = Engine.new endend
メタプログラミングの利用
メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ
メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける
メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける✓ Rubyはメタプログラミングをしやすい
DSL等で言語を 利用者の思考に近づけていく試み
パターン言語で 技術を人の側に近づけていく試み
本質的には同じ
というよりもDSLはパターン言語の   可能性の一つ
RubyはDSLの良い プラットフォーム
Rubyが海外のアジャイルな人たちの間で盛り上がった理由
Rubyとアジャイルな開発が 相性が良い理由
結論
それともう一つ... One more thing...
最後に
アジャイル系の勉強会しませんか?How about workshop about agile together?
アジャイル系の勉強会しませんか?How about workshop about agile together?
一緒にやれると 嬉しいです
2008-03-19(水); Apple Store Sapporo                                         Ruby Sapporo Night vol.5何故そんなにもImplementationPa...
ご清聴 ありがとうございました
何かご質問は?
Why-is-ImplementationPattterns-important-so-much
Upcoming SlideShare
Loading in …5
×

Why-is-ImplementationPattterns-important-so-much

2,852 views

Published on

Ruby Sapporo Night Vol.5

Published in: Business, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,852
On SlideShare
0
From Embeds
0
Number of Embeds
128
Actions
Shares
0
Downloads
28
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Why-is-ImplementationPattterns-important-so-much

  1. 1. 2008-03-19(水); Apple Store Sapporo Ruby Sapporo Night vol.5何故そんなにもImplementationPatternsは重要なのか Pattern is a key connects Ruby and Agile 日本Rubyの会 / Ruby札幌 島田浩二 snoozer.05@ruby-sapporo.org
  2. 2. Our initial success using a pattern language for user interface design has left us quit enthusiastic aboutpossibilities for computer users designing and programming their own applications. パターン言語の使用が最初に成功したとき、 コンピューター・ユーザーたちが 自分自身のアプリケーションを自ら設計し、プログラミングするという可能性があるのだということに、 我々は大変熱狂した - Kent Beck, Ward Cunningham「オブジェクト指向プログラムのためのパターン言語の使用」
  3. 3. しまだこうじhttp://iddy.jp/profile/snoozer05✓ ふつうのフリーランスプログラマ✓ 日本Rubyの会 ✓ Ruby札幌 運営 ✓ RubyKaigi 2007 当日スタッフ ✓ るびま、るりま✓ プログラミングの楽しさを共有したい✓ 自分の知らないコトやヒトに出会いたい
  4. 4. しまだこうじhttp://iddy.jp/profile/snoozer05✓ Implementation Patterns Group ✓ Implementation PatternsとSBPPを味わ うためのグループです http://implementationpatterns.g.hatena.ne.jp/
  5. 5. Implementation Patterns
  6. 6. Implementation Patterns Kent Beck待望の新刊
  7. 7. Kent Beckhttp://www.flickr.com/photos/improveit/1574912686/
  8. 8. Kent Beck ✓ パターンhttp://www.flickr.com/photos/improveit/1574912686/
  9. 9. Kent Beck ✓ パターン ✓ CRCカードhttp://www.flickr.com/photos/improveit/1574912686/
  10. 10. Kent Beck ✓ パターン ✓ CRCカード ✓ XPhttp://www.flickr.com/photos/improveit/1574912686/
  11. 11. Kent Beck ✓ パターン ✓ CRCカード ✓ XP ✓ TDDhttp://www.flickr.com/photos/improveit/1574912686/
  12. 12. Kent Beck ✓ パターン ✓ CRCカード ✓ XP ✓ TDD ✓ JUnithttp://www.flickr.com/photos/improveit/1574912686/
  13. 13. キーマン(鍵的じゃない意味で)
  14. 14. Implementation Patterns Kent Beck待望の新刊
  15. 15. パターン?What is Pattern?
  16. 16. オブジェクト指向における再利用のためのデザインパターン
  17. 17. オブジェクト指向における再利用のためのデザインパターン✓ Abstract Factory ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
  18. 18. オブジェクト指向における再利用のためのデザインパターン✓ Abstract Factory ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
  19. 19. パターン?What is Pattern?
  20. 20. http://noplans.org/product/t-shirt/
  21. 21. パターンの起源 Origin of Pattern
  22. 22. オブジェクト指向プログラムのためのパターン言語の使用 Using Pattern Languages for Object-Oriented ProgramBy Kent Beck, Ward Cunningham
  23. 23. 角征典さんによる翻訳http://capsctrl.que.jp/kdmsnr/wiki/transl/?UsingPatternLanguagesForOOP
  24. 24. オブジェクト指向プログラムのためのパターン言語の使用
  25. 25. オブジェクト指向プログラムのための パターン言語の使用✓ オブジェクト指向プログラミングのための適 切な方法論の探索
  26. 26. オブジェクト指向プログラムのための パターン言語の使用✓ オブジェクト指向プログラミングのための適 切な方法論の探索✓ 旧来の方法論はオブジェクト指向プログラミン グに最適していない
  27. 27. オブジェクト指向プログラムのための パターン言語の使用✓ オブジェクト指向プログラミングのための適 切な方法論の探索✓ 旧来の方法論はオブジェクト指向プログラミン グに最適していない✓ 最も重要な設計事項であるユーザ・インタ フェースに重きを置いた方法論もない
  28. 28. オブジェクト指向プログラムのためのパターン言語の使用
  29. 29. オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ
  30. 30. オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき
  31. 31. オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき
  32. 32. オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry
  33. 33. オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry✓ それパターン言語で出来るよ!
  34. 34. オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry✓ それパターン言語で出来るよ!✓ 実際にやってみた
  35. 35. オブジェクト指向プログラムのための パターン言語の使用✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によっ て設計され、作られるべき✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry✓ それパターン言語で出来るよ!✓ 実際にやってみた
  36. 36. 時を超えた建築の道 The Timeless Way of BuildingBy Christopher Alexander
  37. 37. 時を超えた建築の道
  38. 38. 時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず
  39. 39. 時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能 にすること
  40. 40. 時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能 にすること✓ パターン言語を建築家と依頼主の共通言語 として機能させることでこれを実現すべき
  41. 41. 時を超えた建築の道✓ 依頼主が望む建築を一番理解しているのは、 本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能 にすること✓ パターン言語を建築家と依頼主の共通言語 として機能させることでこれを実現すべき
  42. 42. パターン言語Pattern Language
  43. 43. パターン言語のカテゴリ✓ 町(1-94)自立地域、農業渓谷、田舎町、田 園、小高い場所、環状道路、都市の魔力...✓ 建物(95-204)複合建物、小さな駐車場、通り抜け街路、繋がった建物、座れる階段...✓ 施工(205-253)生活空間に従う構造、無駄の無い構造、ボックス柱、さわれる花... - http://gc.sfc.keio.ac.jp/class/2005_22687/slides/10/6.html
  44. 44. パターン言語
  45. 45. パターン言語✓ パターン:ある形態を生み出すためのルール
  46. 46. パターン言語✓ パターン:ある形態を生み出すためのルール✓ 言語:様々な大きさ・種類の部品が有機的に 繋がることによって多様な意味が生まれる構造
  47. 47. パターン言語✓ パターン:ある形態を生み出すためのルール✓ 言語:様々な大きさ・種類の部品が有機的に 繋がることによって多様な意味が生まれる構造✓ パターン言語:建築において繰り返し登場する形を生み出すルールを、言語的な構造として表現したもの
  48. 48. パターン言語のカテゴリ✓ 町(1-94)自立地域、農業渓谷、田舎町、田 園、小高い場所、環状道路、都市の魔力...✓ 建物(95-204)複合建物、小さな駐車場、通り抜け街路、繋がった建物、座れる階段...✓ 施工(205-253)生活空間に従う構造、無駄の無い構造、ボックス柱、さわれる花... - http://gc.sfc.keio.ac.jp/class/2005_22687/slides/10/6.html
  49. 49. パターン言語 抽象 「町」 (戦術タクティクス)パターン言語 「建物」 具体 「施工」 (戦略ストラテジー) パターンのカテゴリ パターン - http://gc.sfc.keio.ac.jp/class/2005_22687/slides/10/6.html
  50. 50. パターン?What is Pattern?
  51. 51. 時を超えた建築の道✓ 依頼主が望む建築をどのようにすべきかを一 番理解しているのは、本来依頼主自身のはず✓ 建築家の役割は、依頼主を設計に参加可能に すること✓ パターン言語を建築家と依頼主の共通言語と して機能させることでこれを実現すべき
  52. 52. オブジェクト指向プログラムのための パターン言語の使用✓ 利用者が望むプログラムをどのようにすべき かを一番理解しているのは、利用者自身のはず✓ プログラマの役割は、利用者を設計に参加可 能にすること✓ パターン言語をプログラマと利用者の共通言 語として機能させることでこれを実現すべき
  53. 53. オブジェクト指向における再利用のためのデザインパターン✓ Abstract Factory ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
  54. 54. オブジェクト指向における再利用のための パターン言語のカテゴリの一つデザインパターン✓ Abstract Factory ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ カテゴリを構成するパターン Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
  55. 55. オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
  56. 56. オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
  57. 57. オブジェクト指向プログラムの 完全なパターン言語 A Pattern Language for OOP
  58. 58. オブジェクト指向プログラムの GoF本の現在の立ち位置とは 完全なパターン言語 ちょっと違う A Pattern Language For OOP
  59. 59. オブジェクト指向プログラムの どこへいってしまったんだろう? 完全なパターン言語 A Pattern Language For OOP
  60. 60. パターン言語の行方Where did a pattern language go?
  61. 61. ヒント
  62. 62. ヒント✓ パターンの後にKent Beckが生み 出したもの
  63. 63. ヒント✓ パターンの後にKent Beckが生み 出したもの✓ 利用者の設計への関与を促すもの
  64. 64. ヒント✓ パターンの後にKent Beckが生み 出したもの✓ 利用者の設計への関与を促すもの✓ まるでパターンで構成されたパター ン言語のように、形を生み出すルー ルを一定の形式でまとめたもの
  65. 65. エクストリーム プログラミング eXtreme Programming
  66. 66. eXtreme Programming
  67. 67. eXtreme Programming✓ 5 個の価値✓ 14 個の原則✓ 14 個の基礎プラクティス✓ 11 個の応用プラクティス
  68. 68. eXtreme Programming 抽象 「価値」 (戦術タクティクス)エクストリーム 「原則」プログラミング 具体 (戦略ストラテジー) 「プラクティス」
  69. 69. eXtreme Programming 抽象 「価値」 (戦術タクティクス) とても良く似ているエクストリーム 「原則」プログラミング 具体 (戦略ストラテジー) 「プラクティス」
  70. 70. 伏線foreshadowing
  71. 71. パターン コミュニティ Hillside Group
  72. 72. 活動の記録Pattern Language of Program Design
  73. 73. 開発プロセスの生成的 パターン言語A Generative Development - Process Pattern Language By James O. Coplien
  74. 74. 開発プロセスの生成的パターン言語
  75. 75. 開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ
  76. 76. 開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ✓ 組織は市場に従う
  77. 77. 開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ✓ 組織は市場に従う✓ 開発者がプロセスをコントロールする
  78. 78. 開発プロセスの生成的パターン言語✓ スケジュールの大きさを決めよ✓ 組織は市場に従う✓ 開発者がプロセスをコントロールする✓ 顧客を引き込め...etc
  79. 79. 開発プロセスの生成的パターン言語
  80. 80. 開発プロセスの生成的パターン言語
  81. 81. PLoPがXPを生んだ XP is a Pattern Language too.
  82. 82. XPとパターン Ralph Johnsonの見解http://capsctrl.que.jp/kdmsnr/wiki/transl/?UsingPatternLanguagesForOOP
  83. 83. XPには「信頼性」や「理解容易性」に直接関連するパターンが無いにも関わらず、「プラクティス全体」が結びついて、信頼が高く理解が容易なシステムを生成してしまいます。
  84. 84. …パターン同様、一つ一つのプラクティスには名前があり、それ自身を学ぶことができます。パターン同様、プラクティス全体が結びつくことで、個々の単純な足し合わせよりも大きな効果が得られるのです。…
  85. 85. …結論としての私の意見は、XPはAlexanderスタイルの開発をソフトウェアにどうやって適応するかを示す、ソフトウェアのためのパターン言語である、というものです
  86. 86. パターン・ムーブメントから アジャイル・ムーブメントへ 平鍋さんによる解説http://blogs.itmedia.co.jp/hiranabe/2005/10/post_dc1e.html
  87. 87. パターン・ムーブメントからアジャイル・ムーブメントへ From Pattern To Agile
  88. 88. オブジェクト指向プログラムの 完全なパターン言語 A Pattern Language for OOP
  89. 89. パターンとは Pattern is
  90. 90. パターン言語の全体像 抽象 (戦術タクティクス)パターン言語 具体 (戦略ストラテジー)
  91. 91. Implementation Patterns Kent Beck待望の新刊
  92. 92. Implementation Patterns なぜ今パターンなのか?
  93. 93. A Short Introduction To Pattern Language Smalltalk Report, Feb, 1993 By Kent Beck
  94. 94. 発想の原点Origin Of Idea
  95. 95. コードに込められたプログラマの意図をどうやって それを利用する人に 伝えることが出来るか
  96. 96. 一つの答えOne Answer
  97. 97. 文芸的プログラミング Literate Programming
  98. 98. プログラミングは 芸術であり 文学でもある
  99. 99. 文学であるということは人のためのコードを書く ということ
  100. 100. 問題点Problem
  101. 101. 特別なシステムを使うとなると その分の負荷がプログラマにかかってしまう
  102. 102. 構造が直線的であるため複雑で多層な構造の情報を 表現するのが難しい
  103. 103. http://noplans.org/product/t-shirt/
  104. 104. 時を超えた建築の道 The Timeless Way of BuildingBy Christopher Alexander
  105. 105. 確認Point
  106. 106. 発想の原点Origin Of Idea
  107. 107. コードに込められたプログラマの意図をどうやって それを利用する人に 伝えることが出来るか
  108. 108. Implementation Patterns 何故書かれたのか?
  109. 109. Implementation Patterns 何故重要なのか?
  110. 110. This is a book about programming - specifically, about programmingso other people can understand your code. 本書はプログラミングについての書籍だ. 具体的には 他人があなたのコードを理解できるように プログラミングするための書籍だ - Kent Beck「Implementation Patterns」
  111. 111. Dave Thomas says...
  112. 112. ソフトウェアエンジニアリングという言葉はありません. 少なくともまだないです. これ以上ないところまで削るのがエンジニアリング. これ以上削れないところまで削るということは どこまで削るとそれが壊れてしまうか わかっているということです. まだソフトウェアに関しては 我々はそのレベルまで達していないんです. 達していないから、まだソフトウェアエンジニアリングという言葉は嘘である. 我々がしているのはコーディングです.
  113. 113. 僕らがしているのは プログラミング
  114. 114. 大切にしなければいけないのは プログラミングという作業 そしてコード
  115. 115. それらを大切にするための 具体的な方法論
  116. 116. ...a programmer’s job is too communicatewith other programmers, not just a machine. Programming, then, is a human task done by humans for humans.Oh, and writing good code at the same time. プログラミングは、マシンにだけではなく、 自分以外のプログラマに向けて書かれるべきなんだ。 そうすることで、プログラミングは 人による、人のための、人の仕事になる。 もちろん、それは良いコードにもなっているんだよ。 - Kent Beck「Implementation Patterns」
  117. 117. Implementation Patterns 読んでみると良いと思う
  118. 118. それともう一つ... One more thing...
  119. 119. パターン言語の性質Element of Pattern Language
  120. 120. パターン言語の性質✓ 利用者が開発者でもあることを許容する✓ そのための利用者側の負荷を低減する✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意 味を生み出せること
  121. 121. パターン言語の性質✓ プログラマにオープンであり✓ そのための利用者側の負荷を低減する✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意 味を生み出せること
  122. 122. パターン言語の性質✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意 味を生み出せること
  123. 123. パターン言語の性質✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 豊富なライブラリを備えていて✓ それらの有機的な結びつきにより多様な意 味を生み出せること
  124. 124. パターン言語の性質✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 豊富なライブラリを備えていて✓ 動的で柔軟な繋がりによって、それらが多様な意味を持ちうる
  125. 125. どうみてもRubyです
  126. 126. パターン言語とRuby Ruby As Pattern Language
  127. 127. きっかけ
  128. 128. Design Patterns In Ruby
  129. 129. デザインパターンを Rubyで
  130. 130. だけでなく
  131. 131. Rubyならではの パターンの探索 Patterns For Ruby
  132. 132. Patterns For Ruby
  133. 133. Patterns For Ruby✓ DSL
  134. 134. Patterns For Ruby✓ DSL✓ メタプログラミング
  135. 135. Patterns For Ruby✓ DSL✓ メタプログラミング✓ 設定より規約
  136. 136. ドメイン特化言語Domain Specific Language
  137. 137. 特定の問題領域の解決に特化してデザインされた言語
  138. 138. class CreateEvents < ActiveRecord::Migration def self.up create_table :events do ¦t¦ t.string :title t.string :url t.datetime :deadline t.datetime :publish_at t.timestamp end end def self.down drop_table :events endend
  139. 139. class Manager < ActiveRecord::Base belongs_to :department has_one :office has_many :committeesend
  140. 140. ドメイン特化言語
  141. 141. ドメイン特化言語✓ 問題に対して言語を最適化するアプローチ
  142. 142. ドメイン特化言語✓ 問題に対して言語を最適化するアプローチ✓ 問題を利用する人のわかる言葉で
  143. 143. ドメイン特化言語✓ 問題に対して言語を最適化するアプローチ✓ 問題を利用する人のわかる言葉で✓ RubyはDSLの良いプラットフォーム
  144. 144. メタプログラミング Meta Programming
  145. 145. メタプログラミングでオブジェクトを柔軟に拡張するということ
  146. 146. class BankAccount attr_accessor :balance def initialize(opning_balance) @balance = opning_balance endend
  147. 147. class Car extend Forwardable def_deligators :@engine, :start, :stop def initialize @engine = Engine.new endend
  148. 148. メタプログラミングの利用
  149. 149. メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ
  150. 150. メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける
  151. 151. メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける✓ Rubyはメタプログラミングをしやすい
  152. 152. DSL等で言語を 利用者の思考に近づけていく試み
  153. 153. パターン言語で 技術を人の側に近づけていく試み
  154. 154. 本質的には同じ
  155. 155. というよりもDSLはパターン言語の 可能性の一つ
  156. 156. RubyはDSLの良い プラットフォーム
  157. 157. Rubyが海外のアジャイルな人たちの間で盛り上がった理由
  158. 158. Rubyとアジャイルな開発が 相性が良い理由
  159. 159. 結論
  160. 160. それともう一つ... One more thing...
  161. 161. 最後に
  162. 162. アジャイル系の勉強会しませんか?How about workshop about agile together?
  163. 163. アジャイル系の勉強会しませんか?How about workshop about agile together?
  164. 164. 一緒にやれると 嬉しいです
  165. 165. 2008-03-19(水); Apple Store Sapporo Ruby Sapporo Night vol.5何故そんなにもImplementationPatternsは重要なのか Pattern is a key connects Ruby and Agile 日本Rubyの会 / Ruby札幌 島田浩二 snoozer.05@ruby-sapporo.org
  166. 166. ご清聴 ありがとうございました
  167. 167. 何かご質問は?

×