Tony Marston is a troll.
He doesn’t understand the difference between a pattern and a methodology. If anyone writes him and says they find patterns useful, he will immediately assume you use patterns as a methodology (like him).
I mean why else would you write an article called “design patterns are dead”.
First a little cliff notes. Tony Marston wrote a full-stack framework for building CRUD applications. The code is mediocre. He did an excellent job cataloging his components into a sort of pattern language others may learn from. He called these “transaction patterns” which I will refer to as “CRUD patterns”.
Each one describes a particular user story in the application, such as listing records. The same things have occurred in my applications, for instance having to let the user re-assign child records when deleting a parent record. So these are indeed patterns.
Then what is my beef?
He repeatedly contradicts himself while spewing biased mis-information. Let me show you exactly what he is doing.
Tony Writes
Because a "transaction" contains elements from a collection of different low-level design patterns it can be said to exist at a higher level. A "transaction pattern" is therefore a method of providing a description of this collection of design patterns which are used to satisfy the requirements of a user transaction.
http://www.tonymarston.net/php-mysql/design-patterns-are-dead.html
[A1] Tony Marston admits CRUD patterns are a way of cataloging a system just at a higher level of abstraction then design patterns. His framework uses them (design patterns and transaction patterns both).
Now here’s what he starts to get on my nerves
Tony Writes:
What you cannot do with Design Patterns
They are supposed to have more than one implementation, with different implementations of the same pattern having something in common with all the others. But if each implementation of a design pattern is supposed to be unique, where exactly is the pattern? If nothing is being shared between one implementation and another, then how can there be a recurring pattern?
Woah woah woah, come on Tony. You know what a pattern is. You wrote another article about just that:
In just another article Tony wrote:
A pattern provides a solution schema rather than a fully-specified artifact or blueprint. You should be able to reuse the solution in many different implementations, but in a way that its essence is still retained. A pattern is a mental building block.
* A pattern addresses a recurring design problem that arises in specific design situations and presents a solution to it.
* Patterns document existing, well-proven design experience.
* Patterns identify and specify abstractions that are above the level of single classes and instances, or of components.
* Patterns provide a common vocabulary and understanding for design principles.
* Patterns are a means of documenting software architectures.
* Patterns support the construction of software with defined properties.
* Patterns help you build complex and heterogeneous software architectures.
* Patterns help you manage software complexity.
Tony continues..
This provides us with the following definition
A pattern for software architecture describes a particular recurring design problem that arises in specific design contexts, and presents a well-proven generic scheme for its solution. The solution scheme is specified by describing its constituent components, their responsibilities and relationships, and the ways in which they collaborate.
http://www.tonymarston.net/php-mysql/design-patterns.html
[A2] In this statement Tony is doing a good job of showing how design patterns are useful because new programmers can learn about why experienced programmers are doing what they do. It provides advanced programmers a means to communicate with each other.
New requirement Tony is inventing that all patterns must meet?
Design patterns meet every one of those requirements he listed, but now all of the sudden he says a “pattern” must meet some new definition of the word “pattern” he just invented….
Tony wrote:What you cannot do with Design Patterns
Patterns or templates are supposed to have the following characteristics
- They are supposed to have more than one implementation, with different implementations of the same pattern having something in common with all the others. But if each implementation of a design pattern is supposed to be unique, where exactly is the pattern? If nothing is being shared between one implementation and another, then how can there be a recurring pattern?
- Parts of the original implementation are supposed to be abstracted out into a pattern which can be reused, thus making all subsequent implementations easier than the first. With software programs the reusable element is program code, but if there is no code which can be shared, if each implementation is unique, then where exactly is the pattern? Where is this reusability? If there is just as much effort required to create all subsequent implementations of a design pattern as there was with the first, then nothing is being reused, nothing is being shared. If that is the case then does a pattern actually exist?
http://www.tonymarston.net/php-mysql/design-patterns-are-dead.html
Then in email Tony Writes:
Something cannot be called a "pattern" or "template" unless it has a element
of re-usability. This requires that subsequent implementations take less
time than the initial implementation. If each implementation of a "design
pattern" takes just as long as the first because there is absolutely nothing
that can be re-used then the use of the term "pattern" is inappropriate.
Why all of the sudden are you adding this new requirement Tony? I wrote him and he provided no rationale justification. I asked him if his CRUD patterns used any design patterns (see A1 – Tony Marston uses design patterns). He said no. I told him about some of my architecture that is similar to his “list 1″ component. I mentioned I dont need List 1 – 10 or whatever because I have hook methods and a plugin architecture using observers (these are both 2 design patterns). He immediately switched into “my code is better than yours” defensive mode and stated about all the hooks he was using in his application. Haha tricked him. So tony here’s my new requirement for your vocabulary:
All hook methods must use bait method to catch a fish variable with the rod and reel component
Pretty silly if we just started adding new requirements for your method to be called a “hook”.
What am I saying here?
They’re just freaking words. Useful terms that establish a vocabulary programmers can use to communicate (see A2 – Tony originally defines a design pattern as a useful vocabulary). But then he feels the right to go off and write an article entitled “Design patterns are dead” and makes wild assertions:
- Design Patterns are the wrong level of abstraction
- What you cannot do with Design Patterns
How can he make such assertions?
Tony Wrote
I have said that I don't use design patterns, and I have given my reasons why. I have also written about CRUD patterns and why, in my opinion, that I think they are better.
I think he’s the only one using “that” logic.
In email Tony wrote
I already used my data dictionary to generate the table
classes from the database schema, so it was then a simple task to include
the facility to generate transactions from predefined transaction patterns.
If you cannot do the same thing with design patterns then this proves that
transaction patterns provide a higher level of reusability and therefore
productivity, which in turn means that transaction patterns are superior to
design patterns. Using that logic, why on earth should I want to use
something which is obviously inferior?
Reading what he wrote is like reading a carpenter’s writing who writes about why a drill is “better” than a saw. They are just different tools. They are not mutually exclusive tools, and in fact they don’t even solve any of the same problems. They don’t even really share a common applicability. So how can one be “better”? They don’t compete. Transaction patterns use design patterns (A1)
Not mutually exclusive!
Since they both solve different problems, I argue that each one is better at something different, at the cost of sucking at everything else. Design patterns excel at being a common vocabulary between programmers. I can talk to anyone else writing Enterprise applications (such as a version control system), and both terms are useful to us. With Tony’s CRUD patterns, I can talk about things at an even higher level, I can talk about specific screens within a CRUD application. But Tony’s CRUD patterns are of no use to me when writing a social network, for example.
So if Tony is going to say his patterns are better than design patterns he should at least state what and why. He does not though. He simply argues the definition of the word “pattern”. In talking with him he says we should not use names of design patterns to name components in our code, because design patterns obviously have no use. Why then would Tony use a “hook” in his code? Is he a programmer or a fisherman?
He is just a troll.
No New Programmers Allowed, E-Douches only
Tony Writes in e-mail:
I consider design patterns to be as much use as a "painting by numbers" kit
for novice artists. How many professional artists do you know who still use
such kits? None! Why? Because once they become proficient they don't need
them, just as proficient cyclists don't need training wheels.
As you can see he flip flops opinions, makes wild assertions, and when asked if he thinks design patterns could help new programmers program better he wrote the previous and following statements, which clearly indicates that he does not want anyone else to learn. My opinion is that he has a superiority complex or does not care that he is spreading mis-information so that he can make sales of his “radicore framework”.
I wrote and Tony replied
> Let's say you went golfing with Tiger Woods (I'm assuming you don't
> golf, if not substitute with some obscure sport like curling). If Tiger
> told you to just step up to the tee and swing, you probably would not
> be able to hit the bar as far him. Golfers have broken down their
> knowledge into patterns, like stance patterns, backswing patterns,
> follow thru patterns, that takes years of education and practice to
> master at his level of expertise.
The trouble is that different practitioners of an art (and programming is an
art, not a science) have different explanations as to what makes them good
at what they do, but what works for one person may not work for another. If
a person does not have the basic talent for an art form to begin with then
it does not matter what technique you try and teach him - he will always be
a failure.
Tony Writes
I certainly would not look at a piece of code and say "This looks pretty. I shall give it a name".
You have already sleighed new programmers entering the field. I am not surprised you would not be interested in analyzing the things you do or why you do them. You have already “mastered” them in your mind.
Tony Marston. Troll.
Ps > this post has been made in satire of his “crazy headlines” writing style. Maybe he should write a pattern on language on this next.
While I can see your points, do you really thing that calling a guy out like this serves anyone? Remember, by arguing with him in public you legitimize him. Best to let these things just die out of their own accord.
I agree, but at least now maybe this will come up when newbies google his credentials, and will think twice before wasting time on his fallacies
I’ve found it best to just ignore him… he seems to like arguing with people even if he is outmatched. I realized a long time ago that no matter what he said, his RADICORE framework was not really a web application framework. It’s meant to manipulate relational data, and is largely an attempt to rewrite something like PHPMyAdmin while trying to pass it off as something comparable to Rails. That being said, I read his stuff when I was a “newbie” and I think I turned out alright
I found Tony Marston’s page long time ago, and i found those articles much more useful, than any other resource on the internet. Although there is a certain level of arrogance, he wrote what he thought to be the best solution for problems he described. It’s very unfair from you to write things like “.., which clearly indicates that he does not want anyone else to learn.” I learned a lot from those articles, and i don’t see any reason anyone should think he’s doing it for any other reason then to share knowledge.. I found many of his claims to be too much of “my solution is the best”, but i have to agree mostly his solutions are the best i could find or figure out. Maybe you know about better source of advanced PHP methodologies.. i’m surely willing to read something better about database auditing, data dictionaries, access control.. but here also printed books falls short. And these articles are free for anyone.
I also disagree with his claims on design patterns, but i think he’s right in a lot of things in another articles, for example his non-puristic dealing with OOP.
So i think your post is very inadequate and very childish. If you wrote it in less subjective and more scientific way, it could be good post with a point.
He wrote what he thought to be the best solution for problems he described. That is fair. What is not fair, is he argues that his solutions are better then other’s solutions which weren’t intended to solve the same problems as him in the first place. The reason this guys an idiot to me, is because he helped a few people with their CRUD apps, and is telling people who write non CRUD apps that they are doing it wrong. In his emails he also told me some of the stuff he says he just takes from other sources and paraphrases. I don’t think re-packaging someone’s work without credit is honorable, especially when its taken out of context to contradict the original author’s meanings. He has shat on numerous respectible programmers. I suggest reading the real original works. Extreme programming, Re-factoring by Fowler, MVC & data auditing patterns from Patterns of Enterprise application architecture. Tony takes the ideas, and without a solid understanding, scrambles around the concepts and shits it back out. That’s a dis-service because it adds noise that distracts from the real geniuses.
Just to be clear that I’m no negative nancy here’s ISBN #s
978-0321127426 – POEAA
978-0201633610 – GoF
978-0321146533 – Test Driven Development: By Example
978-0201485677 Refactoring: Improving the Design of Existing Code
978-0321125217 – domain driven design
Read these 5 books and you will be a master. You will sling shot your career into hyper drive. These are not for beginners. It took me a year to read & fully understand these books, reading some of them 10+ times (like some of the sections in POEAA). Now that as an intellectual I can say I understand it (without lying to myself), I don’t think I could have written it any shorter then these original authors. Most of the summaries done by 3rd party authors completely obliterate the original meaning of these works.
Thank you for your fast answer. alright, i agree with you, comparing design patterns with transaction patterns is a little bit crazy, but i don’t think it sounds that stupid in original article, where it is explained, than here taken out of context.
About those book you recommended:
1. PoEAA – my favorite, i have this book on my desk all the time, and look into it almost on daily basis
2. GoF – deals with basic design patterns only.. (not what i was talking about)
3. TDD – i have this book, read it and it’s something entirely different (but good of course
4. Refactoring – i read greater part of this book, which i find very very useful, but also something out of this context
5. DDD – read first few chapters already, i’m not sure what is in following parts, but i don’t think it would be practical implementation of some part of a real system.
I see here you have a good taste in books, but those didn’t explain in detail parts, which Tony Marston did in his articles. I won’t compare him to Martin Fowler, which gave me better general knowledge of software development, but what i found in Marston’s articles – details of implementing flexible layered database application in PHP, details of implementing database auditing system, data dictionary – i just didn’t find anything like it anywhere else. All other articles (and books if we’re talking about PHP) show you very simple examples, which you could as well figure out yourself.
Ok, i don’t want to defend Marston here, i’m no fan of his social interactions, i just wanted to show that your article doesn’t seem fair to me. What you write about him ripping off other authors, i don’t know about that and for me it would be more interesting to read comparison what he said and what and where said the original author. That article would be very valuable. But his work gave me a lot of knowledge, and i didn’t have to pay for it
One more thing: i don’t see the difference between CRUD and non-CRUD application. I can’t think of non-simple application, that doesn’t read records, create, delete and update them.
btw, there are no data auditing patterns in PoEAA, maybe what you meant was Analysis patterns. I didn’t read that one, i see now i should