I recently saw this quote in an article by Nikita Hasis on Medium.
“If Your Test Leaders Aren’t Telling You To Write Code, They Are Lying!
Even if it’s by omission.
There’s this argument, almost daily, about whether software testers should learn programming. I’ll jump right in. It is unimaginable that someone would tell you NOT to learn something. That’s the first, and probably shittiest lie that inexperienced testers get fed. It’s further unimaginable, and downright irresponsible to tell people not to learn something that is very clearly where a large, well-paying, and above all interesting part of the industry is heading. Wanna work on innovative, data-driven projects with smart and driven people? You probably need to pull up terminal and at least get your toes wet, y’all.
The worst part of the lie is that it imposes that coding is a difficult grind and will only cause more problems than it solves. I even saw Alister Scott’s blog post referenced as an argument against coding, ironic as it is.”
~ Nikita Hasis (Medium)
Since Medium is a walled garden that doesn’t allow you to leave a comment without creating an account I’ll leave my response here instead (where anyone is free to comment however they like).
I’ll start by saying this is a really difficult and highly contextual subject filled with emotions like job insecurity and last time I wrote about it a lot of that emotion was released, which I regret.
I’ll try to clarify my current viewpoint and try to remove any emotion and hyperbole from it.
I disagree with the overall premise of the article, but some of it makes sense. I found the lack of distinction between tester and test engineer somewhat confusing, as I will highlight below.
As a test leader, I wouldn’t tell software testers that they must write code, and I wouldn’t be lying. But I also wouldn’t tell them not to learn programming skills.
So, my current point of view on this topic is:
- Software testers can be effective both individually in testing software, and as a team in releasing high quality code, without personally writing code.
- Software testers can be more effective if they have technical skills and a deep understanding of the application architecture they are testing. Whilst there is a strong correlation between technical skills and programming skills, I have also met many software testers with strong technical skills without strong programming skills. This includes being able to use a command line terminal (as mentioned in the article), mastering text editors, and querying database tables and APIs.
- Software testers can be also be more effective as testers if they understand the programming language of the application they are testing – but this is by no means necessary – see points 1 & 2.
- When teams consist of developers that aren’t writing self-testing code themselves, if that team wants to be able to release high quality software frequently they will often dedicate someone, or some people, to programming (often full-stack or e2e) automated tests separate from development. This person must have programming skills, but I would not call this person a ‘software tester’ as their primary role is not to test software, but rather to develop automated tests (which helps the overall team goal of delivering quickly). This role is often called a ‘software engineer in test’ or a ‘test engineer’, amongst other names.
- Some software testers learn programming skills, but wish to remain a software tester, not become a test engineer, or application developer. This is great if these skills help them be a better tester and they are happy primarily doing testing.
- Some software testers are interested in becoming a test engineer so they go about learning programming skills. This is great.
- Some software testers or test engineers love programming so much they want to become application developers. This is also great.
- Some software testers love testing software so much they want to be a software tester without writing code. This is also great. If they were in a software testing role, I wouldn’t tell these software testers they must write code (and I wouldn’t be lying).
- Writing full stack/e2e automated tests for existing applications can be a difficult grind – hence our industry wide problem of ‘flaky tests’. This can be solved by writing better more testable systems – which is done by more collaboration between application developers and developers of automated tests.
- I have noticed a broader industry trend to have less software testers who focus on software testing and more test engineers who focus on developing automated tests. I believe this may be due to a general consensus that manual == bad and automated == good, which I don’t believe is always the case as it doesn’t always lead to a better end user product. But this belief may lead to test leaders telling software testers to write code (such as mentioned in the original article).
- It’s possible for a test engineer, or an application developer, to also have software testing duties, but I have seen quite a few cases where test engineers or application developers consider themselves ‘beyond manual testing’ and won’t do it. I don’t agree with this.
- If you end up in a situation where you only employ test engineers, or software testers with programming skills, and these test engineers or software testers purely want to write code (and not do actual software testing), you’re in a very bad situation. I have seen this happen.
I personally would consider my current role to be test engineering focussed as I am required to have programming skills to write end-to-end tests, but I am also expected to take on the responsibilities of testing new software features that are released: even though this does not require me to have programming skills. I like this balance.
There are currently three people in our team I would consider to have software testing roles (they have various experiences from novice to expert in programming – but focus predominantly on software testing), and two people I would consider to have test engineering roles (who are both experts at programming but also do software testing).