Every now and then I’ll hear people argue either that software testers absolutely must know how to code, or that software testers absolutely do not need to know how to code. I believe the true fact of the matter is that it totally depends upon the situation. At Microsoft for example, virtually all testers must have some knowledge of coding. Microsoft produces all kinds of software including complex systems software. Testers must know how to code so that can understand and effectively test the systems software they’re working on as well as understand, modify, and write test automation which is the only practical way to test certain aspects of some types of systems software. On the other extreme you have pure manual testers who are testing a relatively simple (compared to systems software that is) application program of some sort. Do these kind of testers need to know how to code? Well, it depends. However, I can state this with pretty much 100% confidence: the more any tester knows about coding, they better he’ll be able to do his job, and the more career opportunities he’ll have. But here’s an opinion I have that many of my colleagues (whose opinions I respect a lot) do not agree with. I believe that, in general, knowledge of specific programming languages is (in a way that I’ll explain in a moment) actually more important for software testers than it is for software developers. My logic is that it is critically important for software developers to understand algorithms and problem solving. Sure, the programming language used is extremely important so that any algorithm can be implemented accurately and efficiently, but the underlying algorithms are in most (but certainly not all) cases more important than the choice of programming language used. Software testing is primarily an analysis activity so in many (but not all) situations software testers need to be able to understand the algorithms used in the software system they’re testing, but not necessarily create very complex algorithms themselves. By sort of a weird default this means that knowledge of different programming language features is more important for testers, so that can quickly implement test automation (and test cases) that test the software system they’re working on as thoroughly as possible. Now I’m not saying that this algorithms vs. languages importance idea is a Boolean thing; I’m merely suggesting that all software testers can do their jobs better and expand their career opportunities by learning how to program better and by learning multiple programming languages.