After further consideration, I would like to back off the word:
"abomination". I have strong opinions about code, and strong opinions about
technical aspects of Midje, but I chose the wrong word in my original
statement. The technical definitions of words do not matter as much as the
connotations they carry in common parlance. I can see how my choice of
wording here can be taken as a personal attack. And so for that, I do
apologize, Brian. In the future I will attempt to use less loaded verbiage.

Timothy Baldridge

On Thu, Aug 25, 2016 at 10:33 AM, Timothy Baldridge <tbaldri...@gmail.com>
wrote:

> >> I also note that my library, Midje, is typically insulted on this
> mailing list whenever a newbie brings it up. One of the contributors to
> this thread has called it “an abomination”. There was no similar concern
> about *his* tone. Because, I suspect, he's on the inside, punching out.
>
> Yes, that was me. And since this seems to come up rather often I should
> probably address it. I scanned the archives and found the original
> statement I made:
> "I don't recommend Midje at all. Many of the framework's mocking
> facilities (such as providing) are abominations. You shouldn't go around
> mucking with functions and re-deffing them on the fly. It may look cute,
> but I've lost countless hours to bugs and unexpected behavior related to
> Midje. IMO, stay clear of that. "
>
> So to be clear, I called certain patterns in Midje: "abominations", not
> the library as a whole, and defiantly never you. And unfortunately I have
> to stand by characterization of these facilities. I strongly believe that
> new code evaluation semantics combined with mutation of var roots is a
> great way to add complexity to your testing suite. Changing var roots
> on-the-fly adds complexity that will come back to bite you when you add
> things like async calls and parallelism. Creating new evaluation semantics
> makes code impossible to read without fully understanding the interpreter
> of the DSL. What is executed first? What happens when? Who knows, it's a
> foreign language.
>
> But please don't take my statements as a personal attack. I have written a
> lot of bad code in my life, some of it is used daily by clojure
> programmers. I often do code reviews, and I may come across as abrasive
> when discussing a bit of ugly code, but I bear no ill-will to the
> programmer. The same applies here, I may strongly dislike aspects of Midje,
> but I can dislike someone's work without disliking them.
>
> So now I'm completely off topic for this thread, but since my statement
> back in 2014 keeps coming back time and again, I figured it was best to
> clarify my words. And Brian, if we ever are at a conference together, let's
> sit down and I'll buy us a drink (or two). It'll probably do us both good
> to get to know each other better.
>
> On Thu, Aug 25, 2016 at 9:54 AM, Gary Trakhman <gary.trakh...@gmail.com>
> wrote:
>
>> Over the years I've kind of started agreeing with what Brian's saying.
>> Much as I love/know clojure and the philosophy that bears its fruit, I
>> think spec's sideband error-handling is a great low-risk opportunity to
>> build in some 'easy'.
>>
>> My team is moving from rails towards elixir after having seriously
>> considered clojure (and hiring me recently under that premise), and I'm
>> having to apologize for the general lack of novice guardrails,
>> 'conventions' and documentation that people from other communities expect.
>> I think it looks pretty good if you're used to java (java conservatism
>> notwithstanding), but not so good if you've been in dynlangs (particularly
>> ruby) or other FP languages besides lisp.
>>
>> I'm concerned the current approach will lead to too many half-baked
>> error-reporters.  Alternatively, if there's a canonical human-facing
>> error-reporter built on top of the more stable data representation, I think
>> it would be generally acceptable to break 'contracts' there as we find
>> better ways to show the errors.
>>
>> On Thu, Aug 25, 2016 at 11:18 AM Brian Marick <mar...@roundingpegs.com>
>> wrote:
>>
>>>
>>> On Aug 24, 2016, at 9:28 PM, adrian.med...@mail.yu.edu wrote:
>>>
>>> I do not think your tone and lack of constructive feedback to Alex's
>>> (and others) thoughtful responses is helping your case.
>>>
>>>
>>> Probably not(*), though I would characterize the responses differently.
>>> They are polite, and they are intended to be helpful to someone who already
>>> agrees with axioms like “good error-handling is a nail for which core.spec
>>> is the hammer” and “it is wise to push the responsibility for error
>>> understanding to third-party libraries or diligent study”. They do a
>>> service in that they lay out the rules under which Clojure users should
>>> expect to live. But they are largely reiterations rather than engagement. I
>>> find that rather frustrating.
>>>
>>>
>>> Let me point to an essential book on business/community management,
>>> Hirschman’s /Exit, Voice, and Loyalty/. https://en.wikipedia
>>> .org/wiki/Exit,_Voice,_and_Loyalty, and to a clever take on group
>>> behavior, “Evaporative Cooling of Group Beliefs”, http://lesswrong.com
>>> /lw/lr/evaporative_cooling_of_group_beliefs/. I think there is much to
>>> learn from reflecting on those and the direction of Clojure design and the
>>> Clojure community over the past few years. (I’m not a huge fan of the
>>> application of Satir’s family counseling theory to software management -
>>> Gerald Weinberg and the like - but it’s hard not to read books like the
>>> /Quality Software Management/ series and see people in the Clojure
>>> community - including me! - playing out stereotypical dysfunctional roles.)
>>>
>>> Read me as someone who’s publicly and self-destructively giving up on
>>> Voice and is on the way to Exit. As someone who tends to Loyalty (though
>>> perhaps the loyalty of the traditional Catholic Devil’s Advocate), it’s
>>> rather agonizing. That is, I still think Clojure is the best raw language
>>> out there for broad-spectrum work. However, its design has been doubling
>>> down on long-unfortunate tendencies, and - I’d argue - new languages like
>>> Rust, Elixir, and Elm (even Pony) - are raising the bar for both community
>>> management and “peripheral” concerns like documentation and error handling.
>>> In the meantime, the Clojure ideology - reinforced by memes like
>>> “complecting” - has been getting more rigid.
>>>
>>> The result is that what seem to me bizarre decisions are treated as
>>> normal. We have an `any?` in clojure.core that always returns `true`. This
>>> deviance from probably every other programming language is justified as
>>> obvious for a feature - clojure.spec - that is largely unproven, certainly
>>> when it comes to error reporting. (Even worse, we have `any?`, `some?`, and
>>> `some` - all idiosyncratic.) Yet the idea of changing the name of `any?` is
>>> completely dismissed, with the justification that people complain about
>>> every new name. (Think about what that decision criterion entails, broadly
>>> applied.)
>>>
>>> Also bizarre: the idea that error messages that amount to essentially
>>> dumping a parse tree + BNF-ish grammar clause (possibly twice with a
>>> vomitous stack trace between) is a *good* thing. Not a “we wish we could do
>>> better, but software development is about constraints and tradeoffs” thing.
>>> Not a “yeah, but Rich Hickey doesn’t want to bother with that stuff” thing.
>>>
>>> (I was honestly flummoxed that, although clojure.spec is supposed to be
>>> the answer for error handling, there’s been no attempt to work through what
>>> good error messages would be like and how the current infrastructure would
>>> support the translation from raw data to such error messages.)
>>>
>>> I cannot help but think of this as groupthink. And - to be grandiose -
>>> having people like me Exit will increase that, per evaporative cooling.
>>>
>>>
>>> I also note that my library, Midje, is typically insulted on this
>>> mailing list whenever a newbie brings it up. One of the contributors to
>>> this thread has called it “an abomination”. There was no similar concern
>>> about *his* tone. Because, I suspect, he's on the inside, punching out.
>>>
>>> ---
>>>
>>> (*) Might that not be my fiendish plan? Perhaps I’m being abrasive on
>>> this list exactly to associate ideas like “error messages are the
>>> responsibility of the compiler” as being from a hated Other, thus hardening
>>> a position that I think is bad for Clojure. Why would I do that? Because
>>> I’m 90% likely to be going all-in on Elixir and Elm. Encouraging
>>> destructive behavior in a competitor language increases my languages'
>>> chances of success. Bwahaha! (Oops, just violated rules 6 and 7 of
>>> http://www.eviloverlord.com/lists/overlord.html )
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clojure@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+unsubscr...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+unsubscr...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> --
> “One of the main causes of the fall of the Roman Empire was that–lacking
> zero–they had no way to indicate successful termination of their C
> programs.”
> (Robert Firth)
>



-- 
“One of the main causes of the fall of the Roman Empire was that–lacking
zero–they had no way to indicate successful termination of their C
programs.”
(Robert Firth)

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to