mkremins
Joined 14 years ago
Joined 14 years ago
Academics don't make any money from sales of paywalled journal articles. If you click a link to a journal article and hit a paywall, it's usually because whoever shared the link has institutional access to the journal and forgot that the paywall was there (since it effectively isn't for them.)
That said, I'm still of the opinion that programmer culture at large is too quick to disregard design. I'd really like to see more programming tools for general use developed with an eye to design, and for more industry and hobbyist programmers to realize that the current baseline state of existence is not an absolute maximum but a local one. We've pushed plain text pretty far, but it seems obvious to me that there's much bigger wins to be had if we throw out some of the assumptions our culture tends to make.
Design is absolutely critical when it comes to helping people understand complex systems. Well-designed tools work with the human brain to mitigate cognitive load, allowing the user to focus on making stuff happen rather than on juggling handfuls of information. Few programming tools, experimental or mainstream, fit this description; even fewer have anything like it in mind.
Successful efforts to make programming less opaque and more accessible will necessarily involve massive leaps forward in design. I'm glad to see design beginning to make some inroads into programming culture, but we've got a long way to go yet considering how frequently the Unix CLI is still held up as the state of the art.
(:use clojure.test) is probably a worthy exception – 90% of the time I see :use in the wild, it's in exactly that context :)
Essentially, seq already assumes that its argument is seqable. Don't use it to test an argument of unknown type for seqability; prefer something like the seqable? function from core.incubator [1], or a different core function like coll? or sequential? where the semantics of one of these will do.
[1] https://github.com/clojure/core.incubator/blob/master/src/ma...
(:require [foo :as f])
gives the required namespace a short alias with which symbols defined in that namespace can be qualified, while (:require [foo :refer [bar baz quux]])
explicitly provides a set of symbols to import unqualified.Generally speaking, :require :refer :all is also considered non-idiomatic. In fact, ClojureScript has explicitly avoided supporting both :require :refer :all and naked :use [1]. Backwards compatibility seems to be the only reason either is still supported by Clojure on the JVM.
[1] https://groups.google.com/forum/#!msg/clojurescript/SzYK08Od...
I don't know anything about Outlet, but the Wisp compiler actually makes use of Escodegen [1] – which expects input to be provided in the Mozilla AST format – to generate JavaScript. You can peek at writer.wisp [2] in the compiler codebase to see how it's done.
[1] https://github.com/Constellation/escodegen [2] https://github.com/Gozala/wisp/blob/master/src/backend/escod...