7 ms·
The simplicity culture is what drove me to Python, and the Clojure community's simplicity culture is on a whole other level. It's not just the code and syntax t
by natrius 11y ago
The simplicity culture is what drove me to Python, and the Clojure community's simplicity culture is on a whole other level. It's not just the code and syntax that need to be simple. The abstractions in the program need to be simple as well, and Clojure gives you the tools to make simple abstractions easy to build and understand.
Go learn Clojure.
- atom-morgan 11y agoI just started BraveClojure today. I've said "next week" enough times. http://www.braveclojure.com/ http://www.braveclojure.com/
- dustingetz 11y agoYeah, Python : 1999 :: Clojure : 2015 edit: state of adoption and perceived coolness, not birth year. Coincidentally, Python 1.0 released in 1994 and Clojure 1.0 was released in 2009, and both had a couple years of unstable releases predating 1.0
- jeremiep 11y agoClojure is actually from 2006 after two years of planning and development.
- aaron-lebo 11y agoYeah, but Python is not from 1999, so they were referencing something else: either personal adoption or language take-off.
- agumonkey 11y agoMany choices are 'sacrifices' that bring so much simplicity. Syntax, persistent data structures, ... I hope I can jump back to clojure soon.
- davexunit 11y agoOr learn another Lisp. I recommend Guile Scheme and Racket.
- aaron-lebo 11y agoYou may get just as much pedagogical advantage from learning one of those, but Clojure will be much more practical with its JVM base. Besides, I know lispers hate the idea, and it may not even be necessary, but uniting behind a single good-enough lisp like Clojure will reap more rewards then advocating for multiple (while still good) Scheme implementations.
- davexunit 11y agoHere we go again with the "any Lisp that isn't Clojure isn't practical" argument. I disagree. Guile and Racket are plenty practical, and both have dynamic FFIs to any C library you want so I couldn't care less about using Java and its terrible VM boot time and build systems. I'm not interested in "good enough" when I've already been using something better for years.
- siavosh 11y agoCurious if you could tell us more about what you've worked on with Guile/Racket in a production environment?
- davexunit 11y agoI'm not the persuasive person that convince the bosses to use Scheme, so I don't have a triumphant success story, but some minor victories. I'm one of the core developers of GNU Guix (a package manager, distro, and associated set of tools) that recently was deployed successfully in a large production HPC cluster in Germany, which I think is a pretty nice achievement. At work, I use Guix and an init system called DMD (also written in Guile) a lot for development, and I'm trying to slowly work them into production via Docker. It's an uphill battle to advocate for something that isn't the status quo, so I'm proud of the little victories.
- erikpukinskis 11y ago> Clojure gives you the tools to make simple abstractions easy to build and understand. I understand if you don't want to take the time, but I would love it if you could you give an example of an abstraction that you can build in Closure that you would consider "easy to understand", yet which couldn't be built just with, say, anonymous functions, structs, arrays, and simple loops?
- edgyswingset 11y agoI think it comes down to expressing your intent in terms of that intent rather than confining it to imperative constructs. Pretty much any work on collections of items is generally simpler and more in line with the semantics of your intentions when working with Clojure or other functional languages or structures, especially when parallel code is involved. I'd say a specific example would be pmap. It's very difficult to parallelize code as simply as pmap does without functional programming constructs.
- erikpukinskis 11y agoHm. I'm looking at the implementation[1] of pmap.... I don't fully understand the implementation (can anyone point me to something that explains what rets is? Googling "clojure rets" doesn't return anything useful) but it appears to just be looping through the list and parcelling work out to multiple processors. That seems like something simple enough to do in any language with threads and function references, no? I'll dig in some more though. Thanks for the reference. [1] https://github.com/clojure/clojure/blob/master/src/clj/clojure/core.clj#L6709 https://github.com/clojure/clojure/blob/master/src/clj/cloju...
- hellofunk 11y agoin this code, "rets" is a local variable used in that function, which is why it wouldn't show up anywhere in google. it's just a variable name.
- edgyswingset 11y agoTo me it comes down to what my intent with the code is. I could write a few simple routines in Go that certain get the job done without much code, but when I read the code I have to perform more mental translation from how the code is written to what my intent was. In contrast, pmap or other constructs such as PLINQ get the same work done with less code that expresses my intent more clearly.