Language agnostic doesn't mean the engineer doesn't have a favourite language of choice. It means that the person can think of a problem critically, independent of any programming language and then design a solution. Then they can implement it in whatever language it needs to be implemented in. And does so efficiently. Ofcourse, to do this, they have to know the entire stack from the highest of high to the lowest of low abstraction levels of the machine.<p>Is this possible in practice? If so how? Any books?
No.<p>The answer is no.<p>"A language that doesn't affect the way you think about programming, is not worth knowing." -- Alan Perlis<p>The way you handle a problem is affected by the languages you speak. An elixir programmer would think in functions and modules and gen-servers. A rails dev would think in objects and jobs.<p>It's not so much a favourite language thing. I mean english isn't my fav spoken language. It's the one I grew up using and thinking in.<p>When I started working in Ruby/Rails I wrote c++ code with ruby syntax. When years later, I wrote Elixir, it "sounded" like ruby. (still does really).<p>There is no way to know the full stack. Not really. One can have a working knowledge of it, (and that's awesome in start up mode), but really knowing an element of the stack takes study. Honestly it cheapens us to say otherwise.
Virtually every computer science course in the UC system beyond the intro courses teach methods of critical thinking that transcend individual programming languages. The theory of computation course I took two decades ago was fundamental to this understanding I've gained. Outside of quantum computation ideas, there is no (reasonable) propramming language I can't write software for, if that language is well defined and documented.
Pick a bunch of different languages, seek out open source projects written in them and try to contribute back fixes for each project. Eventually you will be able to work on projects in all those languages.