Mostly Python. I do try to avoid mutable state as much as possible, and generally keep things functional (in the sense of functions used for the return values, not their effects). When there is mutable state, keep it as local as possible (within functions or classes).
"My gut feeling says that students never learned strong reasoning skills and mathematical induction."
This quote from the linked article resonates with me quite a lot. I see people trying to understand recursion in code and not getting the hang of it.
CMU is one university where it's CS curriculum teaches functional programming after a rigorous course on Pure Mathematics Intro - https://www.math.cmu.edu/~jmackey/151_128/welcome.html. The functional programming course (15-150) materials are not public, but they use SML and uses heavy use of induction proofs and recursive implementations.
The other line of programming pedagogy argues that only simple high school algebra is enough to teach programming via recursion. I am talking about How to Design Programs: https://htdp.org/ and now the DCIC book: https://dcic-world.org/. They argue that looking at the data and its inherent structure is enough.
The above two approaches are mostly polar opposites of each other. I want to know what other HNers think about this.
It will surely make you a great programmer if you haven't dabbled with functional languages before. Even if you have, it still makes a great course only for the teaching style of Dan.
Stick to a specific set of tools YOU are comfortable with. Don't go with the newest fad. What matters are your skills and concepts. Not what tool you use. A skilled craftsman can use very basic tools to build impeccable creations while a naive one with the latest fancy tools can create junk. So don't jump editors, just learn the one you are comfortable with and do is in much depth.
Math -
Don't look for the golden trick. Just solve more and more problems and you will eventually get good at recognizing patterns.
The programming advice is good for productivity, but learning new things is fun too, and sometimes it becomes the best option afterwards. To add (personally), don't use new fads in a production setting or when productivity is critical, but if it's for fun or exploration, I think it's all good.
I use vim (mediocre with) for my side projects, but VS Code (proficient with) at work, for example.
https://www.coursera.org/learn/program-code