I have a copy of the first Q for Mortals (I bought it a while ago); thanks for this one for free.
Edit: what i'm basically saying is that practicing any of these languages will help you in potentially more than one way; it will open your mind to interesting paradigms and constructs as well as give you job opportunities you would not think of possibly later on.
Edit2: https://github.com/JohnEarnest/ok is interesting for playing around by the way
KDB is very interesting and I always had the feeling, if you stare long enough at the code you kinda learn a different way to express algorithms and a different view for how to write code. APL and its successors are probably one of those things that Alan Perlis talked about when he said that you should only learn a programming language that changes your way of thinking.
On the other hand:
I don't know why but it somehow bothers me that KDB+ is not open source. I'm not even someone that demands for anything to be open source and I don't actually use KDB besides thinking about learning it every now and then but it really keeps me off.
Probably most importantly it will raise you potential salary :) KDB are really interesting and a door to the finance industry if that interests you.
> Dynamic typing combined with mutable variables is flexible but also dangerous. You can unintentionally change the type of a variable with a wayward assignment that might crash your program much later. Or you can inadvertently reuse a variable name and wipe out any data in the variable. An undetected typo can result in data being sent to a black hole.
That is not a characteristic of dynamic typing, but of a spartan interpreter implementation and possibly language design aspects not related to dynamic typing.
If a language doesn't distinguish variable binding from assignment, that is a poor design choice which interferes with the ability to trap an assignment to a nonexistent variable and promotes the silly variable re-use alluded above.
If binding is distinct from assignment, we can diagnose the situation when a symbol is assigned that was not instantiated previously by binding.
Moreover, we can use lexical binding to introduce new variables wherever we need them, rather than re-using. We can still choose to write long functions in which variables are re-used for different purposes in different sections, but the language isn't foisting this bad design on us.