Not feeling like to do something directly useful right now. Maybe trying to learn a useful dynamic language could probably help me feel a little bit relaxed. I'm always a Lisp-envy person. Like others I was influenced by Paul Graham. But I'm not yet really into lisp, or feel comfortable with its idioms and macro now.
I know a little bit Haskell, and the intermidate stepping stones are more clear: they may be currying, composition, type and typeclass, functor, monad, monad transformer. By then you can actually write useful stuff, and probably feel productive. Although similar functional patterns still apply, but that's not the reason to use lisp -- without macro it's basically just JavaScript. However, macro is a different beast. Its idioms are more harder to master.
I already know some Racket and Clojure, So this is another shot. After all it's the language Paul used himself (Although he appreciate Scheme more, and write Hacker News with a Racket dialect he created named Arc). If I finish this book (not likely from the experience) maybe I can try On Lisp as next one.
Here go's Greenspun's tenth rule:
Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
Common Lisp is a powerful langugage. It's a big language as apposed to small and elegant language Scheme. It's a multiple paradims language -- both functional and object oriented, and allowed to perform side effect directly. Though it's not actively evolving anymore, actually it's fine for a Lisp dialect -- you can always roll your own stuff.
It's fast, and there are great tools like slime and emacs to use it without having to stop. Thus it helps me focusing. What's more, I'm writing this blog with org mode in emacs, and I can eval any CL code inline:
(format t "Hello, Common Lisp!")
Here's a simple comparation with other popular dialects I already know:
- Emacs Lisp is very cumbersome to use actually. Sometimes feels like writing vanilla CSS.
- Scheme and racket is great and neat. But the IDE or Emacs plugin is not as smooth as Slime.
- Clojure is great and Cider is great. It's a modern language with immutable data types and async support. The biggest drawback is JVM gives you a long startup time and not so flexible as a scripting language. ClojureScript is also great and has many mature tools and lib already.
Actually most people use the word Lisp to describe a language is not fair enough. It's more like claiming C, Java and python are almost the same language. Lisp nowadays mostly falls to 3 categories: Lisp-1 such as Scheme, Racket, Clojure; Lisp-2 like Common Lisp; and those others that are much older, like Emacs Lisp which doesn't even have lexical scope (actually it could be manually turned on for specific script after Emacs 24).
This introduction is getting boring. Let's just roll.