Recently there have been a few posts talking about testers
learning to code.
- Rob Lambert: - Why Testers Really Should learn to Code
- Fiona Charles - Why I believe its good for testers to learn to code
- Anand Ramdeo - Do Software Testers need to learn coding
- Maaret Pyhäjärvi - Learning to Code - Just Learning
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:
Or
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.