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.
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.
ReplyDeleteI 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.
Thank you for your comment Lanette
DeleteI 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.
"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."
ReplyDeleteYes!
This comment has been removed by the author.
ReplyDeleteGreat post John.
ReplyDeleteI 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.
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.
Delete(my damn phone, lost all what I've wrote, writing again)
ReplyDeleteFew 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.
Israel
Hi Israel
DeleteThank 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.
regards
John