If my only criterion in choosing a programming language was to make myself smarter, I would probably choose Prolog or a similar language. I find that when I'm writing Prolog I am forced to think precisely about the problem at hand. The reason for this is that the programs one is writing are basically just specifications of the truth conditions that constitute a solution to the problem.<p>Other languages (especially those with flexible syntaxes) make me feel more mentally limber due to the amount of creativity they encourage. But Prolog is the only language I've ever written that makes me feel like I might actually tack on an IQ point.
I'm 100% certain that I'm a better engineer and designer/architect as a result of learning Erlang. Not just the language, but the OTP patterns and also the BEAM VM internals.<p>I design and build better software in other languages and ecosystems and have a much, much higher bar for what constitutes properly encapsulated concerns, coherent failure management, and "completeness" as a result of having used Erlang in production.<p>My Scala is better, my Rust is better, my C is better, and my framework of thinking for how to design software is better. Hell, even my Javascript is better. Despite being a niche inside a niche as far as languages/ecosystems go, the decision to learn it might be one of the best decisions of my career.
Unrelated to the question in the title, but a friend and I have often talked about this. Neither of us are in any way experts in psychology/neurology/etc. - we're lowly developers.<p>However, to us it made sense that language increases the cognitive ability of the brain because it's like memoization. We now have a symbol to represent a concept. We don't have to re-compute it over and over again. So now we reference that symbol when we are thinking and can build upon it and attach new symbols. Without having to re-compute, so to speak, the whole underlying framework/structure we are better able to utilize our cognitive cpu.<p>Whether that is true in any way is beyond me, but it made sense to us.
The question is poorly formed. How do you measure smartness? And who is doing the measuring.<p>A programming language can provide a framework for problem solving, and such a framework can make the task of solving a class of problems easier. Because problems can be solved with less work, it makes you feel smarter. Having the right abstractions makes problem solving simpler.
Learning to program can teach you approach other areas of your life with more rigor: separating concerns, minimizing dependencies, iterating fully or with a short-circuit over a collection, refactoring, eliminating cruft, keeping history, reducing constant factors, task decomposition, etc. etc. etc.