Sunday, 18 November 2012

Testers Should Learn About Zygohistomorphic Prepromorphisms

The "testers should learn to code otherwise they will become extinct like the wooly mammoths" set of postings has started again.  Michael Bolton has previously written on 3 good reasons why it is useful to know how to program and I'm not about to re-hash those arguments again.

However, a couple of things happened recently that highlighted the knowledge gap between developers and testers and how vague "learn to code" is.

I'm lucky enough to work with a bunch of smart developers and, like the best testers, they are always learning new skills and techniques.

One of them recently tweeted from the Clojure/conj about Zygohistomorphic prepromorphisms
Could be an elaborate in-joke or could be serious, I have no idea...

Another one is learning J - which was a new language to me, didn't know we'd got past C...
though it seems my old C knowledge is limited as I didn't know these things about C nor that C could be considered a functional language

heck, even if I was to stick to learning Javascript then I'd really need to learn some of the common libraries and how they are used eg jQuery, Backbone.js, node.js - but then those pesky devs don't stand still and just write plain ol' Javascript, oh no, some of them use CoffeeScript, a language that compiles into Javascript.

Another dev is blogging about Unifying Programming and Math and explaining ( or trying to, my brain melted ) the Curry-Howard Isomorphism and Martin-Löf Type Theory. I tried using Google Translate to get it into English but it came back with the same words.

Is that the sort of learning I should be doing ? Or do the 'testers should code' brigade mean that I know enough to use page objects in Selenium and not use the Selenium IDE ?

and I'm not even going to start, but might hint, that even knowing code is not enough, testers should also have some understanding of design

Meanwhile, I am currently halfway through the BBST Foundations testing course. It's a great course, good interaction with the other testers on the course and makes you think about your testing and what you really know and don't know. It's a month long course, 20-30 hours a week in your own free time, has to be paid for and gets booked up in advance. So it attracts good and keen testers.

The latest exercise we had to do on the course involved thinking about how many tests would be required to test the square root function if a 32-bit word was passed in. This caused some confusion amongst some of the testers who were not sure what a 32-bit word was ( no, it didn't mean that hyphenated words were a test case nor that lower and upper case should also be tested ). Should I ask them what they think of heaps, call stacks, tail recursion, monads, singletons...

In the end "learn to code" is as vague as "learn to test", but makes a good attention grabbing title when used for a talk ( well, not anymore it should be binned along with the 'is dead' meme ).

Now, back to my Learn You A Haskell For Great Good! , BBST course and finishing Thinking Fast And Slow before I order The Click Moment


martialtester said...

Yes Phil... YES!

Thank you for this. Couldn't agree more.

Oh, and catchy title by the way. :0)

Darren McMillan said...

Couldn't have said it better myself!

Sonja van Baardwijk-Holten said...

Zygohistomorphic Prepromorphisms is an insider joke. It is a way for programmers to tell you that your coding skills are either absurd, unnecesary complex or in their opnion most likely not suitable to the task and quite frankly rather unintelligeble. Basically someone is telling you to crawl back under a stone, because they do not value your opinion. So it was intended as a veiled insult... me thinks. Hope this helps.

badbud65 said...

I think you've hit the nail on the head I've been having this discussion at work now for a month on and off and will be using some of your rebuttals.

Peter Kehl said...

Hi Phil,

You've mentioned Selenium IDE vs. Page Objects. If you're using Selenium IDE, see It enables reuse and sharing of IDE tests.

WarDaft said...

Zygomorphisms, Histomorphisms, and Prepromorphisms are all useful. When I learned what a zygomorphism was I realized I had built that exact pattern by hand too many times to count. A zygomorphism can be something as simple as keeping a running character count as you perform some other process on words in a file using that count. That would look like `zygo (\word count -> count + length word) (\word count process -> ...)` where the second function simply has the character count available as provided by the first function. However, you can do arbitrary preparation in place of a simple word count. Also, you can combine morphisms, so zygohistomorphic prepromorphisms are a thing that technically exists. I am not aware of a single actually useful algorithm that they are the most appropriate tool for, however. Nor is the person who actually built the library that provides them.