Wednesday, September 13, 2006

Multi-Lingualism - One Testers View

I've been asked, and often seen asked, "I am a Tester (QA Engineer or whatever the title is) and I want to learn a language, which one should I learn?".  Well...

Answer: Whatever will help you in your job.  There is a lot out there, its like deciding what to learn for a second language, you learn one you enjoy or one that will help you progress, its the same with software and computer languages.  If you work testing Java apps, then learn Java it will only help you out, Scheme or Lisp no, they may allow you to understand jokes from some old programmers but thats about it; unless you work in a place that uses Scheme or Lisp.

For more keep going.

This is going to be a HOP (Highly Opinionated Post), and will cover my own career in this space, so bear with me.

I started in QA with no education in this field except what I had learned myself, some BASIC, some more Visual Basic, a little C and at the time I was hacking PPP and SLIP, plus some HTML.  I decided I needed something to help do things in a more automated fashion, and at the time the language of choice for that was Perl.  Over the years I have become a good Perl hacker, and can pretty much get to happen what I want when I need to, only now though I am doing it in an object orientated fashion.  I ended up using a few test tools over the years, WinRunner and LoadRunner, so I became familiar with their scripting languages because if you want to use them effectively you need to.  I used a Bug Tracking tool years ago called Clarity, for that I needed to be trained in their proprietary language, so I took their courses and got our system set up to run.  It worked well, but over the years I have also come to like Bugzilla - and what do you know its written in Perl!

Product-wise I spent many years testing web sites and multi-tier systems.  I have had to test ASP, Visual Script, use a tool written in Visual Basic, and databases.  Well, learning ASP was not all that hard, its just getting used to its syntax (could I code in it?  No.  But I can read and follow it...I've even hacked it to perform date testing).  SQL, that was a little tricky and I got one of those SQL in 21 Days books, that followed me around for years.  Windows Installer was another item we tested, as we were installing some Applications, so I got used to the syntax for running it on the command line, and then check out how to read its logs.  Java came into much more use as I worked, I started learning it twice over time, never got good at it, but hey I can follow it!  So testing Java Apps became easy.  Especially Java Apps that used databases since I already knew SQL.  In one job we started using JUnit, and that meant working with Java, it was some doing but I got some JUnit tests created and running.  Shell scripts were useful in a couple of jobs, as we needed to be able to work some packages properly, and there is just some stuff you SHOULD NOT do in Perl.

Taking a look back I started with very little, but what can I do now?
  • SQL, can query, create, delete, destroy, manipulate and do what I want with data
  • Perl, anything Perl can do I can almost do, not that great with Objects yet but getting there
  • ASP, I can read, follow, hack and troubleshoot it
  • Shell Scripting, can set up something to run what I want
  • Batch, can set up Windows Batch scripts to do what I want
  • Java, can read, follow and troubleshoot it.  Hacking is a bit different
  • JUnit, can make a JUnit test since I can follow Java
  • Perl, most useful tool I came across and its multiplatform!
  • C/C++, can't code much in it, but I can follow it - great for Code Reviews!
Recently I started tackling Python, because at home I decided I needed some way to track my downloaded music videos, a bad hobby I know.  But what else was there to do with the tools I had but install MySQL and then add in a front end to query data, I used Perl before but wanted something graphical and Python seemed the next logical step.  So now I can add Python in my little bag of tricks.

If a project comes up and I need to work with something, learn about it, that is what is great about this industry, you can read all you want and there is always something new.

Note: I know Perl is listed twice, it's on purpose and you can make your own jokes about it.