Certainly some of the comments expand on that by attributing all manner of atrocities to me, the accusation by “Joe” is especially amusing:
funny, i’d never heard of chay but stumbled upon a few posts he made about ruby on rails whilst researching the value of ror vs php. i found his posts fit very much into the “intellectual bully” category. he was more concerned with “being right” as you put it, with fairly basic arguments actually “the top 10 companies use X, therefore X is right”.…i agree with the previous poster, coding is not a competition. we want to solve problems with the right solutions. there are many solutions to a given problem, much as that would break chay’s heart.
Yes, Joe, I’m a bully! 😀
Let’s take the evidence at hand (i.e. reality) instead of the arguments based on fallacies (ad hominem: “i’d never heard of chay” or false equivalence: “there are many solutions”) and such. As I see it, the examples of bullying referenced in the discussion are:
A) Asking a candidate to define design patterns
B) Asking a candidate to distinguish C++ vs. Java
C) Writing an article comparing Rails vs. PHP
Design pattern bully
I think I’ve adequately defended my design pattern definition. But the issue at hand concerns something I mentioned in passing during an extemporaneous talk on web frameworks, not design patterns. I have two other talks devoted solely to the discussion of design patterns. Would I to adequately define design patterns there, by the time I finished, it wouldn’t be a web framework talk, but a design pattern talk!
(Ironically, a different talk on object-oriented design is based on the allegory of the “design pattern bully” as a way to elucidate potential pitfalls in programming.)
But more significantly, by prematurely ending the quote at my tongue-in-cheek definition, the author and others are inadvertently quoting me out of context. It seems, by accusing me of not defining patterns correctly while ending the quote just before I go on to define it, that **I’m** the one being bullied here.
C++ vs Java
I fully agree. It reminds me of an interview I had in 2002. I was asked by the engineering manage, “What’s the difference between C++ and Java?”
I answered.
“WRONG!” he roared. “There’s NO difference between the two languages, they’re identical!” Then he leaned back smugly and didn’t ask any more questions.
That’s the problem with “booby-trap” interview questions. If you have already decided that the candidate can’t answer the question to your satisfaction, then there’s no chance of gaining any information by asking it.
I have never asked this question so obviously this shouldn’t apply to me, but apparently according to some people, my interview style is the same in spirit.
I am loathe to address the accusation that I, like the news media on Sarah Palin, engage in “gotcha” journalism/interviewing. This label is a form of bullying also, because it is claimed that I roared: “WRONG! Your definition missed that a design pattern must be implementation independent!” (which, btw, isn’t an interview question at all.)
Even in my “red meat” example, the exchange typically goes like this:
Me: Can you define what a “design pattern” is?
Candidate: Umm… It’s like factory…singleton. Umm… I mean it’s this code thing that solves…a problem.
Me: An algorithm like quicksort satisfies your definition, it is a code thing that solves the problem of sorting. Is an algorithm a design pattern?
Candidate: No, they’re not.
Me: So can you add to your definition so that an algorithm is not a design pattern?
Not once in all those times has it gone down like this:
Me: Can you define what a “design pattern” is?
Candidate: Well Christopher Alexander, in his seminal book The Timeless Way of Building defined a design pattern thusly: “[a description of] a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without doing it the same way twice.” And even though Alexander was talking about patterns in buildings and towns, what he says is true about object-oriented design patterns. There, we express solutions in terms of objects and interfaces instead of walls and doors, but the core of both, is that design patterns are solutions to a problem in context.
Me: Wrong! (RAWR!) It’s pornography! Design patterns and pornography are one and the same!
And besides isn’t this socratic method of interviewing a far better way at seeking real understanding than a book definition of a pattern?
Let me be brutally frank. As I emphasized in my talk (but somehow this was omitted by my detractors), the people I ask this question to are those who claim to be design pattern experts on their resumé. If you claim expertise in something and then can’t define it, defend your “definition” in the face of innocuous questioning, and refuse to make any changes or admit any flaws in your incomplete definition, what sort of conclusion am I to draw to you as an engineer?
Even in this case, I account for different forms of expression. If you go back and read the original post, my questions are deliberately open-ended and open to interpretation so that we can discover the truth together.
I realize my style is tough — I’m constantly telling the candidate who gets stuck “Don’t worry, it’s okay” and I’ve said in my own blog that I would have trouble answering the questions I give my candidates. That’s the point of my interview style. I’m not looking for perfection or answers, only honesty, perspective, and flexibility in problem solving. Perfection tells me nothing about a candidate; how they handle challenges and setbacks speaks volumes.
Might makes right
I find it pathetic that some have to put words in my mouth that I never said in order to prove me a bully. I’m among the most outspoken and oft-quoted web developers on the internet. If I am a real intellectual bully there should be adequate evidence to indict me with my own words instead resorting to making things up. This is why I find it highly amusing that I’m told to have said: “The top 10 companies use (PHP), and therefore PHP is right.”
My actual words in the article that Joe alludes to are:
Alex Payne isn’t saying Rails is crap; I’m not saying Rails is crap. We’re not even saying Rails can’t scale or Ruby can’t do the web.
I can’t speak for Alex, but what I’m saying is look at the top 100 websites on the internet: about 40% of them are written in PHP and 0% of them are written in Rails. (Yes, I can (and am) using this statistic to grind you Ruby fuckers into the dust.) But to me, there is an alternate conclusion, since 60% of sites out there don’t use PHP: The web problem ain’t that hard.
PHP may be the best web language out there. But it certainly isn’t the only one. It’s one approach, one that stresses configuration over convention, stupidity over smarts, practicality over elegance: it’s one ugly mother f—er that gets shit done.
I then expand it in the very next article:
Rails is like a rounded rectangle and PHP is like a ball of nails. All I’m asking is for a programmer begin with the end in mind and survey the entire terrain before making a choice
…[Using PHP…]You can really create a slow flawed spaghetti architecture. You may make a site that is insecure and easy to hack. You really do have to work hard to winnow the wheat from the chaff when hiring developers. There are consequences to a choice. If PHP was so perfect, then it would have a supermajority of the top websites instead of just a plurality.
I can’t emphasize this enough: Writing software is about making choices.
I guess this is exactly equivalent to⸮:
“[Terry Chay] was more concerned with “being right” as you put it, with fairly basic arguments actually “the top 10 companies use X, therefore X is right.”
Apparently I claim infallibility and use a made-up statistic to do so! 😀
I bet the next argument is going to be that I have the liberal agenda of the media elite because I choose to point out the reality of what I actually said!
…as reality has a well-known liberal bias.
“Am I an intellectual bully?”
I’d have to say no. That statement is only 50% accurate.