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 <mondraym...@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/DesignCompositionPerformance.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 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