Monday, 30 June 2014

A discussion on do testers really need to code.

Recently there have been a few posts talking about testers learning to code.

I find these discussions interesting and at the same time very worrying.  I have seen many posts that say testers ‘should’ or ‘need’ to code as shown from some of the examples above, excluding the one from Maaret. To make it clear none of the posts dictate that testers MUST code, but they do appear to give an impression that for testers to make themselves employable they sure should learn how to code.

My temptation was to reply to each of these posts as comments but in the end felt that would not be a great platform to get across my concerns and views on this topic, a topic that keeps coming around again and again.  I am not against testers learning to code but feel that going down this path could have a significant impact on the testing profession in the future.

What do people mean when we say "Learn to Code."?

To the majority of people learning to code means learning a programming language and being able to write an application/script in that language. I can see,  to some, in certain situations where that can be very useful, however do we really need to learn coding or would just having an understanding of the syntax of code be just as useful?

What does this mean when I say syntax?

The Oxford dictionary defines Syntax as:
The arrangement of words and phrases to create well-formed sentences in a language:
The structure of statements in a computer language.
E.g.: the syntax of Java or Python.

Having an understanding of the structure of a programming language does not necessary mean you can code an application in that language but you should be able to read and follow lines of code and have a fair idea of what it means and what it does.  The first key point in this article is that we need to move away from creating generic testers who all code to ones that have a fair grasp of the syntax of languages.  This way we will not excluding, what could be, great testers, by turning them away from testing by insisting they learn coding, which is something they may have little or no interest in.  An English major for example could make a wonderful tester by understanding the subtle written words given by a customer to the project team and providing a multitude of creative testing ideas.  Do we really want to exclude these types of people from the testing profession?

This leads on to my next concern, if we insist that all testers need to learn to code we miss out on building diverse teams with many skills that compliment and sometimes conflict each other.  This enables much deeper critical thinking processes and ideas to emerge.  It is a concern that if we insist on testers all learning to code or need to code, then becoming an entry barrier into testing then we could lose a great deal of diversity among software development teams. We instead get a set of ‘cookie cutter’ clones who all code, think and work in similar ways.  This will diminish the testing talent pool, as those who would love to become a tester get set aside for an ex developer who can code but now wants to try their hands at testing. This is not to say that ex developers do not make great testers, we just to need to welcome people with a diverse range of skills and expertise into this great career rather than limit it to those with a coding background or skill set.  Also what do we mean by coding?  I touched on this earlier, within software development coding normally indicates being able to program.  However in social science and especially ethnographic research coding has a different meaning.
Coding is an important technique in qualitative research such as anthropology, ethnography and other observer and participant-observer methods.

If we insist that testers need to learn code, how about we twist this around and say that testers need to learn social science methods and use that in our testing activities.  To quote the title of the article by Rob Lambert:
“Why testers should really learn to code”

If the code Rob was referring to above was the social science technique and he stated in his article that all testers ‘should really’ learn to do social science coding.  How much debate would that have caused?  If others insisted that every tester should really have this skill and that without it you have a far less chance of being employed as a tester, how would you react? Does a tester having this analytical skill make them any less important to a development team than someone who can do programming? I am unsure if this is the case, since the cognitive thinking skills needed to do programming and to do testing are different as mentioned extremely well in the article by Maaret.

One argument put forward is that testers who can code can create their own tools to do tasks such as data generation, performance, load or stress. I do not see a problem with this but I would add that there are many FREE tools available that may or could do the job without the need to re-invent the wheel. For example for data generation I use Excel  and PerlClip both of which suit my needs.  I have a tool inventory that for the majority of my tool requirements perfectly meets my needs.  I have seen many cases of people writing tools or scripts for the sake of doing so instead of researching or asking advice on tools that are already available.  This is not to say there are situations where creating or writing a tool could be more useful and time saving.  I have in the past done this and my programming skills are not great and I would rate as rather mediocre.

We have to be careful about the barriers we put in place for those who show an interest in having a career in testing.  Sure they need to have certain characteristics such as:
  •  A willingness to learn.
  • Self-improvement
  •  Critical and creative skills
  • Plus many more.

Classifying this to one particular skill such as programming rather than a characteristic, such as analytical thinking or logical thinking in my opinion is very narrow minded.

One other aspect that I have not seen mentioned in any of the articles is the issue of bias caused by thinking in a similar way.  If there is a continuing trend to insist that testers learn to code then there could be a convergence towards similar thinking for development and testing.  This may lead to bias in the approach to testing where the effort and focus is on the logical way in which the code works rather than an outward view of how the user may, or may not interact with the application.  Humans are not logical and will not follow the path you expect them to do so.  This is what I feel distinguishes good from great testers, the ability to think critically and apply creative ideas in a way that exposes flaws or issues within the system under test.  If we  continue to insist that testers should really code we could end up with a set of people developing software in which everyone thinks in a similar way and there is no movement from the well-trodden path.

If people have no interest in learning about coding and instead have a passion for testing and how to improve testing then we need to be careful about the message we are sending out from this profession.  I would rather have people working with me who are passionate, driven to learn and improve themselves and others than an excellent coder who want to do just a 9 to 5 job and no more.

I will finish this post with the following quote:
“We are not supposed to all be the same, feel the same, think the same, and believe the same. The key to continued expansion of our Universe lies in diversity, not in conformity and coercion. Conventionality is the death of creation.” Anthon St. Maarten - Divine Living: The Essential Guide To Your True Destiny

EDIT : Corrected some typos.


  1. Truth be told, it makes me ill that no one talks about developer needing to learn testing, yet they are ALL expected to test now rather than testers to some extent. And when they DO need to test, they learn some tool ending in DD and totally ignore validation and everything known about testing to date.

    I try not to talk about these topics and instead just talk about what I see work well, or I get so depressed I start thinking the only way forward is for those of us with the skills to do this work to totally take over all business in a coup so these jackwagons can't force their terrible ideas on us.

    1. Thank you for your comment Lanette

      I understand your concerns and worries however with the organisation I work there is a clear direction that developers understand the complexity of testing. I feel going forward that is vital, the blurring of roles within software development to me is OK as long as the people you have in those teams are skilled.

      There is a need to talk and discuss these issues in a open and collaborative way. I talk a great deal with Rob Lambert and even if our views do not agree we respect each other to be able to listen and be constructive and create new and novel ways forward. So I suggest you do not shy away from these talks and topics but look for ways to educate those who may be lacking in their thinking.

  2. "Classifying this to one particular skill such as programming rather than a characteristic, such as analytical thinking or logical thinking in my opinion is very narrow minded."

  3. This comment has been removed by the author.

  4. Great post John.
    I am in total agreement. Studying social sciences and various human behaviours (such as habits) are a lot more beneficial than learning to code. The value of a tester with this knowledge and skill (in my opinion) far outweigh the advantages of having a tester who knows how to code. If testers had to code you may potentially lose a key testers benefit; the ability to view how a user may use and interact with a system. If time is spent coding then skills like this may start to be lost and then it is an uphill struggle to get them back.

    1. Thank you for your comments David. I fully agree we need to be careful of the message we send out to those who potentially could be great testers based upon their social science knowledge and skills.

  5. (my damn phone, lost all what I've wrote, writing again)
    Few pennies of mine,

    I think that skill like coding should be learnt by tester, coding yourself give you to opportunity to understand the common pitfall and root cause which are cause by whom writes code.

    Seeing a bug and visualizing exactly what the code looks like that caused this bug, and what the one that introduced it might thought, or felt when he did, can help you dealing with the root cause of why this bug was introduced. (instead of moving to automatic blaming mode, which we sometime tend to move quite quickly into)

    Furthermore, coding is like any other language, if you want to communicate better with people that understand a specific language.
    first thing you do is to learn their language, how else can you teach them your language ?
    For example, we don't talk much Hebrew when we meet, do we ? :)

    But as always John, your thoughts and questions are always a food for the mind.


    1. Hi Israel

      Thank you for your comments. A couple of points I would like to clarify.

      "Seeing a bug and visualizing exactly what the code looks like that caused this bug, and what the one that introduced it might thought, or felt when he did, can help you dealing with the root cause of why this bug was introduced"

      Not all bugs are because of the code so understanding the code may not help in a lot of situations. What if it was a case that the User experience was poor or that the person using it felt like something was wrong (this is in the social science space) therefore based upon your statement: "skill like coding should be learnt by tester," then I could state skills like social science and UX SHOULD be learnt by tester. To me it is nonsense to force highly skilled testers to learn something that they do not have an interest or passion for but they have great testing skills. They may then walk away from the testing profession and we are left with coding clones, who all talk and think the same. That would be a shame and a great lost of opportunities to bring variety into the profession.

      Next you mention the need for language skills :

      " if you want to communicate better with people that understand a specific language.
      first thing you do is to learn their language, how else can you teach them your language ?"

      So I state instead of learning a programming language you need to learn the language of business. As software development matures the rational for learning to communicate with business people, users and customers becomes more prevalent especially when being agile.

      Learning to code is only one of many skills a tester COULD learn. Why do we have to insist that this is the most important?

      Hopefully this helps to clarify a little more for you why I am not an advocate of testing should learn coding.