Hi Beau,

Yes. Nevermind and everyone should learn to read spec. :-)

That said, such customizations allow people to experiment and flesh out a
bunch different ideas in parallel.

Best,
Stu


On Wed, Aug 24, 2016 at 1:17 PM, Beau Fabry <imf...@gmail.com> wrote:

> Just specifically on a custom REPL printer, wouldn't that negate the
> benefits Alex sees in people becoming accustomed to reading spec error
> messages? If every error report from each different environment potentially
> looks different? Also, from the position of a community maintainer Brian is
> most commonly going to be seeing the lowest common denominator error
> messages in bug reports filed, and it probably wouldn't be helpful for him
> to be getting multiple representations of the same error in different
> reports.
>
> On Wednesday, August 24, 2016 at 6:39:51 AM UTC-7, stuart....@gmail.com
> wrote:
>>
>> Brian originally raised 5 points that were concrete & specific, and
>> therefore potentially actionable. That is usefully-shaped feedback, thanks
>> Brian!  My take on those points, which I will recast in my own words:
>>
>> 1. "Loosen rules about ns form to match what people have actually done."
>>  This is pretty unlikely, for reasons already covered.
>>
>> 2. "You can tailor a much better specific message for 'require should be
>> a keyword' than what spec makes today." There are several possible things
>> to explore here. The most interesting one is "can spec come closer to a
>> bespoke message while maintaining its simplicity and composability?"  We
>> want to make all errors better, not one error awesome. Ideas welcome!
>>
>> 3. "Follow the inverted pyramid so people see what is most important."
>>  This kind of thing is easily done in a layer above spec, e.g. a custom
>> REPL printer for spec macro errors. Worth working on but not critical to
>> getting spec right.
>>
>> 4. "Name the problem namespace."  Spec does way better than this already,
>> finding the precise file and line.  If there are places where this is
>> busted we should fix them.
>>
>> 5. "I don't want to see the stack trace."  Then filter it out of your
>> REPL.  Intermediaries should never discard telemetry, but end consumers can
>> choose to.
>>
>> Cheers,
>> Stu
>>
>>
>>
>> On Wed, Aug 24, 2016 at 5:57 AM, Colin Fleming <colin.ma...@gmail.com>
>> wrote:
>>
>>> Sure, at the end of the day I don't really care about thre
>>> require/:require issue, it just seems a little incongruent with previous
>>> decisions which have promoted backwards compatibility. I generally prefer
>>> increased strictness, so I'm fine with the change. I do care about the
>>> error messages, though.
>>>
>>> On 24 August 2016 at 21:32, Mond Ray <mondr...@gmail.com> wrote:
>>>
>>>> I agree Colin, this feels more like the beatings shall continue until
>>>> morale improves ;-)
>>>>
>>>> More seriously, I understand the point of the musical instruments
>>>> analogy to be a reminder to programmers that learning a language and
>>>> understanding it in depth will increase your power and expressivity with
>>>> that language. That should not be used as a reason to increase the
>>>> difficulties caused by obscure error reporting. My initial understanding of
>>>> the sales pitch for specs was that it would serve to improve error messages
>>>> as the macro expansions / transformations would be more tractable in the
>>>> compiler. I get that it is a work in progress but let's retain that
>>>> original goal.
>>>>
>>>> Unlike you however, I would prefer correctness and the consequent
>>>> ripples over the continuing acceptance of incorrect expressions. My
>>>> reasoning is that code which has fewer compatibility style branches will be
>>>> easier to equip with the necessary instrumentation for generating more
>>>> human friendly error messages.
>>>>
>>>> Ray
>>>>
>>>> PS I think this require vs :require thing comes from the way that
>>>> novices confuse the ns macro with the function that pulls dependencies in
>>>> at the REPL. Cutting / pasting between the REPL and the file can allow that
>>>> to bleed in. I know it confused me.
>>>>
>>>> On Wednesday, 24 August 2016 01:09:48 UTC+2, Colin Fleming wrote:
>>>>>
>>>>> But creating error messages that are optimal for a user with no
>>>>>> knowledge or Clojure or spec is just not the goal.
>>>>>
>>>>>
>>>>> This is a totally false dichotomy. No-one in this thread is asking for
>>>>> that. This thread has several examples of expert Clojure users for whom 
>>>>> the
>>>>> error messages are incomprehensible.
>>>>>
>>>>> I am equally unapologetic about thinking that the musical instrument
>>>>> analogy is mostly bogus here. There are things that will always be
>>>>> difficult about learning Clojure because they're conceptual, such as
>>>>> functional programming. I think the analogy is fair there, they are just
>>>>> things that will require effort and practice to learn. But the error
>>>>> messages are about giving people the information they need *so that
>>>>> they can actually learn from their mistakes*. Clojure has
>>>>> historically been appallingly bad at that, and no-one should expect their
>>>>> users to flail around randomly trying things to see what works. I've 
>>>>> spoken
>>>>> to various smart people who have described their experience of using
>>>>> Clojure as exactly that, even after a non-trivial amount of time using it.
>>>>> I hope spec can improve on that experience.
>>>>>
>>>>>
>>>>> On 24 August 2016 at 02:45, Alex Miller <al...@puredanger.com> wrote:
>>>>>
>>>>>> I do not have an idea of what the final end point will look like
>>>>>> exactly. I don't get the feeling that there is any answer that you will
>>>>>> find satisfying, so I'm not sure what else I can do for you. We expect
>>>>>> Clojure users to become familiar with spec and its output as it is (now) 
>>>>>> an
>>>>>> essential part of the language. You will see specs in error messages.
>>>>>>
>>>>>> The focus in Clojure has always been biased towards building a
>>>>>> powerful and expressive tool that is rewarding for experts vs optimizing
>>>>>> for novices. Rich has talked at length about why that is (see
>>>>>> https://www.infoq.com/presentations/design-composition-
>>>>>> performance-keynote / https://github.com/matthiasn/t
>>>>>> alk-transcripts/blob/master/Hickey_Rich/DesignCompositionPer
>>>>>> formance.md in the section around languages as instruments).
>>>>>> Pertinent bit (but you should watch the whole thing for context):
>>>>>>
>>>>>> So we need players. I would rant here, but I won't. But look at this
>>>>>> guitar player with blisters. A harpist has blisters, a bass player with
>>>>>> blisters. There's this barrier to overcome for every musician. Imagine if
>>>>>> you downloaded something from GitHub and it gave you blisters.
>>>>>>
>>>>>> [Audience laughter]
>>>>>>
>>>>>> Right? The horrors! And yet how many people here play an instrument
>>>>>> or have at one point in their lives? Yeah, a lot of programmers do. And 
>>>>>> for
>>>>>> how many people did you just pick it up and it was awesome? How many
>>>>>> wished, like, something could have made it more straightforward to get
>>>>>> started with and, like, just made it easy? And how many would have 
>>>>>> believed
>>>>>> after that that they could play it later? No, not at all. This is - it's
>>>>>> actually quite important. The level of engagement that's required is 
>>>>>> quite
>>>>>> important.
>>>>>>
>>>>>> So we shouldn't sell humanity short. Humans are incredible. In
>>>>>> particular, they're incredible learners.
>>>>>>
>>>>>> One of the things that's really cool is you give a five-year-old or,
>>>>>> I don't know, eight, maybe, a cello and some decent instruction, and they
>>>>>> will learn how to play cello if they spend enough time doing it. In fact,
>>>>>> humans will pretty much learn how to do anything that they spend enough
>>>>>> time doing. We're incredibly good at it.
>>>>>>
>>>>>> And we're also really good teachers, in general. So I don't think we
>>>>>> need to go to our tools and our instruments and make them oriented 
>>>>>> towards
>>>>>> the first five seconds of people's experience because that's not going to
>>>>>> serve them well. It's especially not going to serve anyone well who wants
>>>>>> to achieve any kind of virtuosic ability with the tools. No one would
>>>>>> become a virtuoso on the cello if they had red and green lights when they
>>>>>> started.
>>>>>>
>>>>>> So neither of these two things is effort free, but we shouldn't be in
>>>>>> a game to try to eliminate effort because we are novices, right?
>>>>>>
>>>>>> There's a sense in which we're only going to briefly be novices.
>>>>>>
>>>>>> You're only a complete beginning at something for an incredibly short
>>>>>> period of time, and then you're over it.
>>>>>>
>>>>>> It's like we should not optimize for that. But, on the flipside,
>>>>>> we're always learners no matter how much time you spend on the violin. 
>>>>>> Who
>>>>>> sits there and says, "I'm done. I've completed learning violin. I 
>>>>>> finished
>>>>>> it"? That's awesome. I personally don't play violin at all, but I don't
>>>>>> think there would be a player on earth, no matter how great they are, who
>>>>>> would say, "Yeah, I finished violin and I moved on to something else."
>>>>>> We're constantly. It's just the human condition to do this.
>>>>>>
>>>>>> Things take effort. Just like we shouldn't target beginners, we
>>>>>> shouldn't try to eliminate all effort.
>>>>>>
>>>>>>
>>>>>> ...and there's more there - it's really worth reading/watching the
>>>>>> whole thing. We are not apologetic about this bias. We expect you to 
>>>>>> engage
>>>>>> and learn this tool that you're going to use for serious work because
>>>>>> there's also deep payoff on the other side, just like learning to play 
>>>>>> the
>>>>>> guitar or is more rewarding than learning to play the kazoo.
>>>>>>
>>>>>> I'm absolutely not talking about making something hard on purpose and
>>>>>> I'm not saying that making things easy to learn is bad. I'm stating an
>>>>>> ordering of priorities. It's more important to us to build a system of 
>>>>>> many
>>>>>> parts that can be composed together into specifications that work as
>>>>>> validators, and conformers, and sample generators, and error explainers,
>>>>>> etc. We *also* want the automatic errors created from that to be useful 
>>>>>> and
>>>>>> helpful and understandable thus this is a WIP. But creating error 
>>>>>> messages
>>>>>> that are optimal for a user with no knowledge or Clojure or spec is just
>>>>>> not the goal.
>>>>>>
>>>>>> Elena Machkasova has been doing research (supported in part by
>>>>>> Cognitect) on figuring out what totally new users of Clojure need from
>>>>>> error messages for her CS education classes and the answer there is just
>>>>>> different from what an experienced user needs. That's ok. We care more
>>>>>> about the latter.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Tuesday, August 23, 2016 at 8:49:38 AM UTC-5, Brian Marick wrote:
>>>>>>>
>>>>>>>
>>>>>>> On Aug 22, 2016, at 7:50 PM, Alex Miller <al...@puredanger.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>> You've complained in other channels about the "learning to read"
>>>>>>> error messages part and I think you've taken it entirely the wrong way 
>>>>>>> or
>>>>>>> maybe I just disagree. There are benefits from reporting errors in a
>>>>>>> generic, consistent way. […]
>>>>>>>
>>>>>>>
>>>>>>> Do there exist examples of what is desired for error messages in
>>>>>>> 1.9-final? Not promises, but a “this is what we’re shooting for”? What
>>>>>>> would you all like the specific error messages complained about in this
>>>>>>> thread to look like?
>>>>>>>
>>>>>>> Colin Fleming wrote: "The error message produced by the code I
>>>>>>> demoed at the conj last year would be:
>>>>>>>
>>>>>>> Unexpected symbol 'require' at <exact error location> while parsing
>>>>>>> namespace clauses. Expected :refer-clojure, :require, :use, :import, 
>>>>>>> :load
>>>>>>> or :gen-class.”
>>>>>>>
>>>>>>> Is that the goal? I fear that the goal is that it should be my job
>>>>>>> to understand "(cat :attr-map (? map?) :clauses
>>>>>>> :clojure.core.specs/ns-clauses)”. For what little it’s worth, I
>>>>>>> consider that completely unacceptable.
>>>>>>>
>>>>>>> - Getting the error data (specifically the explain-data output) to
>>>>>>> be both sufficient and generically useful is the first priority. I 
>>>>>>> think at
>>>>>>> this point that's pretty close and unlikely to change significantly.
>>>>>>>
>>>>>>>
>>>>>>> My bias here is that I come from the learned-from-bitter-experience
>>>>>>> tradition that believes it’s very risky to (1) get the infrastructure
>>>>>>> right, and then (2) pop down the user-visible features on top of it. 
>>>>>>> Very
>>>>>>> often, the infrastructure turns out to be a poor match for the actual 
>>>>>>> needs
>>>>>>> of the features. But, since (1) is already done, the features - and
>>>>>>> consequently the users - suffer.
>>>>>>>
>>>>>>> Please understand I’m not being insulting when I say that everyone
>>>>>>> has weaknesses and blind spots, even undoubted geniuses. In Clojure, 
>>>>>>> error
>>>>>>> messages and documentation (especially doc strings) have long been 
>>>>>>> glaring
>>>>>>> weaknesses. So I am wishing to be helpful when I counsel *quickly* 
>>>>>>> getting
>>>>>>> to worked examples of output, especially output that novices are likely 
>>>>>>> to
>>>>>>> encounter. And exposing those messages to typical users, ones who are 
>>>>>>> not
>>>>>>> familiar with core.spec.
>>>>>>>
>>>>>>> That seems prudent.
>>>>>>>
>>>>>>> I believe strongly enough in good error messages that I would be
>>>>>>> willing to do some of the scut work, if needed.
>>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Clojure" group.
>>>>>> To post to this group, send email to clo...@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+u...@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+u...@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 clo...@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+u...@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+u...@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 clo...@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+u...@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+u...@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.
>

-- 
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