During my schooling at Faculty of Electrical engineering and computing (FER), professors followed very simple mantra for teaching programming languages, they did not teach programming languages. We got assignments, and we should find our own way to teach ourself programming language. The trick was that it was before Google era and c++ was very trendy. And I did a lousy job. Available books in Croatian were poor direct translations of poor programming books in English about c++.
At my third year I met excellent teacher, Julijan Sribar, and he mentioned that his book Demystified c++ (coauthor was Boris Motnik) will be published very soon. Knowing that he is excellent teacher, I bought Demystified c++ as soon it was available.
In book authors do not only teach c++, they also teach you how any programming language works. For example, the difference between int a and float b. And why program with float b needs more memory that program with int a. Do testers need to know how to program? I do not think so. But I think that tester should now how programming languages actually work.