So far, what’s biting me in the ass most often when playing with newLISP is the fact that you have to explicitly control what lists get executed when. It’s a logical thing, because the interpreter has no way of knowing what lists are data and what lists are code at any given point in time (which is the point of LISP-y languages), but it’s taking me some effort getting used to that. My old primate brain finds syntactical markings easier to understand (e.g., Python), but that makes hardens the (artificial) barrier between data and code.
Which suggests the question of why the hell should I have to choose? Isn’t there an IDE that, say, rewrites on the fly a LISP list making educated guesses about what will get applied when? E.g., it could render (inc a) as inc(a), and so on. And it could go the other way around, rendering (I use the word deliberately) the parse tree of Python code into a LISP format that would make it easier to think about and write code manipulation code. I read something about such a project a long while ago, although I have yet to track it back — essentially, specific languages are conventions to describe computations, so we should be able to render any particular computation into whatever language is most convenient to the task at hand. Compilers do that, which is nice for the CPU, but my brain spends time dealing with programs, too.