37 ms·
A History of Clojure [pdf]
- imdhmd 6y agoAs an aside - Is Rich Hickey still not notable enough to have a wikipedia entry? Even the person who has shepherded on this paper has a wiki page.
- JBiserkov 6y agoGiven Wikipedia's bizzaro rules, I wouldn't be surprised for him to get a page as an author of the paper ;-)
- xxpor 6y agoIf it hasn't been deleted before, be the change you want to see in the world :)
- gregschlom 6y agoIt has been deleted and now his entry redirects to Clojure. See: https://en.wikipedia.org/w/index.php?title=Rich_Hickey&action=history https://en.wikipedia.org/w/index.php?title=Rich_Hickey&actio...
- dragandj 6y agoWhat a hilarious reasoning that editor gives: > Restoring redirect - I see no evidence that he is notable for anything but Clojure Redirecting the Wikipedia article for Elizabeth II to buckingham.co.uk. I see no evidence that she is notable for anything but being the British queen.
- thijsvandien 6y agoBy that reasoning, we might as well remove https://en.wikipedia.org/wiki/Guido_van_Rossum https://en.wikipedia.org/wiki/Guido_van_Rossum.
- aliswe 6y agoThat is actually a kinda good reason.
- dragandj 6y agoAren't most notable people notable for one notable thing? Sorry, to get into Wikipedia, you'd have to win at least one gold medal at the Olympic games, be elected president of at least two countries, die in no less than 3 battles, AND you have to be the first confirmed case of at least one pandemic.
- aliswe 6y agoHaving created a notable thing is not EXACTLY the same as being notable. Sometimes.
- dragandj 6y agoI agree with that. Wikipedia certainly has a page about Kim Kardashian. She is notable. For what? For being notable. Perfect case for Wikipedia.
- svat 6y agoI think a rule of thumb is that something must have been written that was about you, rather than about your creation or whatever. The idea is that as Wikipedia is supposed to be a summarization of the secondary sources on a topic, there should be some material that would fit only in an article about you, and not in the article on whatever you're famous for. Some interesting examples are in the section about “people notable for only one event”: https://en.wikipedia.org/wiki/Wikipedia:Notability_(people)#People_notable_for_only_one_event https://en.wikipedia.org/wiki/Wikipedia:Notability_(people)#... (which is not about people who created something and does not apply here! Just mentioning it for what it shows about interesting aspects of their policy.)
- dang 6y agoHe's notable as a thinker and speaker about programming, quite apart from Clojure. The idea pool is the same, but that's true of any thinker. It's a bad argument regardless. Plenty of figures in intellectual history are notable because of one big thing they created, and I'm sure most have Wikipedia pages. Alas I'm blanking on examples just now.
- dragandj 6y agoI'm confused by your reply, since we both agree that Rich deserves a wikipedia page.
- lispm 6y agoI never understood the rationale behind the deletion. Being the primary designer of a popular programming language is relevant enough for me.
- chiyc 6y agoDefinitely. I've come across plenty of Wikpedia profiles that are just self-maintained profiles by hardly known entrepreneurs or startup founders. Ranging from Clojure and Datomic, to his insightful talks on software design, and everything else in between, Rich Hickey's made far more significant contributions to the world in comparison.
- ImprobableTruth 6y agoWhat is notable about Hickey besides being the creator of Clojure? Not to say that this alone doesn't make him notable, but I also don't really see the gain in an entry that is just a glorified redirect.
- kgwgk 6y agohttps://en.wikipedia.org/wiki/Guido_van_Rossum https://en.wikipedia.org/wiki/Guido_van_Rossum https://en.wikipedia.org/wiki/Larry_Wall https://en.wikipedia.org/wiki/Larry_Wall I’m sure there are others, they are the first that came to my mind.
- uDontKnowMe 6y agoSome more: Java https://en.wikipedia.org/wiki/James_Gosling https://en.wikipedia.org/wiki/James_Gosling Scala https://en.wikipedia.org/wiki/Martin_Odersky https://en.wikipedia.org/wiki/Martin_Odersky PHP https://en.wikipedia.org/wiki/Rasmus_Lerdorf https://en.wikipedia.org/wiki/Rasmus_Lerdorf Ruby https://en.wikipedia.org/wiki/Yukihiro_Matsumoto https://en.wikipedia.org/wiki/Yukihiro_Matsumoto F# https://en.wikipedia.org/wiki/Don_Syme https://en.wikipedia.org/wiki/Don_Syme Go https://en.wikipedia.org/wiki/Rob_Pike https://en.wikipedia.org/wiki/Rob_Pike
- puredanger 6y agoHe also created the Datomic database https://www.datomic.com/ https://www.datomic.com/
- svat 6y agoI've gone ahead and restored the article, but not knowing much about Rich Hickey I hope someone here can edit the article to actually contain some (sourced, i.e. with citations) content, as it's pretty bare right now (looks/looked like this: https://en.wikipedia.org/w/index.php?title=Rich_Hickey&oldid=960777210 https://en.wikipedia.org/w/index.php?title=Rich_Hickey&oldid...). The article was created in 2008 and its deletion was discussed and happened in July 2011: https://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletion/Rich_Hickey https://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletio... Someone recreated it (without discussion) in August 2013, and it was reverted to its "redirect" state in January 2014. I suspect that notability has changed now (e.g. Clojure itself is more popular, there are other things, and if nothing else his notability as a speaker is probably worth mentioning) and my guess is that if the article were to be discussed again, it might survive. But this is assuming there is actually content for the article that someone can add to it! Otherwise what's the point of an article about a person that doesn't say anything? If you look at the other articles mentioned in this thread so far (https://en.wikipedia.org/wiki/Guido_van_Rossum https://en.wikipedia.org/wiki/Guido_van_Rossum, https://en.wikipedia.org/wiki/Larry_Wall https://en.wikipedia.org/wiki/Larry_Wall, https://en.wikipedia.org/wiki/James_Gosling https://en.wikipedia.org/wiki/James_Gosling, https://en.wikipedia.org/wiki/Martin_Odersky https://en.wikipedia.org/wiki/Martin_Odersky, https://en.wikipedia.org/wiki/Rasmus_Lerdorf https://en.wikipedia.org/wiki/Rasmus_Lerdorf, https://en.wikipedia.org/wiki/Yukihiro_Matsumoto https://en.wikipedia.org/wiki/Yukihiro_Matsumoto, https://en.wikipedia.org/wiki/Don_Syme https://en.wikipedia.org/wiki/Don_Syme, https://en.wikipedia.org/wiki/Rob_Pike https://en.wikipedia.org/wiki/Rob_Pike) all of them contain some information about their article's subjects, beyond simply mentioning the language they were involved in. In my experience, adding something well-sourced to Wikipedia is usually a more lasting contribution (probably more people will read it, over time) than comments on HN -- the only downside is that it may get reverted quickly on flimsy grounds and you need some experience to make good edits that will stick. Edit: Or just mention here what can be added to the article and what the source of each bit of information is, and I'll try to add them!
- imdhmd 6y agoThat's great. Thank you for going ahead with that. I'll try to add some more relevant details with citations over the weekend or atleast put it here. Do you think if we start a new thread, it will gain more traction? Just a thought.
- adamkl 6y agoA great quote from the introduction, on why Rich took a sabbatical to work on Clojure: ...to give myself the opportunity to work on whatever I found interesting, without regard to outcome, commercial viability or the opinions of others. One might say these are prerequisites for working on Lisps or functional languages.
- omginternets 6y agoA similar point was raised in his Hammock-Driven Development talk. It inspired me to follow suit during this COVID19 lockdown. I've never been more intellectually fulfilled, nor happier.
- microcolonel 6y agoThe results are also astounding, because what he came back with produced extreme commercial viability, and is excellent in the opinions of others. Having used Clojure professionally for a couple years now, I feel so blessed. It is really well cut out for a whole host of problems that are common but extremely labour-intensive in conventional languages. Maybe one of these days I'll get time for my own sabbatical, and solve the two major tasks I see with Clojure: taking the performance from good to excellent; and hosting it in a robust systems language suitable for implementing well-trodden functions.
- adamkl 6y ago"hosting it in a robust systems language suitable for implementing well-trodden functions" Maybe take a look at Joker [0] to start. A Clojure interpreter written in Go. [0] https://github.com/candid82/joker https://github.com/candid82/joker
- jonahbenton 6y agoYeah, share both common concerns, centering around the JVM (which I love, and have used and studied since it launched, but it is baggage). There have been a number of attempts to build Clojure on top of Go (I worked on one), and another on top of Rust. Both lack the dynamic runtime ergonomics that Clojure leverages. Clojure is also seeing significant performance benefits, both runtime and startup, from the Graalvm, but that also will have limitations. I am wondering about D, which should be sufficiently low level from a systems perspective but may also have sufficient dynamic capabilities.
- Naomarik 6y agoPrior to Clojure I feel that I didn't really know how to do things well. In the context of the domain I have the most experience with, web applications, I'd summarize the bulk of programming as defining data, data transformations and shoving data through APIs. Once you get the hang of it, Clojure makes it trivial to transform datastructures from A to B. This has enormously expanded the kinds of problems I can solve. When Rich says "It was impossible to avoid the sinking feeling that I had been “doing it wrong” by using C++/Java/C# my whole career." I feel somehow that this is the case for the majority of people but they don't realize it yet because their experience is the most popular trendy language or framework. I've seen many examples of libraries in different languages having enormous amounts of commits and hundreds issues for problems that are trivial to solve in Clojure. I was in the same boat, constantly grabbing for frameworks and if one wasn't available that made my task simple, would struggle trying to bend the frameworks or language I was using to come up with a solution. I'm not a language geek and I don't write code outside my work for fun. I want to spend the least amount of time possible in front of the computer and sleep knowing my web applications won't topple over. Clojure has fit me so well that I don't think I would have accomplished what I have in other languages.
- natdempk 6y agoCould you elaborate on a problem that illustrates this property of Clojure? This sounds awesome, but I have a hard time understanding what you're getting at without knowledge of Clojure.
- _bxg1 6y agoThe fascinating thing to me about Clojure is that it's so vocally a "practical" language, and yet is a) a Lisp, and b) purely functional[1]. Usually those two things are associated with language enthusiasts, and not """pragmatic""" development. In the end it works, clearly, it's just very interesting to see that juxtaposition. I think it says something interesting about the practical value of higher-brow programming concepts, but also about how important the packaging/marketing/ecosystem is to conveying that value and making it accessible to the masses. [1] I know it's technically not 100% functional, but all of its messaging highlights that philosophy as a focal point and advantage.
- dgb23 6y agoI think the most important part about Clojure is how ridiculously straight forward it is. Once your REPL is set up and you got used to the predominantly functional API and its vocabulary, you are dealing with an extremely simple, data-driven environment that (almost) never gets in the way. Part of that is due to deviations from traditional Lisps: a more human readable API (first, rest etc.) and less homoiconicity (data structure syntax). But also things like the first class support for names, a baked in, dead simple STM... For me, this is the reason why it is so practical. I'm not good at top-down programming. I can think of and design a system or solution in an abstract way to get a sense of direction. But when it comes to writing code I have to look at small, simple things in isolation, look at the results, change the shapes and build something up. Clojure is very, very good at enabling this kind of dumb, simple, learning-by-doing approach of programming, because everything just works, is easily decomposed and merged together again, with very little ceremony or friction. And when the simple approach reaches its limitations, then there are these extremely expressive tools like multiple dispatch, macros, transducers, spec etc. which all go beyond what most mainstream languages give you.
- junke 6y agoThis is a minor nitpick but please check your facts about other Lisps when comparing them with Clojure. > Part of that is due to deviations from traditional Lisps: a more human readable API (first, rest etc.) first, second, rest ... are defined in Common Lisp > and less homoiconicity (data structure syntax). Clojure is no less homoiconic, you just write vector literals in your code; you could write vector literal to represent code in Common Lisp too, but in fact [], {} etc. are not used by default in CL because they are reserved for the user, so that it can be used for domain-specific purposes.
- redisman 6y agoHas anyone used Clojure much? I love Rich's talks so I've been very interested in it but there are so many great languages to learn these days.
- jetti 6y agoI have been using it for almost a year now as I use it at work. I like it a lot and am glad I made the switch (I spent the previous 8 years doing C# work). We use both Clojure and ClojureScript
- bcrosby95 6y agoI've used it quite a bit for side projects, but never professionally. I definitely think it's a great general purpose language. However, I don't use it as much anymore because I feel like my primary coding tasks (webapps) are better served by Elixir. As a language I vastly prefer Clojure. But it's hard for me to pass on BEAM and the concurrency model therein.
- jonahbenton 6y agoYes, and yes there are, and many are worth the brain bending to get them absorbed, and the brain bending is different for each. Speaking personally, having worked at one level or another with, looks like, 48 of the top 50 TIOBE languages over 30+ years (lacking OpenEdge ABL and ABAP) and about a third of the next 50 (where Clojure resides), Clojure is near the top of the list for me in terms of brain-bending value.
- _bxg1 6y agoI did one personal project in it just to get my feet wet. Unfortunately the tooling was not great at the time so it soured my impression a bit (I'm told it's gotten better since then). But also, I just have a really hard time giving up static types these days. Even for small projects, I always feel anxious about code that doesn't have annotations on function boundaries. It may have more to do with personal sensibilities than actual need, but regardless, it makes things unpleasant for me.
- hannofcart 6y ago
- tom_b 6y agoI remember being at the first Clojure/conj - I had just spent some time learning a bit of Common Lisp and stumbled onto the conference announcement somehow. This was very fortunate for me - after attending the conj, I was able to use Clojure at work to sneak in some FP on the readily-available JVM platforms. I later used it to do some internal REST-API work. The code for that project has run for years without modification or error. For whatever reason, I also discovered that thinking functionally with Clojure worked so much better and naturally for me than object-oriented design methods. While I have drifted away from Clojure over the last couple of years, I find that my problem solving mind is much better in other languages because of the time spent thinking functionally with Clojure.
- adamkl 6y ago"The code for that project has run for years without modification or error." To follow up on this point, if you ever need ammunition to sell the use of Clojure inside an enterprise level organization, just show your Chief Architect the graphs of code stability over time for Clojure (pg. 71:26) and ClojureScript (pg. 71:30). After working with JavaScript (not trying to bash) for the last few years, the idea of stability has become top of mind for me.
- O_H_E 6y agoWow, I didn't expect such differences compared to Scala. These graphs need a study on their own.
- puredanger 6y agohttps://erikbern.com/2016/12/05/the-half-life-of-code.html https://erikbern.com/2016/12/05/the-half-life-of-code.html
- adamkl 6y agohttps://www.groundedsage.dev/posts/the-clojure-mindshare/#heading-stability https://www.groundedsage.dev/posts/the-clojure-mindshare/#he...
- elamje 6y agoI was super excited to see this paper released. I've spent time with Python, Java, C#, Javascript and limited time on C and Rust. Clojure was the largest paradigm shifter by a large margin. Having done concurrent programming in Java, and even implemented some concurrency primitives like semaphores, Clojure was incredible to use. For those that don't know, Clojure uses immutable data structures that mitigate concurrency issues. If you are curious how that's even practical, I highly recommend the paper and also reading about Persistent Data Structures. They reuse shared data, similar to how Git only tracks the delta's between commits, rather than multiple, full copies of the file. On top of that, you up reducing lines of code by 60-70% of traditional Java or C#.
- adambyrtek 6y ago> They reuse shared data, similar to how Git only tracks the delta's between commits, rather than multiple, full copies of the file. I learned about immutable data structures at Rich's conference talk years ago, and the whole concept blew my mind as well. However, what you said above is not strictly correct. The idea is not to store deltas (which is what Subversion does), but immutable copies of objects (in case of Git identified by their SHA-1) that can be used to build multiple versions of a hierarchical data structure (e.g. a list, tree or hash map). Git commit is basically a tree of other objects with some metadata. The problem with deltas is that they need to be iteratively applied to some base snapshot which requires computation (and probably a cache as well), while immutable objects are easily accessible in constant time.
- elamje 6y agoAgree. Probably should’ve used a more solid example, but was just trying to convey the essence I suppose.
- adambyrtek 6y agoNo worries, I fully agree with the rest and just wanted to clarify things for others, not nitpick.
- roryrjb 6y agoI see nothing but praise for Clojure and for good reason. I experimented with it a bit a few years ago and it seemed to be a more practical and useful version of Lisp, although I say that as someone who wasn't that experienced in Lisp more generally, with only some small experiments in Scheme. Something just as significant was that the ecosystem seemed to be quite sane and I got on really well with Leiningen for example, if you were considering diving in then give it a go. I personally won't consider it now but not because of the language or the ecosystem but because of the runtime(s). For me the layers of abstraction are too much complexity to not be justified.
- puredanger 6y agoIt seems that rejecting all of the most popular runtimes in the world (JVM, JS, CLR) is an odd thing to have a grudge about. (Also notable, babashka, a Clojure alternative to bash.)
- LandR 6y agoI love clojure the language but hate the tooling. Also a lack of documentation was always a problem, especially around clojure script. I also don't like smug community. When you say about the lack of documentation and get told that's a good thing, clojure is meant to be hard to learn, it's not for everyone and maybe you just aren't smart enough... Hmmm. That attitude might put people off.
- manishsharan 6y agoI kind of know where you are coming from. 'Back in the day', early Clojure adopters would ask one to read SICP before asking questions. SICP is indeed the best CS book I have read but that attitude was uncalled for. But things have changed. Clojure and Clojurescript community is among the most helpful and Stackoverflow questions are promptly answered. If you take the time , like I did, you will find that Clojurescript has awesome tooling. Go though the tutorial on Figwheel.main (https://figwheel.org/docs/ https://figwheel.org/docs/ ) and then check out re-frame TodoMVC here https://github.com/day8/re-frame/tree/master/examples/todomvc https://github.com/day8/re-frame/tree/master/examples/todomv... or this simpler reframe tutorial from here https://opengisgal.wordpress.com/2018/05/19/re-frame-clojurescript-tutorial-for-beginners/ https://opengisgal.wordpress.com/2018/05/19/re-frame-clojure... . And this here is the Reagent cookbook https://github.com/reagent-project/reagent-cookbook https://github.com/reagent-project/reagent-cookbook . Good Luck!
- fogus 6y ago"'Back in the day', early Clojure adopters would ask one to read SICP before asking questions." I was in the Clojure usenet from very early on and do not recall this happening. That's not to say that it never happened but it was certainly not a common response to questions. Instead, I remember early adopters like Chris Houser, Chas Emerick, Phil Hagelberg, and many others taking a lot of time to help people who had questions with the language.
- onetom 6y agoI've also received countless hours of help from @alandipert, @micha and @jumblerg on the Clojurians slack about boot, Hoplon and Hoplon UI. Without them I couldn't have successfully built a 6 ppl Clojure team, who was consistently delivering working software!
- bangonkeyboard 6y agoI was at a talk by Guy Steele where he mentioned in passing that Clojure was a Lisp which had done everything right. This was all the more impressive to him because Rich Hickey had until then been a relative outsider to the Lisp/Scheme community.
- zitterbewegung 6y agoYea Clojure is like the Python of lisp style languages. Good language design and it can interact with Existing Java libraries. (Python does the same thing but with C).
- kgwgk 6y agoCommon Lisp also does the same thing with C.
- mumblemumble 6y agoAnd Hy does the same thing but with Python. I think, though, that the things that Clojure gets right go way beyond just the JVM, though. Clojure's approach to nil punning, for example, is really well thought out.
- fmakunbound 6y agonil punning?
- mumblemumble 6y agoEric Normand explains it better than I could: https://lispcast.com/nil-punning/ https://lispcast.com/nil-punning/ In a nutshell, nil punning is a thing in lisps (and some other languages) where the null value can have different meanings in different contexts. It's comparable to Python's concept of "truthiness" and "falsiness", but more so.
- 6y ago
- brabel 6y agoGreat story, really enjoyed reading. Rick Hickey is a great speaker (if you haven't watched his talks on youtube, do it! They are totally worth it), and certainly a great programmer, which is why I respect his opinions on dynamic typing, even if I stubbornly disagree (one day I might still dive into Clojure, but I am diving into the arguably opposite end of languages right now: Rust!!). I have even more respect for him now knowing that he actually worked on Clojure for years without any income!! This is a work of passion, and I admire him for that, and for being able to turn that passion into a company big enough to pay his bills and that of several of Clojure's early adopters.
- mapgrep 6y ago>I have even more respect for him now knowing that he actually worked on Clojure for years without any income!! Hickey mentioned in one of his talks that he actually burned through retirement savings (at least some?) while taking these years to do Clojure. I got the impression he had been thinking about it for a while prior and that it was in the neighborhood of two years. (The context was, he was thanking his wife for helping to make Clojure possible, in part by indulging in many converstions about very minute details of how Clojure would work.) (I have no idea if this is covered in the paper as it's 46 pages, I've bookmarked it but not yet read it.)
- brabel 6y agoIn those 46 pages, he goes into details regarding how the idea came up to him, why he took a sabbatical of 2 years (which ended up lasting to this day, he says at the end :D ), what he did during those 2 years (not only Clojure) and how he basically has no retirement savings left because of that.
- projectileboy 6y agoThere was also a group of people who wanted to see Clojure succeed who donated money ($100 each, if I recall correctly). But I would guess that was a drop in the bucket compared to what he had to spend of his own money.
- mumblemumble 6y ago
- lymeeducator 6y agoThanks to Rich for designing and thanks to Alex & Rich (and others) for maintaining. It is my favorite language thus far out of (Java, Ruby, Python, Bash, Awk, Erlang, Swift, Tcl and Objective-C).
- bpyne 6y agoSection 2.4 of the paper gave me a chuckle. Like Rich, I've yet to write a program that didn't involve some kind of database. Organizations care about data not programs. Writing programs just gives them a way of applying organization-specific rules, in the way of transformations, to the data.
- veryrichh 6y agoClojure is a scam and Rich Hickey is a con artist.
- christophilus 6y agoClojure is hands down my favorite language that I've used so far. Rich, if you read these comments, thanks for all you do!
- jwr 6y agoThanks to Clojure (and ClojureScript), I was able to build my self-funded SaaS business. There is no way I would have been able to tackle the complexity without Clojure. I also love the mature approach and mature community. It is, quite simply, a different world from most other software places, and one I enjoy a lot, as I'm mostly focused on building and shipping a large and complex codebase with an extremely small team.
- GiorgioG 6y agoCan you elaborate on how Clojure helped you tackle the complexity? I've considered learning Clojure (I have the Brave Clojure book sitting not far from me) but I have concerns about the learning curve (I'm a fullstack dev by day (C#/Angular) slowing me down in my own attempt to build a SaaS.
- jwr 6y agoWell, off the top of my head: * a single language for both client-side (browser) code and server-side code * a single data representation (maps with namespace-qualified keys), so no conversions necessary * spec which helps validate data in multiple places (such as :pre/:post conditions) * core.async which lets me write asynchronous code both in the JVM and in the browser, same primitives * a library of excellent sequence manipulation functions * transducers, which let me build composable data pipelines * the Rum library which lets me use React as a rendering engine, basically a function of my data * most of my domain code is shared between the browser and the server There is more, but these were what I could come up with immediately. I mostly spend time thinking and working on the problem domain, not writing boilerplate (there is none in Clojure, really).
- GiorgioG 6y agoThat sounds pretty great. Thanks!
- d_t_w 6y agoI think we might be clones. My self-funded business (https://operatr.io https://operatr.io) is built in Clj/Cljs. From the product, to the static website, marketing emails, even the licensing runs Cljs on Node in AWS Lambda. I would have listed those same bullet points off the top of my head.
- lukashrb 6y agoA great read! What I really appreciate, beside all the technical stuff, is the effort to create a positive and helpful community around Clojure. From the paper: "When I first was learning Common Lisp I was appalled at the tolerance on Usenet comp.lang.lispof arrogance, hostility, intimidation and other anti-social behavior of the presumed ‘smartest guys in the room’. I was determined (a) that the Clojure community would not be hosted there and (b) that kind of behavior would not be tolerated. Early on, on IRC and the mailing list, I established and required a tone of supportiveness, positivity and respect."
- mikmoila 6y agoCo-routines: Java has project Loom coming very soon, which (IMHO) shows the way how it should have been done.
- spacemanmatt 6y agoI'm really looking forward to this getting to production quality. I have a lot of code that will benefit immediately.
- simongray 6y ago> When I first was learning Common Lisp I was appalled at the tolerance on Usenet comp.lang.lisp of arrogance, hostility, intimidation and other anti-social behavior of the presumed ‘smartest guys in the room’. I was determined (a) that the Clojure community would not be hosted there and (b) that kind of behavior would not be tolerated. Thank you, Rich Hickey! The persistent data structures and functional core library are great, but many would not bother with Clojure if they had to deal with the toxicity that is present in the Common Lisp community.
- bjoli 6y agoComp.lang.lisp was awful, and the trend somewhat continues even though it has gotten better. Looking through newb threads on various lisp forums there are a few people that always seem to try their best to be mean or funny on someone else's expense. It is not that hard: if someone writes awful code, point them in the right direction. Don't claim they have malfunctioning brains. I stopped writing CL a few years ago even though I enjoyed it. For my personal stuff scheme is even more fun, and the communities are a lot more pleasant.
- ggregoire 6y agoIs there any statically-typed FP language with Lisp's parenthesized syntax?
- simongray 6y agohttps://github.com/carp-lang/Carp https://github.com/carp-lang/Carp
- bmitc 6y agoTyped Racket is one option: https://docs.racket-lang.org/ts-guide/ https://docs.racket-lang.org/ts-guide/ I'd say also that the ML-dialects, such as F#, Ocaml, and SML, are pretty close to a statically typed Lisp/Scheme, at least in the flavor of programming aside from them having better pattern matching built-in. I'd like to see a specifically designed statically typed parenthetical language, basically something that merges Racket and F# but simplifies things a bit.
- abraxas 6y agoI fell in love with Clojure and fell out of it. It is a great language. Lisps have this inherent elegance to them especially in data transformation pipelines. That said I found its performance still a bit on the wanting side particularly if you avoid type hints. For many tasks the performance is probably acceptable but the backend work I tend to do makes the abstract style get in the way of trying to figure out performance issues. Also I'm coming around to the imperative style more and more. Sometimes a for loop is all that's needed and makes for a more understandable code than all those hipster maps and folds.
- raspasov 6y agoI can recommend YourKit. It's a paid tool but if you really need it, the small cost is totally worth it. Usually the bulk of your perf. problem comes from a few hot places that are called often and the JVM needs to do reflection on those every time. Type-hint those and the performance usually goes through the roof.
- abraxas 6y agoI use Jprofiler and I'm no stranger to using profiles but some issues with Clojure's performance aren't fixable with a profiling session.
- raspasov 6y agoAny specific issues you've encountered?
- abraxas 6y agoA lot of issues centred around persistent immutable data structures that Clojure uses for just about everything. Yes those data structures are faster than any previous attempts at language level immutability constructs but are still much slower than their mutable counterparts. Yes, you can use in Clojure Java Collections through the interop interface but that mostly defeats the point of Clojure. In the end I retreated back to Java but even that is wrought with a number of performance issues due to its lack of contiguous arrays of complex types. I’m toying with Go as it’s a simple language that has far fewer performance surprises than most other popular high level languages. If that turns out disappointing I’m going back to where I started 24 years ago which was C++.
- rafaelferreira 6y agoI've been working with Clojure for a few years now, and the thing I love most about the language is how it nudges developers to write straightforward code. It's maybe closer to a well-structured procedural style than to highly indirect OO or to deeply polymorphic category-theory-inspired typed functional programming. The emphasis on mostly-first-order pure functions composed of other functions, receiving and returning immutable values, makes it easy to untangle even the worst balls of mud, while the well designed set of data-structures (few) and functions operating on them (many) allow for easy and terse expression of everyday data manipulation chores. If we keep the majority of the code pure and straightforward, we can deal with state and I/O with other constructs, like atoms and records, only where we need to (doing this systematically tends to lead me to some variation of the functional-core/imperative-shell pattern). STM, multimethods, macros and whatnot are cool and have their uses, but after a while I think the really cool thing is how little do we need to resort to fancy stuff and how much is accomplished with just functions and data.
- leethomas 6y ago> functional-core/imperative-shell Lol I’ve been learning Clojure for fun these last few days and I had to read this twice because the first time I thought I was looking at a function from a module. > we can deal with state and I/O with other constructs, like atoms and records Can you elaborate on what you mean here or link to specific articles? I’m talking about the representing I/O side effects as records part.
- roguas 6y agoThere is a component framework that builds dependency tree for stateful modules and does implicit injection of params. It is a beautified pattern(usually you can do initializations in higher levels, but you have to resolve dependiences yourself and for the whole tree) for dealing with things that require state while keeping explicit references(so that you understand where it came from and can inspect(visually) its lifecycle).
- rafaelferreira 6y agoSure, check out Stuart Sierra' (by now famous) blog post Clojure Workflow Reloaded and his Components library: http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-reloaded http://thinkrelevance.com/blog/2013/06/04/clojure-workflow-r... https://github.com/stuartsierra/component https://github.com/stuartsierra/component
- mark_l_watson 6y agoI used Clojure a lot back in the beginning (contributed a little money, used Clojure fairly intensely on two long term consulting projects). Before that I used Rich's Common Lisp to Java bridge project. I think his impact goes far beyond just Clojure users, having helped push immutable by default, etc. as standard good practices. I moved away from Clojure because I wanted to move away from the JVM. I did a fun project, a nutrition/cooking web app [1] about 12 years ago in Clojure, but I am slowly porting that from Clojure to Common Lisp for another example program for my book [2]. Perhaps not as well known, but Clojure joins other less commonly used languages like Haskell as languages with fairly good support for deep learning. I feel like any language that does not have a good deep learning story will be limited. Also interesting that Swift has such good access to Apple's deep learning libraries and also a version of TensorFlow. I encourage Clojure developers who work on deep learning support! [1] http://cookingspace.com http://cookingspace.com [2] https://leanpub.com/lovinglisp https://leanpub.com/lovinglisp
- synthc 6y agoYou can subscribe to Dragan Djuric's deep learning book [1]. He is using the subscriptions to fund work on Deep Diamond [2], a fast Deep Learning framework with GPU support for Clojure. [1] https://aiprobook.com/deep-learning-for-programmers/ https://aiprobook.com/deep-learning-for-programmers/ [2] https://github.com/uncomplicate/deep-diamond https://github.com/uncomplicate/deep-diamond
- lbj 6y agoI've been here for the entire journey, but no one can summarize it quite like Rich. And I bet he could write twice that just on nurturing a community - He spend hours and hours on IRC in the early days, coaching, teaching, correcting and even admonishing bad behavior. He's truly done something remarkable in both building this powerful language that I use daily, and a very helpful, friendly and intelligent community around it.
- stormdennis 6y agoSo would clojure work as a substitute for scheme to go along with the sicp book?
- hefner 6y agoCool!
- agentbellnorm 6y agoSometimes when we have created things with code, we wipe the sweat from our foreheads and feel proud because it was kind of hard. Usually when I have created something with clojure I feel disappointed because it was so easy.
- d_t_w 6y agoThis is superb, and I'm only on page two. I'm thankful that Rich finds the time to produce his thoughtful content and I hope he has the opportunity to present this at HOPL-IV when it is rescheduled. The distinction between Information Systems and Artificial Systems is the key point to me and reflects my experience, not that I understood it at the time. I use Clojure today because it is a better thinking toolkit for Information Systems (or the inelegant 'Products' as I defined them in my conj talk). I'm an order of magnitude more productive in Clojure than I was in Java. It's not a small step, it's a step-change.
- zrkrlc 6y agoAll right. That's it. I'm porting over all my code to Clojure. Any tips to get me started? I'm writing a web app to process DAG-formatted data. EDIT: Looking at re-frame + reagent 'cause I have some React background. I also found The Joy of Clojure and Elements of Clojure from other threads. Anything else I should know before diving in? (Past experience: Haskell, Python, C#, JS)