3 ms·
I run a multi-million dollar business which I started with common lisp. I since moved away to go and then rust but I've been looking at clojure again lately. F
by ilrwbwrkhv 2y ago
I run a multi-million dollar business which I started with common lisp. I since moved away to go and then rust but I've been looking at clojure again lately.
For a team that needs to get s** done and has more per employee productivity than Faang combined it's hard to beat the speed with which you can build things when you have the repl and interactive programming.
The jvm while doesn't have great error messages is a fantastic runtime.
- giancarlostoro 2y ago> which you can build things when you have the repl and interactive programming. This is how I use Python to be honest. If I'm unsure of something, I just bust out the REPL.
- ilrwbwrkhv 2y agoI know people talk about python being Lisp without brackets, but for example in SBCL and in other lisps like clojure I could just run a larger function, figure out that there is the wrong output, change a tiny function in it, eval that, eval the larger output, get the result. In SBCL there is also the break loop which is just magical. I do not know how you do that in python without using a debugger and stepping through the code line by line. To be fair I used Python only a little bit almost a decade back. Are things more interactive now?
- zelphirkalt 2y agoI think in Python REPL you just have to redefine the whole larger function. I am not aware of a way to access internally bound identifiers, or even modify what values they are bound to.
- int_19h 2y agoFor starters, those identifiers aren't bound until the function actually runs.
- codr7 2y agoThe condition framework/break loop is one thing I wish more Lisps would copy.
- ilrwbwrkhv 2y agoThats the one thing I miss in Clojure from CL. Although technically due to Clojure' immutability you have to do the same number of changes. But just dropping into the break loop, updating, continuing is just magic.
- codr7 2y agoMakes the REPL feel a lot more alive and interactive, much like a SmallTalk IDE.
- sodapopcan 2y ago> I know people talk about python being Lisp without brackets What on earth?? Who are these people, this is the first I've heard of this and am having trouble understanding what the argument could be. Like, basically all languages get transformed to an AST as part of the compile step soooo I guess any language is sort of a lisp.
- jodrellblank 2y agoPeter Norvig: https://www.norvig.com/python-lisp.html https://www.norvig.com/python-lisp.html - "Basically, Python can be seen as a dialect of Lisp with "traditional" syntax (what Lisp people call "infix" or "m-lisp" syntax). One message on comp.lang.python said "I never understood why LISP was a good idea until I started playing with python." Python supports all of Lisp's essential features except macros, and you don't miss macros all that much because it does have eval, and operator overloading, and regular expression parsing, so some--but not all--of the use cases for macros are covered." "Take a Lisp program, indent it properly, and delete the opening parens at the start of lines and their matching close parens, and you end up with something that looks rather like a Python program." also Peter Norvig on HN: https://news.ycombinator.com/item?id=1803815 https://news.ycombinator.com/item?id=1803815
- sodapopcan 2y agoHa, fair enough. Thanks!
- kubb 2y agoI feel like there’s a minimum developer quality that’s needed when using a language like Clojure, without static typing, and with a wealth of idioms and best practices that need to be followed and libraries that need to be known. Without it it’s a matter of time before the codebase can’t be developed anymore and the software doesn’t work as intended.
- jb1991 2y agoYes and actually this happens often that a project is moved to another language because of maintainability, especially when a key person leaves the company.
- lispisok 2y agoI would love to see how Clojure's "wealth of idioms and best practices that need to be followed and libraries that need to be known" compare to almost any other popular language. Clojure is by far the simplest most straightforward language I've ever used with very few details and gotcha's that need to be memorized.
- travisgriggs 2y agoI can appreciate that. I'm on a journey this last year or so with Elixir, which also has an elevator pitch of "consistency" and "simplicity", true to a couple of defining principles, rather than hodge podge of committee like language initiatives. But does it really matter now days? If you're doing anything web oriented, you don't get to abstract the hot mess that is web programming away. You still have to learn a ton of nuanced stacks, many couched in idioms that were established decades ago, and perservere today, wrapped in layers of whatever.
- kubb 2y agoI think Go, for all its flaws, is an example of a language where mediocre developers can be more successful. Java would be another.
- ilrwbwrkhv 2y agowell i agree you need developers who are on the senior side but thinking about data and pipelines, multi methods etc, makes for a quite extensible, large, applications. the fact that because of the repl the happy path is always tested while being built and with clojure spec you can secure the edges, it is quite scalable. i love static typing and rust in general but with web applications, the problem space is really a distributed concurrency problem of dynamic data. and clojure is basically tailor made for that.
- oDot 2y agoYou should give Gleam a shot. No REPL, but its simplicity, functional-ity and the BEAM lend themselves to the get-shit-done approach
- ilrwbwrkhv 2y agoGleam takes more code to write than rust. Doesn't have a strong enough documentation / ecosystem yet. But I agree the beam VM is very underutilized and underappreciated.
- MarkMarine 2y agoI see gleam as a sweet spot, the type system I’d prefer to be writing (rust’s sensible one) and I never have to fight with the borrow checker
- tasuki 2y ago> Gleam takes more code to write than rust. Do you have some source for that? Perhaps an example?
- ilrwbwrkhv 2y agoNo. Take that with a grain of salt. I did some large file reading in the past and gleam doesn't have a good abstraction for that yet whereas in rust it was straightforward. Simplifile basically reads the whole file into memory.
- cess11 2y agoThey've added https://hexdocs.pm/file_streams/0.6.0/ https://hexdocs.pm/file_streams/0.6.0/ for this purpose. There's a bit of ceremony but similar to how you can interface with Java libraries from Clojure you can pull in Erlang when Gleam isn't enough. You can do some code shortening with use, https://erikarow.land/notes/using-use-gleam https://erikarow.land/notes/using-use-gleam, but it will likely always be rather chatty and won't support metaprogramming: https://lpil.uk/blog/how-to-add-metaprogramming-to-gleam/ https://lpil.uk/blog/how-to-add-metaprogramming-to-gleam/
- deleted 2y ago[deleted]
- agumonkey 2y agoCan you describe your stack and workflow ?
- anonzzzies 2y agoDid you move from CL because of hiring or another reason? I cannot imagine leaving CL and if I had to, I would go for abcl and then add clojure. Depending on the business that is of course. As long as I don't need to build a 1000s person tech team, I would not move; it's just far faster until you get to a scale where processes take over everything.
- ilrwbwrkhv 2y agoHiring. And honestly the docs and stuff look really dated and I understand why people are a bit put off. At some point you have to modernize the look and feel of the ecosystem. The docs are really detailed though and if it was just me and a few others I would have gone to CL in a heartbeat.
- anonzzzies 2y agoYes, they look dated but most things are just so incredibly stable, robust, easy to work with once you are in. One of my pet peeves on github is with modern ecosystems that people ask after 1 week of no commits 'is this project dead'; we use rocksolid well documented and robust libraries that have basically not been updated for a decade; apparently you dont need to change the api every 2 days completely and introduce breaking changing in minor versions of libraries where the actual thing they have solved hasn't changed since the dawn of computers themselves... Like is the normal in npm libs for github star vying. And the supposed lack of libraries; sure it happens, but more often it is so easy to roll (99% of npms) that in CL no one would use the CL lib if their was one; faster to roll than search for one. I agree with the modernisation steps though: need to bring together fairly recent enough industry users and scan their code base for which common lisp functions and libs are used (as for as I see, most practical people use a subset and don't often go look for different ways to do something they might be buried in hyperspec somewhere) and distill that down to a Industry Common Lisp 'spec' and modernise everything related to that.
- wooque 2y agoWhy did you move away from go? I don't use it, but seems like productive language, being simple, fast to compile and performant.
- ilrwbwrkhv 2y agoSo go has runtime failures due to null pointers. When dealing with a bunch of json and dynamic data, I don't need to deal with null pointers in 2025.
- MarkMarine 2y agoYou can make really shitty code in any language, and the go community’s patterns around essentially brute forcing things (or code generation when that fails, which is horrible. Time to learn another custom DSL just to have an abstraction) rather than have good abstractions built into the language… it becomes painful if you’ve worked in a language with a better systems. Pointers and null values are inescapable in go, and people treat them worse than they do in C. Generics are too limited (I can’t define a scala flatmap like function) And I can’t make data immutable or control access in any fine grained way in go. Compile time in my go monorepo is minutes now. Someone added a bunch of go lint rules.
- valenterry 2y ago> being simple Being simple is not a good thing. A simple language means that the programs become complex and hence complicated. The advantage is that it's easy to get up to speed and to write greenfield code though.