&gt; The only thing I&#x27;ve really found lacking is support for basic string operations. I&#x27;m sure there is a solid library out there for things like replace(), but it seems silly for everyone to possibly be using separate libraries<p>It&#x27;s not that bad, there are other languages which have this problem - you can see exactly the same situation in JS-land, for example. It would be much worse if not for quicklisp. I think quicklisp and asdf are among the best package distribution tools: I feel it&#x27;s better than pip and gem and similar to npm. Installing a library is literally a single line in your code. There&#x27;s the problem with finding the package you need and it&#x27;s harder than with JS and npm, but doable.<p>BTW: what do you do to learn CL? I&#x27;m using StumpWM as my window manager and I think it&#x27;s one of the best ways of learning CL. With SLIME, then, you get almost Lisp-only environment, especially if you use Emacs for your other editing too. I wrote a couple of blog posts[1] about StumpWM and posted my config on GitHub[2].<p>[1] <a href="https:&#x2F;&#x2F;klibert.pl&#x2F;posts&#x2F;stumpwm.html" rel="nofollow">https:&#x2F;&#x2F;klibert.pl&#x2F;posts&#x2F;stumpwm.html</a> <a href="https:&#x2F;&#x2F;klibert.pl&#x2F;output&#x2F;stumpwm-better-modeline.html" rel="nofollow">https:&#x2F;&#x2F;klibert.pl&#x2F;output&#x2F;stumpwm-better-modeline.html</a><p>[2] <a href="https:&#x2F;&#x2F;github.com&#x2F;piotrklibert&#x2F;stumpwm-config&#x2F;" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;piotrklibert&#x2F;stumpwm-config&#x2F;</a>