I'm reading Land of Lisp in an effort to better understand Functional Programming patterns and idioms. Why not start with the mother of all functional (and procedural, object-oriented) languages. That's gotten me thinking about the impedance mismatch of programming languages and natural human languages.
When computing machines were first invented, we had machine language, or ones and zeros as the CS pioneers referred to it. Then came compilers and interpreters and run-times and virtual-machines.
All in an effort to better match the precision of machine code with the vagary of human language. What makes the human brain remarkable is its ability to process patterns and context while evaluating expressions. It allows for a relatively small syntax to express a wide variety of ideas and concepts. That's our natural language has evolved. Take a small base, the English alphabet for instance, and build it into patterns, words and sentences, until a usable, repeatable, inferable system is accepted by all users then share! These patterns have a lot of visual and logical helpers that give the expression meaning beyond the provided syntax.
Computers, by nature, excel at precision and accuracy so they require a language that's very precise in order to function properly. Early languages like Lisp don't even really have a syntax to speak of, rather more of an abstract prefix notation tree. Symbols like parentheses, commas, quotes, and back-quotes rule the land with instructions and data intermingling throughout. There's no functionally useless tokens, or syntactic sugar
, here to assist readability or understanding. As languages evolve and become higher-form, they typically approximate more human-readable features. Each new language supposed to better interface concepts with instructional code.
As machines get faster and platforms get more efficient, we find new layers of abstraction to exploit them. It's a never-ending cycle that precludes us from actually gaining any computing efficiency. We even have macros
and domain-specific language
s now to approximate the utility and business knowledge that our brains intrinsically and subconsciously handle for us. I propose we quit that chase. We should just adopt a human-understandable language that's as elegant and functional Lisp and quit trying to layer language on top of framework on top of platform ad infinitum.
(defun are-you-with-me ()
(apply #'share(cdr ('language *knowledge*))))