I wonder - is programming language agnostic? Suppose if I learn a particular language - L1, my programming style & thinking is biased by the convenience of the language L1. Now, if I start programming in language L2, obviously for next few months (or years) - I continue to think in L1 & program in L2. It takes time to unlearn L1 & learn L2. Because we are humans. Do we have a bug in our expectations?
Arguably this is too 1-dimensional a description to be able to say. Having learned Python before Java, spending time with the latter has only helped me understand Python's simplicity. That said, if it was the other way around this same might not apply, since Java will force a certain level of boilerplate, but Python can't force you to not over-complicate things.
Learning the fundamentals of interpreters, compilers, etc. can also give understanding transferable between almost all languages.
Most people and employers (other than the handful of places using e.g. APL) aren't willing to spend months learning a new way of doing things before they can do anything (and I dare say that's a reasonable position in most respects). So people demand - and the market provides - languages where you can at least write the basic lowest-common-denominator stuff the same way as in Algol '52. The amount of time it takes to learn to write idiomatic L2 might be the same as the amount of time it takes to learn to write idiomatic APL, but people would rather write L1-in-L2 than not be able to write anything.
> It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
> The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.
---
Long ago, I learned C in college. My AI class was taught in LISP and I had one of the emacs hackers in the lab look over my assignment before I handed it in - "You've written some beautiful C in LISP."
It took me many years to get back to a LISP (Clojure in this case) before I wrapped my head around functional programming and the idea of passing functions around to operate on data rather than data around that has been operated on (I recently blew the mind of one of my coworkers who's only written Java when I had a Map<String, Function>).
It takes a bit to go from "how do I do X in {language}?" and think of that as a series of steps in Java or Python or whatever to thinking "how do I solve the problem of Y in {language}?" without being constrained by the language.
I've personally found that writing the same program in multiple languages is the best way to learn how to move out of "how do I do X in {language}?"
Write the Leibniz formula for π or e in Java, in Python, in Clojure (or Lisp), and in Forth. Don't try to write it the same way - use the expressiveness (or lack of) of the language to solve the problem. Does it have rational numbers? How are sequences defined and built? How does it handle recursion if you use that?
---
Epigrams on Programming - Alan Perlis, September 1982
I don't think you need to "unlearn" one; just become familiar with the philosophy and conventions of the new one. Your first language may always affect your approach a bit but you aren't going to be writing awkward code forever unless you have no interest in improving.
In my opinion it's like human languages. You can never apply the idioms and structures in quite the same way. But you can still be fluent in several languages without unlearning previous languages first.