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/talk-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 <a...@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 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.