GoFはどこへ消えた?
一時期プログラミングのデザインパターンというものが大流行しましたが、現在ではどのように評価されているのでしょうか?
https://jp.quora.com/%E4%B8%80%E6%99%82%E6%9C%9F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%A8%E3%81%84%E3%81%86%E3%82%82
いわゆるGoFの話だとおもうけど,どうもならんよ.
物理学におけるニュートン力学と同じで,OOPの根幹を成すものの一つとして今も変わらずそこにある.*1
goto文不要論も広く認められて,それ以降のほとんどの言語から goto文がなくなった.今ではそれが当たり前なので,goto文が不要かどうかは話題に上らなくなった.それはgoto文不要論が正しいと評価されたからであって間違っていたからではない.多くの言語やライブラリにGoFのパターンが取り入れられていたとしても,やはり同じ事が言える.
quickソートくらいは標準ライブラリで提供されるようになり,自分で作ることはほとんどなくなった.それはquickソートが広く認められあまねく普及しただけで,quickソートの意義が失われたわけでもましてや時代遅れになったわけでもない.ましてやソートに関して議論するプログラマーがquickソートも知らないとかありえない.技術者がより進んだ技術を求めるなら,その元となった基礎技術を知らないことなどあろうか.
オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方
- 作者: Sandi Metz,?山泰基
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/02
- メディア: 大型本
- この商品を含むブログ (6件) を見る
設計(デザイン)パターン
原則に加え、オブジェクト指向設計には「パターン」もあります。いわゆるGang of Four(GoF)と呼ばれる、Erich Gamma、Richard Helm、Ralph Johnson、そしてJon Vlissides が、パターンについての画期的な作品を1995年に書きました。彼らの『Design Patterns』という本では、パターンは次のように説明されています。
「オブジェクト指向ソフトウェア設計において遭遇するさまざまな問題に対して、簡単でかつ明瞭な解を与える」ものであり「設計プロダクトの柔軟性、モジュール性、再利用性、および理解のしやすさをより高める」ために使えるものである注4。
デザインパターンの概念はとてつもなく強力です。一般的に共通する問題に同じ名前をつけ同じ手法で解決することで、あいまいなことが明確になります。デザインパターンによってプログラマー達は世代を問わず、コミュニケーションと共同作業ができるようになったのです。
パターンはすべての設計者の道具箱に入っています。よく知られたパターンそれぞれが、その解決しようとする問題に対するほぼ完璧なオープンソースの解決法です。しかし、パターンの人気が出たことで、初心者が一種の乱用をするようになりました。熱意があり余るあまりに、まったく正しいパターンを間違った問題に適用してしまうといったことが起きたのです。パターンを間違って適用すれば、当然、複雑で混乱を招くコードがつくられます。パターンそのものに責任はありません。道具を、その使われ方で非難しても意味がなく、使うほうが道具をマスターしなければならないだけのことです。
本書はパターンについての本ではありません。しかし、パターンを理解するための準備と、適切に選び使うための知識は身につけることができるでしょう。
完全に同意.*2
自動車におけるシートベルト(やエアバッグ)みたいなもので、有効性が認められたから「あって当然」みたいなことになってる.
最新の安全装備の流行は衝突軽減ブレーキや自動運転かもしれないが,シートベルトは今だ現役バリバリの技術だし,古くさい技術が時代遅れでも廃れたわけでもない.今現在も広い分野で標準採用されてるってことは,そういうことだ.
http://b.hatena.ne.jp/entry/s/jp.quora.com/%E4%B8%80%E6%99%82%E6%9C%9F%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%A8%E3%81%84%E3%81%86%E3%82%82
- id:otchy210 流行が終わったという見方は出来るけど、フレームワークに巻き取られて概念は生きていて、フレームワークのベストプラクティスに従うと結局パターンを使っている、みたいな状況になっていると感じる。
- id:fritzbeep むしろ、当たり前になりすぎて強調されなくなっただけだと思う。死んだパターンもあるように見えるけど、生き残ってるのもたくさんある
- id:deep_one 類型をまとめることには常に価値がある。「こういうことをしたいと思った時にこういう解決をした人がいるんだな」というのは参考になる。丸写ししようとして失敗した人が酷評するだけ。
- id:gabari あえていうと、フレームワークとか標準ライブラリを作る際には未だに有用だと思う。そんな人がどんだけ居るのか、と言われると微妙だけど。
- id:cl-gaku あのパターンがこんなにきれいに実装されてる、と思うことが多くなってきてる気がする。意識せずとも恩恵を受けられるようになってきてる。
- id:infobloga デザインパターンは、書いてれば自然に出てくるものだけど、知ってることで、付けるべき/避けるべき、クラス名とかメソッド名が分かる。その意味で必須の知識。
- id:dalmacija コードの世界の流行りが「廃れる」と思う人は大体見る目がない。理解が進んでかたちが変わり、そうとは呼ばれなくなるケースが多い。挫折することもあるけど
かるく検索してみた.
"Design pattern" だけでも,ざっとこんな感じ.「なんたらパターン」の奴も含めたらもっと増える.
この中の何割かはGoFのデザインパターンそのままではないだろうが,GoFのデザインパターンと無関係だと主張するものは少ないだろう.
- 作者: Erich Helm, Richard Johnson, Ralph Vlissides, John Gamma
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 1994/10/31
- メディア: ハードカバー
- クリック: 6回
- この商品を含むブログ (17件) を見る
- 作者: Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
- 出版社/メーカー: Pearson Education India
- 発売日: 2015/12/01
- メディア: ペーパーバック
- この商品を含むブログを見る
Head First Design Patterns: A Brain-Friendly Guide
- 作者: Eric Freeman,Elisabeth Robson,Bert Bates,Kathy Sierra
- 出版社/メーカー: O'Reilly Media
- 発売日: 2004/11/04
- メディア: ペーパーバック
- クリック: 11回
- この商品を含むブログ (7件) を見る
Design Patterns Explained: A New Perspective on Object-Oriented Design (Software Patterns Series)
- 作者: Alan Trott, James R. Shalloway
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2004/10/12
- メディア: ペーパーバック
- クリック: 2回
- この商品を含むブログ (2件) を見る
Design Patterns in Ruby (Addison-Wesley Professional Ruby Series)
- 作者: Russ Olsen
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2007/12/10
- メディア: ハードカバー
- クリック: 12回
- この商品を含むブログ (5件) を見る
Design Patterns in PHP and Laravel
- 作者: Kelt Dockins
- 出版社/メーカー: Apress
- 発売日: 2016/12/28
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Fedor G. Pikus
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/01/30
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Primoz Gabrijelcic
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/02/27
- メディア: ペーパーバック
- この商品を含むブログを見る
Hands-On Design Patterns with Kotlin
- 作者: Alexey Soshin
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/06/15
- メディア: ペーパーバック
- この商品を含むブログを見る
Mastering Python Design Patterns
- 作者: Kamon Ayeva,Sakis Kasampalis
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/08/31
- メディア: ペーパーバック
- この商品を含むブログを見る
Practical Python Design Patterns: Pythonic Solutions to Common Problems
- 作者: Wessel Badenhorst
- 出版社/メーカー: Apress
- 発売日: 2017/10/20
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Mario Castro Contreras
- 出版社/メーカー: Packt Publishing
- 発売日: 2017/02/24
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Gaurav Aroraa,Jeffrey Chilberto
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/07/09
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: Tomas Corral
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/05/09
- メディア: Kindle版
- この商品を含むブログを見る
Django Design Patterns and Best Practices - Second Edition
- 作者: Arun Ravindran
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/05/31
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Mateusz Grzesiukiewicz
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/09/29
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Florent Vilmart,Giordano Scalzo,Sergio De Simone
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/12/24
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Mario Casciaro,Luciano Mammino
- 出版社/メーカー: Packt Publishing
- 発売日: 2016/07/18
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Salvatore Agostino Romeo
- 出版社/メーカー: Independently published
- 発売日: 2018/09/15
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Paul Halliday
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/03/14
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Sean Keery,Marcus Young
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/05/09
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: Todd Morley
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2020/08/13
- メディア: ハードカバー
- この商品を含むブログを見る
Angular Design Patterns: Implement the Gang of Four patterns in your apps with Angular
- 作者: Mathieu Nayrolles
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/07/30
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Ryan Lemmer
- 出版社/メーカー: Packt Publishing
- 発売日: 2015/11/06
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Ivan Nikolov
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/04/09
- メディア: ペーパーバック
- この商品を含むブログを見る
Design Patterns in Modern C++: Reusable Approaches for Object-Oriented Software Design
- 作者: Dmitri Nesteruk
- 出版社/メーカー: Apress
- 発売日: 2018/04/19
- メディア: ペーパーバック
- この商品を含むブログを見る
Making Embedded Systems: Design Patterns for Great Software
- 作者: Elecia White
- 出版社/メーカー: O'Reilly Media
- 発売日: 2011/11/12
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Adam Freeman
- 出版社/メーカー: Apress
- 発売日: 2015/01/13
- メディア: ペーパーバック
- この商品を含むブログを見る
Learning JavaScript Design Patterns: A JavaScript and jQuery Developer's Guide
- 作者: Addy Osmani
- 出版社/メーカー: O'Reilly Media
- 発売日: 2012/08/30
- メディア: ペーパーバック
- この商品を含むブログを見る
Pro JavaScript Design Patterns (Expert's Voice in Web Development)
- 作者: Dustin Diaz,Ross Harmes
- 出版社/メーカー: Apress
- 発売日: 2008/01/01
- メディア: ペーパーバック
- 購入: 1人 クリック: 68回
- この商品を含むブログ (5件) を見る
The JavaScript Design Patterns and Best Practices Collection (English Edition)
- 作者: Ben Fhala,Simon Timms,Ved Antani
- 出版社/メーカー: Packt Publishing
- 発売日: 2017/01/31
- メディア: Kindle Edition with Audio/Video
- この商品を含むブログを見る
- 作者: David Baron
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/03/29
- メディア: ペーパーバック
- この商品を含むブログを見る
- 作者: Dr. Edward Lavieri
- 出版社/メーカー: Packt Publishing
- 発売日: 2019/07/09
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: Dusty Phillips
- 出版社/メーカー: Packt Publishing
- 発売日: 2018/10/30
- メディア: ペーパーバック
- この商品を含むブログを見る
追記.
分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計
- 作者: Brendan Burns,松浦隼人
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/04/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
和書の方はタイトルに「デザインパターン」を含むが,
Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services
- 作者: Brendan Burns
- 出版社/メーカー: O'Reilly Media
- 発売日: 2018/03/05
- メディア: ペーパーバック
- この商品を含むブログを見る
設計でパターンの本だから当たらずといえど遠からずだが,分散システムに特化していて,GoFではない.
GoFは玉石混淆だったとは言え,広い分野(の基礎)を網羅していたが,こっちは特定領域専用.こういったパターン本もわりとあったりする.*3
- 作者: Mario Casciaro,Luciano Mammino,武舎広幸,阿部和也
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
日本ではオライリーだけど原書は Packt.