There is a trend in recent years about companies hiring QA Engineers who are strong in programming. In short, they are looking to hire SDET (Software Developer Engineer in Test) over QA (Quality Assurance)
I have been in Software Testing for over 12 years but only understand basics of coding and I don’t think to be effective tester that coding is really a must but having basic knowledge is always helpful.
In my experience a good programmer won’t make an effective tester as the mindset and vision of programmer is totally different compared to a tester.
A good tester usually approaches the application from end user perspective and can come up with multiple scenarios while doing exploratory or ad-hoc testing.
A programmer always thinks serially to write a code which will build a functionality for an application.
On the flip side a good programmer can build automation scripts which can be used for checking if already tested functionalities are working. Automation has limitations and not everything can be automated for a given application.
An effective tester is someone who can find critical and tricky bugs for any application which is under test.
Automation rarely finds new bugs in a new functionality but can find bugs during regression testing for an already passed functionalities. This is not testing but just checking if existing functionalizes are working without issues.
Automation is way to perform human clicks faster in just a serial way on a given application.
Also, from my experience, maintenance of automated scripts takes more time when code changes happen and wind up breaking dozens of automated test cases.
To conclude, I feel knowing how to code will add a weapon in your arsenal which can be used for certain purpose (regression) but it’s not necessary to be effective tester as human judgement and brain cannot be replaced whatsoever.