15 ms·
I am not disagreeing nor challenging you; I'm happy you like it and I think you should keep using it since you enjoy it so much. My question is: Wouldn't the sa
by _t0du 8y ago
I am not disagreeing nor challenging you; I'm happy you like it and I think you should keep using it since you enjoy it so much. My question is: Wouldn't the same be said by most programmers with a high degree of proficiency with a language? What sets Clojure apart from Haskell or Scala or Elixir or Erlang? Do you have a high degree of proficiency with something else?
Clojure is the language that I have always wanted to learn, but the benefits never seemed very apparent. I'm hoping your response will make them clear.
- ilikehurdles 8y agoI personally don’t have a great answer for you because I haven’t used the other languages much or at all. If you’re able to watch someone really effective at repl driven development, I think you’re able to see how that sets productivity in the language apart.
- akhilcacharya 8y agoAre there any good screencasts for this?
- piercebot 8y agoBruce Hauman has given a few good talks about how you can use tools like Figwheel to bring a REPL-like development experience to web development. You can watch him live-code the game 2048 in the screencast where he introduces DevCards[0]. Notice that the video came out 4 years ago! One thing that really drew me to Clojure is that it seems to be a nexus of really good ideas that have trickled out into the larger community. If Clojure was where all the smart kids ate their lunch, maybe if I ate lunch with them too (so to speak), some of their smarts might rub off on me :) [0]: https://vimeo.com/97078905 https://vimeo.com/97078905
- MuffinFlavored 8y agoI feel the exact same way (s)he does about node.js and I 100% would never want to write Clojure. So to your point, yes. Using the language I know well enough to make money with is awesome. Other languages don't entice me because I can already do everything I need to well with what I currently have.
- jacobolus 8y ago> feel the exact same way (s)he does about node.js [...] can already do everything I need to well with what I currently have This is a provincial take. That is, “do everything I need to” is strongly limited by what a person currently knows. If you don’t have at least moderate amounts of experience with alternative ways of thinking, it’s impossible to know what you are missing. There are many things which are needlessly complex, slow, brittle, unproductive, ... in any particular programming environment, and javascript is one of the more limiting choices IMO. Ideally, students would be exposed to a broad range of approaches and tools in school to build a strong foundation, but in practice this often doesn’t happen, and the folks I know who reliably build the best systems are the ones who spend a decent fraction of their time learning new tools and ideas throughout their careers, many entirely self taught.
- goatlover 8y agoProbably because you don't need to do things that Node isn't well suited for. If you did, then other languages which did those things well would become useful to you.
- MuffinFlavored 8y agoDo you have any examples?
- ilovecaching 8y agoYou can make any language do anything if you have days/months/years of free time, but NodeJS isn't suitable for systems programming. Imagine trying to write a tcp load balancer or interface with Linux specific kernel APIs from Javascript. It's not a great choice for a CLI tool since there's inherent startup time for JITed VM based language. It doesn't scale well for CPU bound thread pool applications like image processing, etc. So there are lots of places where it doesn't make any sense at all or it's just a very, very poor choice for a particular task.
- goatlover 8y agoSome more would be statistical (R, Matlab, SPSS), gaming outside the web (C, C++, Java), scientific computing (Python, Fortran, Julia), supercomputing simulations (Fortran, C++, C), embedded devices (C, C++, Rust), server farms (C++, Go, Java), financial (Java, Cobol, J/K), to name three PLs in each category that come to mind. There is a big world of computing outside of apps and websites.
- jakebasile 8y agoSome experienced devs might say the same thing if they've also found a language that just clicks with them as I have. Clojure is a locus of things I really, really like and I have no reason to change despite the recent FUD around it. Namely: Lispiness, dynamic typing, functional programing, immutability, lean pragmatic design, and it runs on the JVM. I haven't seen anything that compares to it in these regards that also has the community support that Clojure has (great projects like Leiningen, Lacinia, and so on). I've tried Haskell but felt I was fighting the compiler due to the static typing (I hate static typing). It also felt like it was designed for eggheads and not people like me just doing a job. Scala feels like it doesn't know what it wants to be when it grows up. Elixir and Erlang are neat but I haven't had a chance to really try them out, but Elixir's choice to emulate Ruby-like syntax is unfortunate. That said, I do have a high degree of proficiency with Python, which shares dynamic typing and kinda-functional programming with Clojure. Python was my language of choice for years before I finally gave Clojure a try, and I haven't really looked back. The poor handling of the Python 3 switch really soured me to Python. I also did a good chunk of Go, but the static typing and syntax weirdness just killed it for me. Amusingly, Go seems to have a similar "ivory tower" approach to language design to Clojure - which indicates that type of management isn't really a problem for me.
- alexbanks 8y agoInteresting. I asked mostly because I've hopped around a lot, trying to find that one language that just clicks with the way my brain works. Java, Javascript, Go, Scala, Ruby, Rust, Python...they all had things about them that kinda clashed with the way I intuited problems and attempted to solve them. I've instead tried to rescope my thinking into "I'm the problem, I should try to follow the language's idioms to find solutions." Of the languages that I've enjoyed, I've spent the most time in Go. I've kind of just hitched my wagon to it, regardless of whether I like it or not.
- jimbokun 8y ago"Elixir and Erlang are neat but I haven't had a chance to really try them out, but Elixir's choice to emulate Ruby-like syntax is unfortunate." Of the languages you mention, Elixir seems to me like the closest experience to Clojure. Of this list: "Lispiness, dynamic typing, functional programing, immutability, lean pragmatic design, and it runs on the JVM." Only missing "Lispiness" and "runs on the JVM". As for "Ruby-like" syntax, this sounds like people not trying Lisp because "too many parentheses".
- deleted 8y ago[deleted]
- finalfantasia 8y agoI was passively introduced to Clojure when I joined my current team at my current company a few years ago. After spending 5 years in a humongous, horribly-maintained Java code base, and a short period of time with a new-ish Scala code base that was littered with code written in almost all kinds of programming paradigms (procedural, object-oriented, and functional) and then being intimidated by the incidental complexity of the language itself prior to this transition, I was frustrated to realize the cruel fact that I had to learn another JVM language that feels even “weirder” and more “complicated” than Scala. At first, I had similar questions as you have now: “What makes this ‘ugly’ language so special that one of our smartest team leads preferred it to, say, Scala, Go, or Rust?” It was not until I watched one [1] of “Rich Hickey’s Greatest Hits” [2] did Clojure finally “click” with me. It’s all of those principles that were applied and the values that were upheld when Rich Hickey designed this elegant language. I cannot reiterate all of them here. Go watch those talks and give this language a serious try. You might end up falling in deep love with it just as I did. :-) [1] https://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey https://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hi... [2] https://changelog.com/posts/rich-hickeys-greatest-hits https://changelog.com/posts/rich-hickeys-greatest-hits
- nlplingo 8y agoI’d love to see more languages that could do this: Repl driven development (100x productivity boost, especially with immutability, fp and expression oriented language) Focus on data and data transformations (without classes, types and other clutter including syntax) Concurrency (from simple state management with atoms to CSP and STM) Libraries (this is where JVM really shines) Unfortunately I couldn’t find anything even close to Clojure.
- euccastro 8y agoOTOH, it's fortunate that the people that like those things get one obvious place to meet.
- valw 8y agoI've had a relatively high degree of proficiency with other languages by several accounts, including Java, Scala, and JavaScript. Yet I've observed empirically that I am usually much more productive in Clojure for the sort of programs I write (high-level software: web apps, components of information systems, data plumbing, etc.). This is well I ended up adopting Clojure professionally: after failing repeatedly to reproduce this productivity in more popular alternatives. Regarding the benefits, for me it's the practical benefits of interactive development and the simplicity of everything in the Clojure ecosystem, which allow me to focus. Of course, I would encourage everyone to be open to alternatives to Clojure!
- ken 8y agoDifferent person here, but here goes. > Wouldn't the same be said by most programmers with a high degree of proficiency with a language? Perhaps for some, but not for me. Clojure is by far my favorite language, despite not being one that I'm most proficient in -- maybe not even my top 5 right now. > What sets Clojure apart from Haskell or Scala or Elixir or Erlang? For one thing, I've never written a (non-trivial) program in any of those other languages. :-) Based on just what I've heard: Elixir and Erlang sound like good languages, and they're next on my list to learn, and I might well feel the same about them. For Scala, the one thing I've heard consistently is that it's incredibly complex, which is the opposite of one of the main reasons I like Clojure, so it's unlikely I would feel the same about it. > Do you have a high degree of proficiency with something else? Yes, I've earned money for writing assembly, C, C++, Java, C#, Python, Ruby, Tcl, Common Lisp, Objective-C, Swift, JavaScript, and probably a couple others I'm forgetting at the moment. Even after a couple years in those other languages, when I felt I was getting pretty good, I never felt like any of them were a great model of computation. > Clojure is the language that I have always wanted to learn, but the benefits never seemed very apparent. I'm hoping your response will make them clear. Writing a program in a language like C# or Swift or Python, to me, means taking 100 random pieces of kit (which look like the inside of Anders'/Chris's/Guido's head) and being creative enough to find a way to assemble them into something that works like I want today. None of them ever matches the problem space very well, so I have to pick how to compromise the design, and guess what axis of flexibility I'll want in the future. Next week when my requirements change, I learn that I often picked wrong, so now I have to redo part of it. The syntax is complex. Managing state is complex. Decomposing problems into reusable pieces is hard. Developing a new version of a program usually means rewriting methods I've already written (for new features, additional genericity, etc), and I personally find that frustrating. I want to finish things, once. I like it when languages let me extend built-in types with methods I think they ought to have had in the first place, but I'm also annoyed that I have to write these at all. When I first tried Clojure, almost everything felt natural right away. The syntax is pretty simple -- just complex enough, beyond classic Lisp, to make common data structures (list/array/dict/set) easy to type. Learning Clojure mostly consisted of learning their new names for functions -- either functions I already knew, or which I guessed would probably exist (and always did). Remarkably, I usually find that the easiest way to solve any given problem in Clojure happens to result in functions which are already generic and composable and reusable. Once written, I very rarely have to touch a Clojure function again, either for correctness or modularity. (The obvious exception is the front-end, which is a thin simple layer that is easy to change.) I can pretty much guess how I think something ought to work in Clojure, and it does. The work is not figuring out how to map my problem to the syntax of the language (and then having to maintain that state and those invariants), but simply writing some simple functions (map data to data) to transform the format I have to the format I need.